CPU SIMD против GPU SIMD?

В GPU используется парадокс SIMD, то есть одна и та же часть кода будет выполняться параллельно и применяться к различным элементам набор данных.

Однако CPU также использует SIMD и предоставляет уровень команды parallelism. Например, насколько я знаю, SSE-подобные инструкции будут обрабатывать элементы данных с помощью parallelism.

В то время как парадигма SIMD, по-видимому, используется по-разному в графическом процессоре и процессоре, имеет ли GPU больше мощности SIMD, чем процессоры?

В этом случае параллельные вычислительные возможности в ЦП "слабее", чем в графическом процессоре?

Спасибо

Ответ 1

Это аналогичная идея, она выглядит примерно так (очень неформально):

  • ЦП имеет заданное количество функций, которые могут выполняться по упакованным значениям. В зависимости от вашего бренда и версии вашего процессора у вас может быть доступ к SSE2, 3, 4, 3dnow и т.д., И каждый из них дает вам доступ к большему количеству функций. Вы ограничены размером регистра и более крупными типами данных, с которыми работаете, чем меньше значений, которые вы можете использовать параллельно. Вы можете свободно смешивать и сопоставлять инструкции SIMD с традиционными инструкциями x86/x64.
  • GPU позволяет писать весь конвейер для каждого пикселя текстуры. Размер текстуры не зависит от длины вашего конвейера, т.е. Количество значений, которые вы можете повлиять за один цикл, зависит не от чего-либо, кроме вашего графического процессора, а функции, которые вы можете связать (ваш пиксельный шейдер), могут быть практически любыми. Это несколько более жестко, хотя настройка и считывание ваших значений несколько медленнее, и это одноразовый процесс (значения нагрузки, запуск шейдера, значения чтения), вы не можете массировать их вообще, кроме того, вам действительно нужно для использования большого количества ценностей, чтобы оно того стоило.

Ответ 2

Оба процессора и графические процессоры обеспечивают SIMD самым стандартным концептуальным блоком, равным 16 байтам /128 бит; например Vector of 4 floats (x, y, z, w).

Упрощая:

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

Графические процессоры, с другой стороны, распараллеливаются, продолжая подход SIMD и выполняя одну и ту же программу несколько раз; как чистым SIMD, где набор программ выполняется на этапе блокировки (поэтому ветвление плохое на графическом процессоре, так как должны выполняться обе стороны оператора if, и один результат отбрасывается, так что программы шага блокировки работают на одном и том же ставка); а также одна программа, несколько данных (SPMD), где группы наборов идентичных программ идут параллельно, но необязательно на этапе блокировки.

Подход к графическому процессору отлично подходит для тех целей, которые необходимы для обработки больших объемов данных; например, миллионы вершин, чем нужно преобразовать одинаковым образом, или много миллионов пикселей, которые нуждаются в обработке для получения их цвета. Предполагая, что они не перестанут блокироваться в блоке данных/трубопроводах, общие программы графических процессоров предлагают более предсказуемое выполнение с учетом времени из-за его ограничений; который снова хорош для временного parallelism, например. программам необходимо повторить свой цикл с определенной скоростью, например, 60 раз в секунду (16 мс) для 60 кадров в секунду.

Однако подход ЦП лучше подходит для решения и выполнения нескольких разных задач одновременно и имеет дело с изменением входных данных и запросов.

Помимо многих других применений и целей, процессор используется для организации работы для GPU для выполнения.