Урок 9: Двумерные сетки и блоки
Матрицы и изображения по своей природе двумерны, поэтому CUDA позволяет организовать потоки в двумерную сетку. Вместо единственного измерения x у нас есть threadIdx.x и threadIdx.y, blockIdx.x и blockIdx.y, а также blockDim.x и blockDim.y. Каждый поток вычисляет строку и столбец: row = blockIdx.y *
Театр с рядами и креслами. Чтобы найти место по одному сквозному номеру, вы считаете: каждый полный ряд добавляет width мест, поэтому место — это row умножить на width плюс номер столбца. Каждый билетёр (thread) точно знает свои собственные ряд и столбец.
- двумерная сетка
- Организация потоков в двух измерениях (x и y), удобная для матриц и изображений, где у каждого элемента есть строка и столбец.
- row и col
- row берётся из измерения y (blockIdx.y, threadIdx.y), а col — из измерения x. Вместе они образуют двумерную координату потока.
- развёртка row-major
- Преобразование (row, col) в плоский индекс: idx = row * width + col, потому что память хранится строка за строкой.
- dim3
- Тип из трёх компонентов (x, y, z), описывающий размер блока или сетки, например dim3 block(16, 16).