我今天開始了我的CUDA冒險。我試圖在所有線程中共享一個無符號整數。所有的線程修改這個值。我通過使用cudaMemcpy將這一個值複製到設備。但是,在計算結束時,我收到這個值等於0.Cuda內存在每個線程中共享
也許有幾個線程正在同時寫入這個變量? 我不知道是否應該使用任何信號量或鎖定此變量時,線程開始寫或什麼。
編輯:
很難更詳細地說,因爲我的問題是,一般如何解決這個問題。其實我沒有寫任何算法,只測試CUDA。
但是,如果你願意...我創建了包含一些值(無符號整數)的向量。我試圖做一些事情,比如搜索比給定共享值更大的值,但是當來自向量的值更大時,我將向量元素加1並保存共享值。
它看起來像這樣:
__global__ void method(unsigned int *a, unsigned int *b, long long unsigned N) {
int idx = blockIdx.x* blockDim.x+ threadIdx.x;
if (a[idx]>*b && idx < N)
*b = a[idx]+1;
}
正如我說這是不是有用的代碼,僅用於測試,但我不知道該怎麼辦呢?
有足夠的細節在這裏真正肯定地說,但併發寫入通常被認爲是一件壞事。 – Gian
這看起來是錯誤的設計。你希望CUDA線程並行工作*,所以他們通常不需要訪問一個聯合內存。 –
看起來更新後 – nosbor