CUDA 是一种由 NVIDIA 开发的并行计算平台和编程模型,它允许开发者利用 NVIDIA 的 GPU 进行通用计算。以下是一些关于 CUDA 的关键信息:
安装与配置
CUDA Toolkit 安装
- 下载并安装最新的 CUDA Toolkit。
- 确保安装了正确的驱动程序。
环境变量配置
- 将 CUDA 的 bin 目录添加到系统路径中。
基本概念
线程
- CUDA 使用线程来执行计算任务。
块
- 块是线程的集合,通常包含多个线程。
网格
- 网格是块的集合,用于组织并行计算。
示例代码
#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