Я пишу упрощенный raytracer. Идея состоит в том, что для каждого пикселя существует поток, который проходит определенную структуру (геометрию), которая находится в глобальной памяти.
Я вызываю свое ядро так:
trace<<<gridDim, blockDim>>>(width, height, frameBuffer, scene)
Где scene
- это структура, которая ранее была выделена с cudaMalloc
. Каждый поток должен начать обход этой структуры, начиная с одного и того же узла, и есть вероятность, что многие параллельные потоки будут пытаться читать одни и те же узлы много раз. Означает ли это, что когда такие чтения происходят, это наносит вред степени параллелизма?
Учитывая, что геометрия велика, я бы предположил, что ее копирование не вариант. Я имею в виду, что вся обработка по-прежнему происходит довольно быстро, но мне было интересно, нужно ли с этим что-то делать или просто бросить на ветер.