在使用CUDA时,cudaLaunchKernel
函数
可以用于在设备上执行特定的内核
函数
。该
函数
首先需要将指向设备内核
函数
的
函数
指针作为参数传递给主机代码
函数
。这个设计的主要原因是为了增强CUDA的灵活性和可定制性。具体来说,这样做允许开发人员动态地选择要执行的内核
函数
,并且还可以在运行时为内核
函数
提供不同的参数。
以下是示例代码:
#include <cuda_runtime.h>
#include <stdio.h>
#include <stdlib.h>
__global__ void myKernel(float* data, int n)
int index = threadIdx.x + blockIdx.x * blockDim.x;
if (index < n)
data[index] *= data[index];
int main()
const int n = 1024;
float* h_data = (float*)malloc(n * sizeof(float));
for (int i = 0; i < n; i++)
h_data[i] = i;
float* d_data;
cudaMalloc(&d_data, n * sizeof(float));
cudaMemcpy(d_data, h_data, n * sizeof(float), cudaMemcpyHostToDevice);
dim3 block(256);
dim3 grid((n + block.x - 1) / block.x);
void (*kernel)(float*, int) = myKernel;
cudaLaunchKernel((void*)kernel, grid, block, (void**)&d_data, n);
cudaMemcpy(h_data, d_data, n * sizeof(float), cudaMemcpyDeviceToHost);
for (int i = 0; i < n; i++)
printf("%.2f ", h_data[i]);
printf("\n");
cudaFree(d_data);
free(h_data);
return 0;
此示例创建了一个大小为1024的数组,然后将其传输到设备上。cudaLaunchKernel函数被用于执行名为"myKernel"的内核函数,并且将设