【发布时间】:2011-04-29 19:29:26
【问题描述】:
我正在使用 CUDA 框架开发一个数字运算应用程序。我有一些所有线程都应该可以访问的静态数据,所以我把它放在常量内存中,如下所示:
__device__ __constant__ CaseParams deviceCaseParams;
我使用调用 cudaMemcpyToSymbol 将这些参数从主机传输到设备:
void copyMetaData(CaseParams* caseParams)
{
cudaMemcpyToSymbol("deviceCaseParams", caseParams, sizeof(CaseParams));
}
哪个有效。
无论如何,似乎(通过反复试验,以及阅读网上的帖子)由于某种病态的原因,deviceCaseParams 的声明和它的复制操作(对 cudaMemcpyToSymbol 的调用)必须在 同一个文件。目前我在 .cu 文件中有这两个,但我真的希望在 .cuh 文件中有参数结构,以便任何实现都可以看到它。这意味着我还必须在 a 头文件中有 copyMetaData 函数,但这会破坏链接(符号已定义),因为 .cpp 和 .cu 文件都包含此头文件(因此 MS C++ 编译器和 nvcc 都会编译它)。
这里有人对设计有什么建议吗?
更新:查看 cmets
【问题讨论】:
-
您确定它们必须在同一个文件中,而不仅仅是在同一个翻译单元中吗? (即声明可以在头文件中,然后将其#included 到源文件中)。
-
几分钟前我试过了,看来你是对的。不过,我不明白上次尝试时出了什么问题。它现在肯定有效。谢谢。
标签: c++ visual-studio header linker cuda