CUDA 是一种由 NVIDIA 开发的并行计算平台和编程模型,它允许开发者利用 NVIDIA 的 GPU 进行通用计算。以下是一些关于 CUDA 的关键信息:

安装与配置

  1. CUDA Toolkit 安装

    • 下载并安装最新的 CUDA Toolkit。
    • 确保安装了正确的驱动程序。
  2. 环境变量配置

    • 将 CUDA 的 bin 目录添加到系统路径中。

基本概念

  1. 线程

    • CUDA 使用线程来执行计算任务。
    • 块是线程的集合,通常包含多个线程。
  2. 网格

    • 网格是块的集合,用于组织并行计算。

示例代码

#include <cuda_runtime.h>
#include <iostream>

__global__ void add(int *a, int *b, int *c) {
    int index = threadIdx.x;
    c[index] = a[index] + b[index];
}

int main() {
    int n = 5;
    int *a, *b, *c;

    // 分配内存
    cudaMalloc(&a, n * sizeof(int));
    cudaMalloc(&b, n * sizeof(int));
    cudaMalloc(&c, n * sizeof(int));

    // 初始化数据
    int host_a[] = {1, 2, 3, 4, 5};
    int host_b[] = {5, 4, 3, 2, 1};

    // 将数据从主机复制到设备
    cudaMemcpy(a, host_a, n * sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(b, host_b, n * sizeof(int), cudaMemcpyHostToDevice);

    // 配置线程和网格
    int threadsPerBlock = 256;
    int blocksPerGrid = (n + threadsPerBlock - 1) / threadsPerBlock;
    add<<<blocksPerGrid, threadsPerBlock>>>(a, b, c);

    // 将结果复制回主机
    cudaMemcpy(host_c, c, n * sizeof(int), cudaMemcpyDeviceToHost);

    // 输出结果
    for (int i = 0; i < n; i++) {
        std::cout << host_c[i] << " ";
    }
    std::cout << std::endl;

    // 释放内存
    cudaFree(a);
    cudaFree(b);
    cudaFree(c);

    return 0;
}

扩展阅读

更多关于 CUDA 的信息和示例代码,请访问我们的 CUDA 教程页面

CUDA Architecture