我尝试实现这个
__global__ void transposeNaive(float *odata, const float *idata)
{
int x = blockIdx.x * TILE_DIM + threadIdx.x;
int y = blockIdx.y * TILE_DIM + threadIdx.y;
int width = gridDim.x * TILE_DIM;
for (int j = 0; j < TILE_DIM; j+= BLOCK_ROWS)
odata[x*width + (y+j)] = idata[(y+j)*width + x];
}
为什么我会收到此错误?这里出了什么问题?为什么我会收到此错误?
答案 0 :(得分:1)
你的问题与C和C ++有关,而不是CUDA。
在C或C ++中,如果我有这样的陈述:
int x = 5 * TESTVAL;
然后在我的代码之前的其他地方,我需要这样的东西:
#define TESTVAL 7
或
int TESTVAL = 7;
如果我的代码中没有任何定义TESTVAL
的内容,编译器会给出错误。您不需要定义blockIdx.x
和threadIdx.x
之类的语句,因为它们是CUDA设备代码编译器知道如何处理的内置函数。
您的代码中需要一些内容来定义TILE_DIM
和BLOCK_ROWS
。