我有一個數據矩陣,我應該使用GPU(和推力庫儘可能)進行一些細化。到目前爲止,我能夠將數據複製到GPU並編寫我自己的內核函數。現在,基於我的內核函數的輸出結果,我將利用推力庫來進行相同數據矩陣的其他細化,避免從GPU < - > CPU下載並重新上傳數據。推力:訪問使用cudaMallocPitch創建的設備變量
所以,我在使用功能使用cudaMallocPitch所述GPU創建設備變量:
float *d_M;
size_t pitch;
cudaStatus = cudaMallocPitch(&d_M, &pitch, sizeof(float)*(N), M+1);
if (cudaStatus != cudaSuccess)
{
fprintf(stderr, "cudaMalloc Failed!");
INFO;
return CUDA_MALLOC_ERROR;
}
這個變量表示與N×M個尺寸+ 1的矩陣。在使用ad-hoc cuda函數對GPU進行一些細化之後,我會使用推力庫對每行的元素進行求和,並將結果放在每行的M + 1列中。
對於這樣的操作,我會使用推力庫。 我的意圖應該是檢索使用cudaMallocPitch創建的原始指針,將其轉換爲thrust :: device_ptr,然後使用推力函數對其進行操作。所以,在代碼:
thrust::device_ptr<float> dd_M = thrust::device_pointer_cast(d_M);
但是,當我嘗試打印兩個變量的地址,以確保該指針的地址相同:
printf("Address d_M: %p\n", &d_M);
printf("Address dd_M: %p\n", &dd_M);
我得到的地址不同的值。我不是我做錯了什麼。對於這樣的操作,我只是按照鏈接Thrust - Memory Management Functions上的推力手冊。
我不相信有這樣做的簡單方法 – talonmies
您將無法使用'cudaMallocPitch'方便地使用推力。改爲使用'cudaMalloc'。 –
好吧,我會嘗試與cudaMalloc。謝謝 – Alek