c++ 调用英伟达GPU计算
时间: 2025-01-26 16:11:43 浏览: 99
在C++中调用英伟达GPU进行计算通常使用CUDA(Compute Unified Device Architecture)框架。CUDA是英伟达提供的一种并行计算平台和编程模型,允许开发者使用C++等高级编程语言来编写在GPU上运行的程序。以下是一个简单的示例,展示了如何在C++中使用CUDA调用GPU进行计算:
1. 首先,确保你已经安装了CUDA工具包,并且你的系统上有一个兼容的英伟达GPU。
2. 编写CUDA内核函数:
```cpp
// kernel.cu
extern "C" __global__ void add(int *a, int *b, int *c, int n) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < n) {
c[idx] = a[idx] + b[idx];
}
}
```
3. 在C++代码中调用这个内核函数:
```cpp
// main.cpp
#include <iostream>
#include <cuda_runtime.h>
extern void add(int *a, int *b, int *c, int n);
int main() {
int n = 1024;
int *a, *b, *c;
size_t size = n * sizeof(int);
// 分配主机内存
a = (int *)malloc(size);
b = (int *)malloc(size);
c = (int *)malloc(size);
// 初始化输入数据
for (int i = 0; i < n; i++) {
a[i] = i;
b[i] = i * 2;
}
// 分配设备内存
int *d_a, *d_b, *d_c;
cudaMalloc((void **)&d_a, size);
cudaMalloc((void **)&d_b, size);
cudaMalloc((void **)&d_c, size);
// 将数据从主机复制到设备
cudaMemcpy(d_a, a, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, size, cudaMemcpyHostToDevice);
// 调用内核函数
add<<<(n + 255) / 256, 256>>>(d_a, d_b, d_c, n);
// 将结果从设备复制回主机
cudaMemcpy(c, d_c, size, cudaMemcpyDeviceToHost);
// 打印结果
for (int i = 0; i < n; i++) {
std::cout << a[i] << " + " << b[i] << " = " << c[i] << std::endl;
}
// 释放内存
free(a);
free(b);
free(c);
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
return 0;
}
```
4. 编译和运行:
```sh
nvcc -c kernel.cu -o kernel.o
g++ main.cpp kernel.o -o main -lcudart
./main
```
这个示例展示了如何在C++中使用CUDA调用英伟达GPU进行简单的加法计算。你可以根据需要扩展这个示例,编写更复杂的内核函数和处理更复杂的数据结构。
阅读全文
相关推荐
















