2012-03-23 58 views
2

我正在寫用於使用流GPU的矩陣加法程序和明顯被釘扎memory.So我分配在固定存儲器3個矩陣,但是特定尺寸後它顯示API錯誤2:出memory.My RAM是4GB但我無法使用超過800MB。有沒有什麼辦法可以控制這個上限? 我SYS配置: 的NVIDIA GeForce 9800GTX Intel酷睿2四核 對於流執行代碼如下固定內存

(int i=0;i<no_of_streams;i++) 
    { 
     cudaMemcpyAsync(device_a+i*(n/no_of_streams),hAligned_on_host_a+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]); 
     cudaMemcpyAsync(device_b+i*(n/no_of_streams),hAligned_on_host_b+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]); 
     cudaMemcpyAsync(device_c+i*(n/no_of_streams),hAligned_on_host_c+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyHostToDevice,streams[i]); 
     matrixAddition<<<blocks,threads,0,streams[i]>>>(device_a+i*(n/no_of_streams),device_b+i*(n/no_of_streams),device_c+i*(n/no_of_streams)); 
     cudaMemcpyAsync(hAligned_on_host_a+i*(n/no_of_streams),device_a+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]); 
     cudaMemcpyAsync(hAligned_on_host_b+i*(n/no_of_streamss),device_b+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i]); 
     cudaMemcpyAsync(hAligned_on_host_c+i*(n/no_of_streams),device_c+i*(n/no_of_streams),nbytes/no_of_streams,cudaMemcpyDeviceToHost,streams[i])); 

    } 
+0

可能是一堆原因,從碎片內存到糟糕的代碼。很高興看到你在做什麼來實際提出有用的建議。 – 2012-03-23 16:58:51

+0

代碼流程如下對每個流 cudamemcpy創建 '2流(陣列的半部分,hostToDevice) 內核啓動 cudaMemcpy(陣列的halfportion,DeviceToHost) 沒什麼特別的程序工作正常,性能差,我只是想讓更多固定內存發生,因爲GPU全局內存大約是1GB? – 2012-03-23 17:01:45

+2

通過編輯問題放置任何代碼。 – 2012-03-23 17:13:18

回答

1

那麼,你有沒有,如果cudaMalloc或cudaHostAlloc函數調用後出現這種情況指定。

固定內存是有限的資源。定義爲固定內存的任何內存必須始終位於RAM中。因此,爲其他系統應用程序留下更少的RAM空間。這意味着,如果您有4GB內存,則不能擁有4GB的固定內存,否則沒有別的可以運行。

800MB可能是系統強加的限制。考慮到它是內存的四分之一,這可能是一個合理的限制。它也非常接近您的全局內存大小。卡上的故障不會轉化爲主機上的故障,所以如果它抱怨而不必運行諸如cudaGetLastError之類的東西,則可能是主機上的問題。

對不起,我不知道增加固定內存限制的細節。

+0

但我跑在具有4GB全局內存的特斯拉C2070上同樣的實驗..同時運行相同的程序,其中每個矩陣需要256MB內存程序正在突然中斷..這是因爲同樣的問題? – 2012-03-26 11:29:22

+0

看起來它可能不是卡。 嘗試在每次分配後添加cudaThreadSynchronize和cudaGetLastError調用,您應該看到哪一個失敗。 – 2012-03-27 01:32:01