Почему именно при выборе типа char * требуется найти строку с тональным адресом памяти? - PullRequest
0 голосов
/ 24 мая 2019

Я читал документацию и попал в раздел 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 *. Разве это не должно быть поплавком **?

1 Ответ

0 голосов
/ 24 мая 2019

Я не понимаю, почему требуется * char * cast

Поскольку pitch - это значение в байтах, а приведение указателя к char* позволяет высоту тона бытьдобавлено в качестве байтового смещения для строки в распределении.Если бы не было приведения, смещение было бы неправильным по отношению количества байтов в исходном типе.

Почему devPtr это float*.Разве это не должно быть float**?

Нет.

Распределенная память - это одно выделение непрерывной памяти, на которую ссылается один указатель, точно так же, как обычная память, выделенная с помощью malloc или cudaMalloc.Единственное, что в этом особенного, - это то, что его размер рассчитывается так, чтобы построчные данные, хранящиеся в памяти, могли быть дополнены до длины, оптимальной / совместимой с контроллером памяти и блоками адресации текстуры на графическом процессоре.Вот почему в вычислениях адресации необходим шаг - размер шага - запрошенный размер, включая необходимые отступы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...