cuda核函数代码示例
时间: 2023-08-08 22:04:40 浏览: 118
cuda示例程序
下面是一个简单的CUDA核函数的代码示例:
```cpp
// CUDA核函数,将一个数组中的每个元素乘以一个常数
__global__ void multiplyArray(float* array, float constant, int size) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
if (idx < size) {
array[idx] *= constant;
}
}
int main() {
// 数组大小
int size = 1000;
// 常数
float constant = 2.0;
// 为主机端和设备端分配内存
float* hostArray = new float[size];
float* deviceArray;
cudaMalloc((void**)&deviceArray, size * sizeof(float));
// 初始化主机端数组
for (int i = 0; i < size; i++) {
hostArray[i] = i;
}
// 将数据从主机端复制到设备端
cudaMemcpy(deviceArray, hostArray, size * sizeof(float), cudaMemcpyHostToDevice);
// 定义CUDA核函数的网格大小和块大小
int blockSize = 256;
int gridSize = (size + blockSize - 1) / blockSize;
// 调用CUDA核函数
multiplyArray<<<gridSize, blockSize>>>(deviceArray, constant, size);
// 将结果从设备端复制回主机端
cudaMemcpy(hostArray, deviceArray, size * sizeof(float), cudaMemcpyDeviceToHost);
// 打印结果
for (int i = 0; i < size; i++) {
printf("%f ", hostArray[i]);
}
printf("\n");
// 释放内存
delete[] hostArray;
cudaFree(deviceArray);
return 0;
}
```
请注意,这只是一个简单的示例,用于展示CUDA核函数的基本结构。在实际应用中,你需要根据自己的需求和数据结构进行适当的修改和扩展。
此示例中的核函数`multiplyArray`将一个浮点数组中的每个元素乘以一个常数。通过使用CUDA编程模型中的网格和块,我们可以对数组进行并行计算。在主机端,我们首先为主机端和设备端分配内存,然后将数据从主机端复制到设备端。接下来,我们定义了核函数的网格大小和块大小,并调用核函数。最后,我们将结果从设备端复制回主机端,并在主机端打印结果。
请注意,为了运行这个示例,你需要安装CUDA开发环境,并使用支持CUDA的编译器进行编译。
阅读全文