Вычисления общего назначения на графических процессорах


Вычисления общего назначения на графических процессорах ( GPGPU или реже GPGP ) — это использование графического процессора (GPU), который обычно обрабатывает вычисления только для компьютерной графики , для выполнения вычислений в приложениях, традиционно обрабатываемых центральным процессором ( ПРОЦЕССОР). [1] [2] [3] [4] Использование нескольких видеокарт в одном компьютере или большого количества графических чипов еще больше распараллеливает и без того параллельную природу обработки графики. [5]

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

Конвейеры GPGPU были разработаны в начале 21 века для обработки графики (например, для улучшения шейдеров ). Было обнаружено, что эти конвейеры хорошо соответствуют потребностям научных вычислений , и с тех пор они развивались в этом направлении.

В принципе, любая произвольная булева функция , включая сложение, умножение и другие математические функции, может быть построена из функционально полного набора логических операторов. В 1987 году «Игра жизни» Конвея стала одним из первых примеров вычислений общего назначения, в которых использовался ранний потоковый процессор , называемый блиттером , для вызова специальной последовательности логических операций над битовыми векторами. [6]

Вычисления общего назначения на графических процессорах стали более практичными и популярными примерно после 2001 года, с появлением программируемых шейдеров и поддержки операций с плавающей запятой на графических процессорах. Примечательно, что задачи, связанные с матрицами и/или векторами  – особенно с двух-, трех- или четырехмерными векторами – было легко перенести на графический процессор, который работает с исходной скоростью и поддерживает эти типы. Значимой вехой для GPGPU стал 2003 год, когда две исследовательские группы независимо друг от друга обнаружили подходы на основе графических процессоров для решения общих задач линейной алгебры на графических процессорах, которые работали быстрее, чем на центральных процессорах. [7] [8]Эти ранние попытки использовать графические процессоры в качестве процессоров общего назначения требовали переформулирования вычислительных задач с точки зрения графических примитивов, поддерживаемых двумя основными API для графических процессоров: OpenGL и DirectX . Этот громоздкий перевод был устранен с появлением языков программирования общего назначения и API, таких как Sh / RapidMind , Brook и Accelerator. [9] [10] [11]

За ними последовала технология CUDA от Nvidia , которая позволяла программистам игнорировать основные графические концепции в пользу более распространенных концепций высокопроизводительных вычислений . [12] К новым, независимым от производителя оборудования предложениям относятся DirectCompute от Microsoft и OpenCL от Apple/Khronos Group . [12] Это означает, что современные конвейеры GPGPU могут использовать скорость графического процессора, не требуя полного и явного преобразования данных в графическую форму.