私はcudaを調査していますが、出力が必要以上に印刷されているようです
__global__ void gpu_Floyd(int *result, int N, int k)
{
int j;
int Row = blockIdx.y * blockDim.y + threadIdx.y;
int Col;
if(Row < N)
{
#if __CUDA_ARCH__>=200
printf("row value: %d, blkId : %d, blkDim : %d, thread : %d \n", Row, blockIdx.y, blockDim.y, threadIdx.y);
#endif
}
}
//CUDA Portion
int Grid_Dim_x = 1, Grid_Dim_y = 1;
int Block_Dim_x = 2, Block_Dim_y = 2;
//int noThreads_x, noThreads_y;
int *result = (int*)malloc(sizeof(int)*N*N);
int *d_result;
memcpy(result, mat, sizeof(int)*N*N);
dim3 Grid(Grid_Dim_x, Grid_Dim_y);
dim3 Block(Block_Dim_x, Block_Dim_y, 1);
cudaMalloc((void **)&d_result, N*N);
int k;
cudaMemcpy(d_result, result, N * N, cudaMemcpyHostToDevice);
for(k = 0; k < 2; k++)
{
gpu_Floyd<<<Grid, Block>>>(d_result, N, k);
}
cudaMemcpy(result, d_result, N*N, cudaMemcpyDeviceToHost);
出力:
row value: 0, blkId : 0, blkDim : 2, thread : 0
row value: 0, blkId : 0, blkDim : 2, thread : 0
row value: 1, blkId : 0, blkDim : 2, thread : 1
row value: 1, blkId : 0, blkDim : 2, thread : 1
row value: 0, blkId : 0, blkDim : 2, thread : 0
row value: 0, blkId : 0, blkDim : 2, thread : 0
row value: 1, blkId : 0, blkDim : 2, thread : 1
row value: 1, blkId : 0, blkDim : 2, thread : 1
for ループは 2 回しか繰り返されないため、出力は 8 行ではなく 2 行だけにすべきではありませんか? ブロックの次元とグリッドの次元は出力にどのように影響しますか?
最終出力は
row value: 0, blkId : 0, blkDim : 2, thread : 0
row value: 1, blkId : 0, blkDim : 2, thread : 1