讓GPU代碼正常工作,因爲設備函數使用funcname調用< < < >>>。cudaMemcpyToSymbol切換到PTX文件後不能正常工作
更改了代碼以使用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計算工具包\ 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 「Debug」-maxrregcount = 32 --machine 32 -ptx -o「U:\ filterKernel.ptx」「U:\ filterKernel.cu」
正如我所說的,只有改變是使PTX文件和更改函數調用。另請注意,無論變量是在常量庫還是普通全局庫中,我都會收到錯誤。
在此先感謝。
你以後調用'cudaMemcpyToSymbol' *加載與'cuModuleLoadData [例]'的PTX?還要注意,使用字符串引用符號(您需要傳遞符號本身)在CUDA 4.1之後已棄用,因此您可能不應該這樣做。在你的情況下,我相信你需要使用'cuModuleGetGlobal'來獲取你可以複製到的設備指針。 – harrism
我不確定你可以使用運行時API來做到這一點。 PTX加載或JIT到上下文後,您可能需要使用驅動程序API直接從模塊中獲取符號 – talonmies