CUDA:大型结构上的编译失败>;4GB

CUDA:大型结构上的编译失败>;4GB,cuda,Cuda,我的CUDA代码中有一个相当大的结构 struct cDevData { ~5GB worth of stuff ... }; 在使用cudaMalloc进行系统设置期间,我分配了容纳该结构所需的空间,因为windows将静态代码和数据限制为2GB。很烦人,但是很好。显然,我正在编译64位应用程序,但当我编译时,调试配置会出现以下错误: ptxas C : /Users/user/AppData/Local/Temp/tmpxft_0000123c_00000000-4_kernel.

我的CUDA代码中有一个相当大的结构

struct cDevData {
    ~5GB worth of stuff ...
};
在使用cudaMalloc进行系统设置期间,我分配了容纳该结构所需的空间,因为windows将静态代码和数据限制为2GB。很烦人,但是很好。显然,我正在编译64位应用程序,但当我编译时,调试配置会出现以下错误:

ptxas C : /Users/user/AppData/Local/Temp/tmpxft_0000123c_00000000-4_kernel.ptx, line 2897; error : Value out of range for type .b32
ptxas fatal   : Ptx assembly aborted due to errors
error C2089: 'cDevData' : 'struct' too large
奇怪的是,发布配置中有一个不同的版本:

ptxas C : /Users/user/AppData/Local/Temp/tmpxft_0000123c_00000000-4_kernel.ptx, line 2897; error : Value out of range for type .b32
ptxas fatal   : Ptx assembly aborted due to errors
error C2089: 'cDevData' : 'struct' too large
当我将这个结构的大小增加到4GB以上时,它才开始出现。 我还试图编译一个32位的应用程序,只是为了检查,但我得到了一个不同的(预期的)错误
类太大了。
发生了什么事,有办法解决吗


系统:Windows 7,Visual Studio 2012,CUDA toolkit 8.0,GPU=Titan。

这是两个错误的组合-一个在NVCC中,另一个在VS2012中。根据NVIDIA的回复:

发布配置“error C2089:'cDevData':'struct'过大”中生成的错误来自主机编译器。因此,这个问题是由于Windows上主机编译器的限制造成的。我们将修复调试配置中暴露的另一个问题。但是,即使在修复之后,由于主机编译器的限制,Windows上的编译也会失败

我不知道这个问题是否在VS2015或更高版本中得到解决。
与此同时,我通过努力使用
boost::mpl
和一些宏来避免这个问题,以保留类似结构的语义(按名称访问字段,复杂字段类型(如多维数组)保留其维度等)。因此,最后我的代码只需要很少的更改(将字段deref op
->
更改为一个宏,并用另一个宏替换
sizeof(cDevData)

没有一些实际的代码来编译、反汇编和研究,我怀疑除了您最初的诊断之外,是否有人能提供答案,即结构太大。您好,请记住,如果您希望SO用户提供一些帮助,您必须提供一个。接受它并将其拆分如何?不管怎么说,你也不能把他们中的很多人留在身边。