在不同编译单元中,内核访问__constant__
变量的方法如下:
__constant__
变量,并将其声明为外部可见。例如,在一个源文件中定义一个__constant__
变量:// file1.cu
__constant__ int constantData[10];
extern "C" void setData(const int* data)
{
cudaMemcpyToSymbol(constantData, data, 10 * sizeof(int));
}
__constant__
变量。例如,在另一个源文件中声明并使用该__constant__
变量:// file2.cu
extern __constant__ int constantData[];
__global__ void kernel()
{
int value = constantData[threadIdx.x];
// 使用constantData变量
}
int main()
{
int data[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
setData(data); // 设置constantData的值
kernel<<<1, 10>>>();
cudaDeviceSynchronize();
return 0;
}
nvcc file1.cu file2.cu -o executable
这样,不同编译单元中的内核就可以访问共享的__constant__
变量了。在第一个编译单元中,setData
函数将数据复制到constantData
变量中,并在第二个编译单元中访问该变量。
上一篇:不同编码应该如何处理
下一篇:不同编译器得到不同的输出