作者lgen7604 ()
看板C_and_CPP
標題Re: [問題] 使用CUDA來擷取矩陣中部分值
時間Sun Feb 21 20:57:23 2010
前文我刪掉了 重點放在下面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