c++ CUDA调用GPU
时间: 2025-07-06 11:55:58 浏览: 3
### C++ 使用 CUDA 调用 GPU 进行加速计算
#### 定义与环境配置
为了在C++中使用CUDA调用GPU进行加速计算,需先安装NVIDIA的CUDA Toolkit。该工具包提供了编译器、库以及用于开发基于CUDA的应用程序的各种工具[^1]。
#### 基本概念介绍
CUDA是一种由NVIDIA推出的通用并行计算架构,它使得开发者能够利用图形处理器(GPU)的强大性能来执行复杂的科学和工程应用中的计算密集型部分。通过编写特定于CUDA的语言扩展——即所谓的内核函数(kernel),这些函数可以在成百上千个线程上并发运行,从而极大地提高了某些类型算法的速度[^2]。
#### 实现矩阵乘法作为案例研究
下面给出一段简单的代码片段展示如何运用CUDA完成两个浮点数矩阵相乘的操作:
```cpp
#include <cuda_runtime.h>
#include <iostream>
// Kernel function to add the elements of two arrays on the GPU
__global__
void matrixMul(float *A, float *B, float *C, int N) {
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
if (row < N && col < N){
float value = 0;
for(int k=0; k<N; ++k){
value += A[row*N+k]*B[k*N+col];
}
C[row*N+col]=value;
}
}
int main() {
const int N = 32;
size_t bytes = N*N*sizeof(float);
// Host allocations and initializations...
float* h_A = new float[N*N], *h_B = new float[N*N], *h_C = new float[N*N];
// Initialize matrices with some values...
// Device allocations...
float *d_A, *d_B, *d_C;
cudaMalloc(&d_A, bytes);
cudaMalloc(&d_B, bytes);
cudaMalloc(&d_C, bytes);
// Copy data from host memory space into device memory spaces.
cudaMemcpy(d_A,h_A,bytes,cudaMemcpyHostToDevice);
cudaMemcpy(d_B,h_B,bytes,cudaMemcpyHostToDevice);
dim3 threadsPerBlock(16, 16);
dim3 blocks(N/threadsPerBlock.x,N/threadsPerBlock.y);
// Launch kernel
matrixMul<<<blocks, threadsPerBlock>>>(d_A,d_B,d_C,N);
// Wait until all operations are completed before proceeding further.
cudaDeviceSynchronize();
// Transfer result back to CPU side.
cudaMemcpy(h_C,d_C,bytes,cudaMemcpyDeviceToHost);
// Use results stored within `h_C` here.
delete[] h_A;delete[] h_B;delete[] h_C;
cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);
return 0;
}
```
这段代码展示了完整的流程:定义了一个名为`matrixMul`的kernel函数,在主机端分配内存空间并将输入的数据复制给设备;设置好grid尺寸之后启动kernel;最后再把得到的结果拷贝回主机侧以便后续处理。
阅读全文
相关推荐


















