我正在編寫一個cuda內核以將數組拷貝到另一個內存。它們都在GPU內存中。由於性能不佳,我不想使用cudamemcpyDeviceToDevice
。CUDA設備內存拷貝:cudaMemcpyDeviceToDevice vs拷貝內核
天真的內核:
__global__ void GpuCopy(float* des , float* __restrict__ sour ,const int M , const int N)
{
int tx=blockIdx.x*blockDim.x+threadIdx.x;
if(tx<N*M)
des[tx]=sour[tx];
}
我覺得天真的內核將不會得到高的性能,所以我嘗試使用__shared__
內存,但它看起來並不好:
__shared__ float TILE[tile];
int tid=threadIdx.x;
for(int i=0; i<M*N/tile;i++)
{
TILE[tid]=sour[i*tile+tid]
des[i*tile+tid]=TILE[tid]
}
前者的代碼片段將全局內存複製到des[]
,而後者將全局內存複製到__shared__
,然後將__shared__
複製到des[]
。我認爲後者比前者慢。
那麼,如何編寫一個__shared__
的代碼來複制內存?另一個問題是,如果我想使用__const__
內存和該陣列(已經在GPU中)比常量內存大,如何將其複製到另一個GPU內存__const__
?
爲什麼你認爲'cudamemcpyDeviceToDevice'性能差? – talonmies
評論在http://stackoverflow.com/questions/22284533/cuda-least-square-solving-poor-in-speed – Zziggurats
我不認爲你需要共享內存。你必須複製兩個數組元素,並且在你的第一個內核中沒有線程協作。 – JackOLantern