-2

我尝试实现这一点

__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];
}

为什么我得到这个错误?这里出了什么问题?为什么我会收到此错误?

4

1 回答 1

1

您的问题与 C 和 C++ 相关,而不是 CUDA。

在 C 或 C++ 中,如果我有这样的语句:

int x = 5 * TESTVAL;

然后在此语句之前的代码中的其他地方我需要类似的东西:

#define TESTVAL 7

或者

int TESTVAL = 7;

如果我的代码中没有任何定义是什么TESTVAL的东西,编译器会报错。您不需要定义类似blockIdx.xthreadIdx.x是什么的语句,因为这些是 CUDA 设备代码编译器知道如何处理的内置函数。

您需要在代码中的某个地方定义什么TILE_DIMBLOCK_ROWS是什么。

于 2013-04-14T20:00:11.080 回答