[英]Is there a limit size of malloc?
當我嘗試在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沒關系; NZ = 4700; 但是,如果我再增加一點(使內存大小超過2 gb),編譯就可以了,但是當我運行程序時,它崩潰了,並且警告是“ 0xC0000005:訪問沖突寫入位置0x00000000”。
那是因為在malloc中存在某種限制大小嗎? 還是關於音高記憶的東西,在TITAN black中說只有2 GB?
對不起,我的英語不好。 謝謝
分配后檢查指針。 Malloc ATTEMPTS可以在堆上為變量留出空間,但是不能保證已創建變量。 這通常是由於您的環境強加的內存限制。 您始終可以通過在malloc之后檢查該值來檢查指針是否正確創建。
x = malloc(SIZE);
if(x == NULL) //error
驗證始終很重要,因為否則您將嘗試寫入不存在的內存地址(0x0)
專門針對CUDA,您可以使用以下命令顯式設置堆大小
cudaDeviceSetLimit()
在文檔中 。
在Windows上,默認情況下32位進程的用戶VA空間限制為2GB。 請參閱此 MSDN頁面,以了解不同Windows OS版本的限制以及可能增加限制的選項。 最好的解決方案是將應用程序編譯為具有8TB用戶空間VA限制的64位應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.