【发布时间】:2014-05-30 17:38:17
【问题描述】:
当我尝试在 TITAN BLACK 中运行我的 cuda 程序时遇到问题(我简化了它,所以它看起来并不复杂)
int DIMX, DIMZ,DIMXM, DIMZM;
DIMXM=5700;
DIMZM=5700;
DIMX=DIMXM+20;
DIMZ=DIMZM+10;
float *temptxz = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *temptxx = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *temptzz = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *tempvz = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
float *tempvx = (float*)malloc( sizeof(float)*(DIMX*DIMZ));
for (int ij=0; ij<DIMX*DIMZ; ij++)
{
temptxz[ij]=0.0;
temptxx[ij]=0.0;
temptzz[ij]=0.0;
tempvx[ij]=0.0;
tempvz[ij]=0.0;
}
NX=4700 没问题;新西兰=4700;但是如果我再增加一点(使内存大小超过 2 gb),编译会很好,但是当我运行程序时它崩溃了并且警告是“0xC0000005:访问冲突写入位置 0x00000000。”
这是因为 malloc 中存在某种限制大小吗? 或者关于 TITAN black 中的音高内存只有 2 GB 的内容?
对不起我糟糕的英语。谢谢
【问题讨论】:
-
不,这是由于操作系统对单个进程可用内存的某种限制。
-
这里显示的代码是设备代码还是主机代码?根据您发布的警告消息,它似乎是主机代码。如果是这种情况,您是在 32 位还是 64 位操作系统上运行?您的系统中有多少内存(不是 GPU 内存、主机内存)?
-
我想
size_t可以容纳的最大值将是绝对最大值。 -
我正在使用 64 位 Windows 32 GB 内存。那么有什么解决办法吗?