Re: [問題] 使用CUDA來擷取矩陣中部分值

看板C_and_CPP (C/C++)作者時間16年前 (2010/02/21 20:57), 編輯推噓0(007)
留言7則, 1人參與, 最新討論串2/10 (看更多)
前文我刪掉了 重點放在下面CUDA的程式碼 : __global__ void movaIM11(float *input1, float *output1) : { : int col = blockIdx.x*blockDim.x+threadIdx.x; // x 表示 column : int row = blockIdx.y*blockDim.y+threadIdx.y; // y 表示 row ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 要用到二維的blockDim和blockIdx的話請注意宣告時的維度 : output1[row*NNx+col] = input1[row*NNx+col]; : } : float *d_A; : cudaMalloc((void**)&d_A, sizeof(float)*NNx*NNy); : cudaMemcpy( d_A, A, sizeof(float)*NNx*NNy, cudaMemcpyHostToDevice ); : float* d_B; : cudaMalloc((void**)&d_B, sizeof(float)*(NNx-1)*NNy); dim3 block(WIDTH,HEIGHT); : movaIM11<<<1, 12>>>( d_A, d_B); movaIM11<<<1, block>>>( d_A, d_B); 我這樣呼叫的會是維度 WIDTH * HEIGHT 的 threads 你原本呼叫的會是 12*1 的threads(因為沒有宣告y的部份) : float *B; : B = (float*) malloc( sizeof(float)*(NNx-1)*NNy ); : cudaMemcpy( B, d_B, sizeof(float)*(NNx-1)*NNy, cudaMemcpyDeviceToHost ); 這樣OK嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.120.51.50

02/21 21:30, , 1F
謝謝你,我試試看
02/21 21:30, 1F

02/21 23:55, , 2F
我的kernel程式如下面,就可以產生矩陣B了,
02/21 23:55, 2F

02/21 23:55, , 3F
__global__ void movaIM11(float *input1, float *output1)
02/21 23:55, 3F

02/21 23:55, , 4F
{ int col = blockIdx.x*blockDim.x+threadIdx.x;
02/21 23:55, 4F

02/21 23:55, , 5F
int row = blockIdx.y*blockDim.x+threadIdx.y;
02/21 23:55, 5F

02/21 23:56, , 6F
output1[row*NNx+col] = input1[row*NNx+col];
02/21 23:56, 6F

02/21 23:56, , 7F
}
02/21 23:56, 7F
文章代碼(AID): #1BWIstiu (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BWIstiu (C_and_CPP)