Почему потоки графического процессора в CUDA и OpenCL распределяются по сетке?

StackOverflow https://stackoverflow.com/questions/1342992

  •  20-09-2019
  •  | 
  •  

Вопрос

я только учусь OpenCL, и я нахожусь при попытке запустить ядро.Почему потоки графического процессора управляются в сетке?

Я собираюсь прочитать об этом подробнее, но было бы неплохо с простым объяснением.Всегда ли так при работе с графические процессоры?

Это было полезно?

Решение

Это общий подход, который используется в CUDA, OpenCL и, кажется, потоке ATI.

Идея сетки состоит в том, чтобы обеспечить простое, но гибкое сопоставление между обрабатываемыми данными и потоками, выполняющими обработку данных.В простой версии модели выполнения GPGPU один поток графического процессора «выделяется» для каждого выходного элемента в одномерной, двумерной или трехмерной сетке данных.Чтобы обработать этот выходной элемент, поток прочитает один (или несколько) элементов из соответствующего местоположения или соседних мест в сетке(ях) входных данных.Организуя потоки в сетку, потокам легче определить, какие элементы входных данных следует читать и где хранить элементы выходных данных.

Это контрастирует с обычной многоядерной моделью потоков ЦП, где один поток выделяется на каждое ядро ​​ЦП, и каждый поток обрабатывает множество элементов ввода и вывода (например,1/4 данных в четырехъядерной системе).

Другие советы

Простой ответ заключается в том, что графические процессоры предназначены для обработки изображений и текстур, которые представляют собой двумерные сетки пикселей.Когда вы визуализируете треугольник в DirectX или OpenGL, аппаратное обеспечение преобразует его в сетку пикселей.

Я приведу классическую аналогию с помещением квадратного колышка в круглое отверстие.Что ж, в данном случае графический процессор представляет собой очень квадратное отверстие, а не такое закругленное, как предполагает GP (общего назначения).

Приведенные выше пояснения выдвигают идеи 2D текстур и т.п.Архитектура графического процессора такова, что вся обработка выполняется в потоках, причем конвейер в каждом потоке идентичен, поэтому обрабатываемые данные необходимо сегментировать таким образом.

Одна из причин, почему это хороший API, заключается в том, что обычно вы работаете с алгоритмом, имеющим несколько вложенных циклов.Если у вас есть один, два или три цикла, то сетка из одного, двух или трех измерений хорошо соответствует задаче, предоставляя вам поток для значения каждого индекса.

Таким образом, значения, которые вам нужны в вашем ядре (значения индекса), естественным образом выражаются в API.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top