让 GPU 代码作为使用 funcname <<< >>> 调用的设备函数正常工作。
更改代码以使用 PTX 文件。
现在所有调用 cudaMemcpyToSymbol 的行都返回错误代码:无效符号
这是 .cu 文件的片段:
{
__device__ __constant__ void *devInFramePtrs [20];
__device__ __constant__ void *devOutFramePtrs [20];
__device__ __constant__ void *devProcFramePtrs [60];
__device__ __constant__ void *devProcOutFramePtrs [60];
__device__ __constant__ AlgorithmParms *devAlgoParmsPtr;
__device__ __constant__ AlgorithmStats *devStatParmsPtr;
__device__ float diamondOffsetsGlobal[36];
}
================= 在 ptx 文件中我得到:
.global .align 4 .b8 devInFramePtrs[80];
.global .align 4 .b8 devOutFramePtrs[80];
.global .align 4 .b8 devProcFramePtrs[240];
.global .align 4 .b8 devProcOutFramePtrs[240];
.global .align 4 .u32 devAlgoParmsPtr;
.global .align 4 .u32 devStatParmsPtr;
.global .align 4 .b8 diamondOffsetsGlobal[144];
================= 那么主机代码是:
err = cudaMemcpyToSymbol("devInFramePtrs", gDevInFramePtrs, sizeof(void *) * 20, 0, cudaMemcpyHostToDevice);
err = cudaMemcpyToSymbol("devOutFramePtrs", gDevOutFramePtrs, sizeof(void *) * 20, 0, cudaMemcpyHostToDevice);
err = cudaMemcpyToSymbol("devProcFramePtrs", gDevProcFramePtrs, sizeof(FRAME_BASE_TYPE *) * numDevInProcFramePtrs3, 0, cudaMemcpyHostToDevice);
err = cudaMemcpyToSymbol("devProcOutFramePtrs", gDevProcOutFramePtrs, sizeof(FRAME_BASE_TYPE *) * numDevOutProcFramePtrs3, 0, cudaMemcpyHostToDevice);
err = cudaMemcpyToSymbol("diamondOffsetsGlobal", &(diamondOffset[0][0]), sizeof(float) * 36, 0, cudaMemcpyHostToDevice);
=========================
所有调用返回值 11:无效符号
详细信息: Cuda 4.2,在VS2010下运行,Win7 32位应用程序。
==========================
这是编译脚本:
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl -version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin"
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.2\include" -G -- keep-dir "调试" -maxrregcount=32 --machine 32 -ptx -o "U:\filterKernel.ptx" "U:\filterKernel.cu"
正如我所说,唯一的改变是制作 PTX 文件并改变函数调用。另请注意,无论变量是在 const 存储还是常规全局存储中,我都会收到错误消息。
提前致谢。