Я читал документацию и попал в раздел 3.2.2. Я видел определение и объяснение cudaMallocPitch()
, и был несколько озадачен доступом к определенным элементам данных. Например:
int width = 64, height = 64;
float* devPtr;
size_t pitch;
cudaMallocPitch(&devPtr, &pitch,
width * sizeof(float), height);
MyKernel<<<100, 512>>>(devPtr, pitch, width, height);
// Device code
__global__ void MyKernel(float* devPtr,
size_t pitch, int width, int height)
{
for (int r = 0; r < height; ++r) {
float* row = (float*)((char*)devPtr + r * pitch);
for (int c = 0; c < width; ++c) {
float element = row[c];
}
}
}
Я не понимаю, почему приведение типа char * требуется в определении строки во второй строке MyKernel (). Кроме того, я не понимаю, почему devPtr является float *. Разве это не должно быть поплавком **?