2009-08-27 2 views
2

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

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

ответ

5

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

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

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

+0

Как ничтожно, это не просто облегчает работу с потоками - аппаратное обеспечение требует, чтобы эта организация выполняла отдельные инструкции для нескольких данных (SIMD). – RD1

+0

Аппаратное обеспечение не требует такой вещи. Аппаратное обеспечение * более эффективно *, если специальные подгруппы потоков внутри сетки выполняют одни и те же действия одновременно. Это сложнее, чем я описал здесь, но также отличаюсь от того, что вы и какое-то состояние. – Eric

1

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

1

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

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

0

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

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

Смежные вопросы