Почему потоки GPU в CUDA и OpenCL расположены в сетке? - PullRequest
2 голосов
/ 27 августа 2009

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

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

Ответы [ 4 ]

5 голосов
/ 31 августа 2009

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

Идея сетки состоит в том, чтобы обеспечить простое, но гибкое отображение между обрабатываемыми данными и потоками, выполняющими обработку данных. В простой версии модели исполнения GPGPU один поток GPU «выделяется» для каждого выходного элемента в сетке данных 1D, 2D или 3D. Для обработки этого выходного элемента поток будет считывать один (или несколько) элементов из соответствующего местоположения или смежных местоположений в сетке входных данных. Благодаря организации потоков в сетке потокам легче определить, какие элементы входных данных нужно прочитать и где хранить элементы выходных данных.

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

1 голос
/ 22 сентября 2009

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

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

1 голос
/ 28 августа 2009

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

0 голосов
/ 19 декабря 2009

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

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

...