看板 C_and_CPP 關於我們 聯絡資訊
前文我刪掉了 重點放在下面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
aada:謝謝你,我試試看 02/21 21:30
aada:我的kernel程式如下面,就可以產生矩陣B了, 02/21 23:55
aada:__global__ void movaIM11(float *input1, float *output1) 02/21 23:55
aada:{ int col = blockIdx.x*blockDim.x+threadIdx.x; 02/21 23:55
aada:int row = blockIdx.y*blockDim.x+threadIdx.y; 02/21 23:55
aada:output1[row*NNx+col] = input1[row*NNx+col]; 02/21 23:56
aada:} 02/21 23:56