stringtranslate.com

Универсальные вычисления на графических процессорах

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

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

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

Наиболее известными GPGPU являются Nvidia Tesla , которые используются в Nvidia DGX , а также AMD Instinct и Intel Gaudi.

История

В принципе, любая произвольная булева функция , включая сложение, умножение и другие математические функции, может быть построена из функционально полного набора логических операторов. В 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 могут использовать скорость графического процессора, не требуя полного и явного преобразования данных в графическую форму.

Марк Харрис, основатель GPGPU.org, ввел термин GPGPU .

Реализации

Любой язык, который позволяет коду, работающему на CPU, опрашивать шейдер GPU для возвращаемых значений, может создать фреймворк GPGPU. Стандарты программирования для параллельных вычислений включают OpenCL (независимый от поставщика), OpenACC , OpenMP и OpenHMPP .

По состоянию на 2016 год OpenCL является доминирующим открытым языком вычислений общего назначения на GPU и открытым стандартом, определенным Khronos Group . [ требуется ссылка ] OpenCL предоставляет кроссплатформенную платформу GPGPU, которая дополнительно поддерживает параллельные вычисления данных на CPU. OpenCL активно поддерживается на платформах Intel, AMD, Nvidia и ARM. Khronos Group также стандартизировала и реализовала SYCL , высокоуровневую модель программирования для OpenCL как однородный встраиваемый язык, специфичный для домена, на основе чистого C++11.

Доминирующей фирменной средой является Nvidia CUDA . [13] В 2006 году Nvidia запустила CUDA — комплект для разработки программного обеспечения (SDK) и интерфейс прикладного программирования (API), позволяющий использовать язык программирования C для кодирования алгоритмов для выполнения на графических процессорах серии GeForce 8 и более поздних моделях.

ROCm , запущенный в 2016 году, является ответом AMD на CUDA с открытым исходным кодом. По состоянию на 2022 год он находится на одном уровне с CUDA в отношении функций, но все еще не имеет поддержки потребителей.

OpenVIDIA была разработана в Университете Торонто в 2003–2005 годах [14] в сотрудничестве с Nvidia.

Altimesh Hybridizer, созданный Altimesh, компилирует Common Intermediate Language в двоичные файлы CUDA. [15] [16] Он поддерживает универсальные и виртуальные функции. [17] Отладка и профилирование интегрированы с Visual Studio и Nsight. [18] Он доступен как расширение Visual Studio на Visual Studio Marketplace.

Microsoft представила API вычислений на графических процессорах DirectCompute , выпущенный вместе с API DirectX 11 .

Alea GPU ,[19]созданный QuantAlea,[20]представляет собственные вычислительные возможности GPU для языков Microsoft .NETF#[21]иC#. Alea GPU также предоставляет упрощенную модель программирования GPU на основе GPU parallel-for и параллельного агрегата с использованием делегатов и автоматического управления памятью.[22]

MATLAB поддерживает ускорение GPGPU с использованием Parallel Computing Toolbox и MATLAB Distributed Computing Server [23] , а также сторонних пакетов, таких как Jacket .

Обработка GPGPU также используется для моделирования ньютоновской физики физическими движками [ 24] , а коммерческие реализации включают Havok Physics, FX и PhysX , оба из которых обычно используются для компьютерных и видеоигр .

C++ Accelerated Massive Parallelism ( C++ AMP ) — это библиотека, которая ускоряет выполнение кода C++ за счет использования аппаратных средств параллельной обработки данных на графических процессорах.

Мобильные компьютеры

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

Google Android 4.2 позволила запускать код RenderScript на графическом процессоре мобильного устройства. [25] С тех пор RenderScript был устарел в пользу первых вычислительных шейдеров OpenGL [26] и более поздних вычислений Vulkan. [27] OpenCL доступен на многих устройствах Android, но официально не поддерживается Android [ нужна ссылка ] . Apple представила собственный API Metal для приложений iOS , способный выполнять произвольный код с помощью вычислительных шейдеров GPU Apple [ нужна ссылка ] .

Поддержка оборудования

Видеокарты для компьютеров выпускаются различными производителями, такими как Nvidia , AMD . Карты от таких производителей отличаются реализацией поддержки форматов данных, таких как целочисленные и с плавающей точкой (32-битные и 64-битные). Microsoft представила стандарт Shader Model , чтобы помочь ранжировать различные функции графических карт в простой номер версии Shader Model (1.0, 2.0, 3.0 и т. д.).

Целые числа

Видеокарты до DirectX 9 поддерживали только палитровые или целочисленные типы цветов. Иногда добавляется еще одно альфа-значение, используемое для прозрачности. Распространенные форматы:

Числа с плавающей точкой

Для ранних графических процессоров с фиксированной функцией или ограниченной программируемостью (т. е. вплоть до совместимых с DirectX 8.1 графических процессоров) этого было достаточно, поскольку это также представление, используемое в дисплеях. Это представление имеет определенные ограничения. При наличии достаточной вычислительной мощности даже программисты графики хотели бы использовать лучшие форматы, такие как форматы данных с плавающей точкой , для получения таких эффектов, как визуализация с высоким динамическим диапазоном . Многие приложения GPGPU требуют точности с плавающей точкой, которая поставляется с видеокартами, соответствующими спецификации DirectX 9.

DirectX 9 Shader Model 2.x предполагала поддержку двух типов точности: полной и частичной точности. Полная поддержка точности могла быть FP32 или FP24 (плавающая точка 32- или 24-бит на компонент) или выше, в то время как частичная точность была FP16. Серия графических процессоров ATI Radeon R300 поддерживала точность FP24 только в программируемом конвейере фрагментов (хотя FP32 поддерживался в вершинных процессорах), в то время как серия Nvidia NV30 поддерживала как FP16, так и FP32; другие поставщики, такие как S3 Graphics и XGI, поддерживали смесь форматов до FP24.

Реализации плавающей точки на графических процессорах Nvidia в основном соответствуют IEEE ; однако это не относится ко всем поставщикам. [28] Это имеет последствия для корректности, которые считаются важными для некоторых научных приложений. Хотя 64-битные значения с плавающей точкой (двойная точность с плавающей точкой) обычно доступны на центральных процессорах, они не поддерживаются повсеместно на графических процессорах. Некоторые архитектуры графических процессоров жертвуют соответствием IEEE, в то время как другие не поддерживают двойную точность. Были предприняты попытки эмулировать значения с плавающей точкой двойной точности на графических процессорах; однако компромисс скорости сводит на нет любые преимущества от выгрузки вычислений на графический процессор в первую очередь. [29]

Векторизация

Большинство операций на GPU работают векторизованным образом: одна операция может быть выполнена над четырьмя значениями одновременно. Например, если один цвет ⟨R1, G1, B1⟩ должен быть модулирован другим цветом ⟨R2, G2, B2⟩ , GPU может создать результирующий цвет ⟨R1*R2, G1*G2, B1*B2⟩ за одну операцию. Эта функциональность полезна в графике, поскольку почти каждый базовый тип данных является вектором (либо 2-, 3-, либо 4-мерным). [ требуется цитата ] Примеры включают вершины, цвета, векторы нормалей и координаты текстур. Многие другие приложения могут использовать это с пользой, и из-за их более высокой производительности векторные инструкции, называемые одиночными инструкциями, множественными данными ( SIMD ), уже давно доступны на CPU. [ требуется цитата ]

Графический процессор против центрального процессора

Первоначально данные просто передавались в одну сторону от центрального процессора (ЦП) к графическому процессору (ГП), а затем к устройству отображения . Однако со временем для ГП стало ценным хранить сначала простые, а затем сложные структуры данных, которые должны были передаваться обратно в ЦП, который анализировал изображение, или набор научных данных, представленных в формате 2D или 3D, который может понимать видеокарта. Поскольку ГП имеет доступ к каждой операции рисования, он может быстро анализировать данные в этих формах, тогда как ЦП должен опрашивать каждый пиксель или элемент данных гораздо медленнее, поскольку скорость доступа между ЦП и его большим пулом памяти с произвольным доступом (или, в еще худшем случае, жестким диском ) ниже, чем у ГП и видеокарт, которые обычно содержат меньшие объемы более дорогой памяти, доступ к которой осуществляется намного быстрее. Передача части набора данных для активного анализа в эту память ГП в виде текстур или других легко читаемых форм ГП приводит к увеличению скорости. Отличительной особенностью конструкции GPGPU является возможность двунаправленной передачи информации обратно от графического процессора к центральному процессору; как правило, пропускная способность данных в обоих направлениях в идеале высока, что приводит к мультипликативному эффекту на скорость конкретного часто используемого алгоритма .

Конвейеры GPGPU могут повысить эффективность на особенно больших наборах данных и/или данных, содержащих 2D или 3D изображения. Он используется в сложных графических конвейерах, а также в научных вычислениях ; больше в областях с большими наборами данных, таких как картирование генома , или там, где полезен двух- или трехмерный анализ — особенно в современном анализе биомолекул , изучении белков и другой сложной органической химии . Примером таких приложений является программный пакет NVIDIA для анализа генома .

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

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

GPGPU по сути является программной концепцией, а не аппаратной концепцией; это тип алгоритма , а не часть оборудования. Специализированные конструкции оборудования могут, однако, еще больше повысить эффективность конвейеров GPGPU, которые традиционно выполняют относительно немного алгоритмов на очень больших объемах данных. Таким образом, масштабно распараллеленные задачи на уровне гигантских данных могут быть распараллелены еще больше с помощью специализированных установок, таких как стоечные вычисления (множество похожих, тщательно настроенных машин, встроенных в стойку ) , которые добавляют третий уровень — множество вычислительных блоков, каждый из которых использует множество ЦП для соответствия множеству ГП. Некоторые «майнеры» биткоинов использовали такие установки для обработки большого количества данных.

Кэши

Исторически ЦП использовали аппаратно-управляемые кэши , но более ранние ГП предоставляли только программно-управляемую локальную память. Однако, поскольку ГП все чаще используются для приложений общего назначения, современные ГП разрабатываются с аппаратно-управляемыми многоуровневыми кэшами, которые помогли ГП перейти к основным вычислениям. Например, ГП архитектуры GT200 серии GeForce 200 не имели кэша L2, ГП Fermi имеет 768 КиБ кэша последнего уровня, ГП Kepler имеет 1,5 МБ кэша последнего уровня, [30] ГП Maxwell имеет 2 МБ кэша последнего уровня, а ГП Pascal имеет 4 МБ кэша последнего уровня.

Регистрационный файл

Графические процессоры имеют очень большие файлы регистров , что позволяет им сократить задержку переключения контекста. Размер файла регистра также увеличивается с каждым поколением графических процессоров, например, общий размер файла регистра на графических процессорах Maxwell (GM200), Pascal и Volta составляет 6 МиБ, 14 МиБ и 20 МиБ соответственно. [31] [32] Для сравнения, размер файла регистра на центральных процессорах невелик, обычно десятки или сотни килобайт.

Энергоэффективность

Высокая производительность графических процессоров достигается за счет высокого энергопотребления, которое при полной нагрузке фактически равно энергопотреблению всей остальной системы ПК вместе взятой. [33] Максимальное энергопотребление графического процессора серии Pascal (Tesla P100) было указано на уровне 250 Вт. [34]

Потоковая обработка

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

Последующее обсуждение, касающееся вершин, фрагментов и текстур, касается в основном устаревшей модели программирования GPGPU, где графические API ( OpenGL или DirectX ) использовались для выполнения вычислений общего назначения. С введением вычислительных API общего назначения CUDA (Nvidia, 2007) и OpenCL (независимый от поставщика, 2008) в новых кодах GPGPU больше нет необходимости отображать вычисления в графические примитивы. Потоковая природа обработки графических процессоров остается действительной независимо от используемых API. (См., например, [35] )

Графические процессоры могут обрабатывать только независимые вершины и фрагменты, но могут обрабатывать многие из них параллельно. Это особенно эффективно, когда программист хочет обработать много вершин или фрагментов одинаковым образом. В этом смысле графические процессоры являются потоковыми процессорами — процессорами, которые могут работать параллельно, запуская одно ядро ​​на многих записях в потоке одновременно.

Поток — это просто набор записей, требующих схожих вычислений. Потоки обеспечивают параллелизм данных. Ядра — это функции, которые применяются к каждому элементу в потоке. В графических процессорах вершины и фрагменты — это элементы в потоках, а вершинные и фрагментные шейдеры — это ядра, которые должны быть запущены на них. [ сомнительнообсудить ] Для каждого элемента мы можем только читать из ввода, выполнять операции с ним и записывать на вывод. Допустимо иметь несколько входов и несколько выходов, но никогда не иметь фрагмент памяти, который одновременно доступен для чтения и записи. [ неопределенно ]

Арифметическая интенсивность определяется как количество операций, выполненных на слово переданной памяти. Для приложений GPGPU важно иметь высокую арифметическую интенсивность, иначе задержка доступа к памяти ограничит вычислительное ускорение. [36]

Идеальные приложения GPGPU имеют большие наборы данных, высокий параллелизм и минимальную зависимость между элементами данных.

Концепции программирования графического процессора

Вычислительные ресурсы

На графическом процессоре доступны различные вычислительные ресурсы:

Фактически, программа может заменить выходную текстуру только для записи вместо кадрового буфера. Это делается либо через Render to Texture (RTT), Render-To-Backbuffer-Copy-To-Texture (RTBCTT), либо через более поздний stream-out.

Текстуры как поток

Наиболее распространенной формой потока для GPGPU является 2D-сетка, поскольку она естественным образом соответствует модели рендеринга, встроенной в GPU. Многие вычисления естественным образом отображаются в сетках: матричная алгебра, обработка изображений, физическая симуляция и т. д.

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

Ядра

Вычислительные ядра можно рассматривать как тело циклов . Например, программист, работающий с сеткой на ЦП, может иметь код, который выглядит следующим образом:

// Входные и выходные сетки имеют размер 10000 x 10000 или 100 миллионов элементов.void transform_10k_by_10k_grid ( float in [ 10000 ][ 10000 ], float out [ 10000 ][ 10000 ]) { for ( int x = 0 ; x < 10000 ; x ++ ) { for ( int y = 0 ; y < 10000 ; y ++ ) { // Следующая строка выполняется 100 миллионов раз out [ x ][ y ] = do_some_hard_work ( in [ x ][ y ]); } } }                              

На графическом процессоре программист указывает только тело цикла как ядро ​​и какие данные следует обрабатывать в цикле, вызывая обработку геометрии.

Управление потоком

В последовательном коде можно контролировать поток программы с помощью операторов if-then-else и различных форм циклов. Такие структуры управления потоком были добавлены в графические процессоры совсем недавно. [37] Условные записи могли выполняться с помощью правильно созданной серии арифметических/битовых операций, но циклы и условные ветки были невозможны.

Последние [ когда? ] графические процессоры позволяют ветвление, но обычно с потерей производительности. Ветвление следует избегать во внутренних циклах, будь то в коде CPU или GPU, и различные методы, такие как статическое разрешение ветвления, предварительное вычисление, предикация, разделение цикла [38] и Z-cull [39], могут использоваться для достижения ветвления, когда аппаратная поддержка отсутствует.

Методы графического процессора

Карта

Операция map просто применяет заданную функцию (ядро) к каждому элементу в потоке. Простым примером является умножение каждого значения в потоке на константу (увеличение яркости изображения). Операция map проста в реализации на GPU. Программист генерирует фрагмент для каждого пикселя на экране и применяет фрагментную программу к каждому из них. Результирующий поток того же размера сохраняется в выходном буфере.

Уменьшать

Некоторые вычисления требуют вычисления меньшего потока (возможно, потока только из одного элемента) из большего потока. Это называется сокращением потока. Как правило, сокращение может быть выполнено в несколько шагов. Результаты предыдущего шага используются в качестве входных данных для текущего шага, а диапазон, к которому применяется операция, сокращается до тех пор, пока не останется только один элемент потока.

Фильтрация потока

Фильтрация потока по сути является неравномерным сокращением. Фильтрация подразумевает удаление элементов из потока на основе некоторых критериев.

Сканировать

Операция сканирования, также называемая параллельной префиксной суммой , берет вектор (поток) элементов данных и (произвольную) ассоциативную бинарную функцию '+' с элементом идентичности 'i' . Если входные данные - [a0, a1, a2, a3, ...], то исключающее сканирование дает на выходе [i, a0, a0 + a1, a0 + a1 + a2, ...], тогда как инклюзивное сканирование дает на выходе [a0, a0 + a1, a0 + a1 + a2, a0 + a1 + a2 + a3, ...] и не требует наличия идентичности . Хотя на первый взгляд операция может показаться последовательной по своей сути, эффективные алгоритмы параллельного сканирования возможны и были реализованы на графических процессорах. Операция сканирования используется, например, в быстрой сортировке и умножении разреженной матрицы на вектор. [35] [40] [41] [42]

Разброс

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

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

В специализированных вычислительных ядрах разброс может выполняться с помощью индексированных записей.

Собирать

Gather — это обратный scatter. После того, как scatter переупорядочивает элементы в соответствии с картой, gather может восстановить порядок элементов в соответствии с используемым scatter карты. В выделенных вычислительных ядрах gather может выполняться индексированными чтениями. В других шейдерах он выполняется с помощью текстурных поисков.

Сортировать

Операция сортировки преобразует неупорядоченный набор элементов в упорядоченный набор элементов. Наиболее распространенной реализацией на графических процессорах является использование сортировки по радиксу для целочисленных и плавающих данных, а также крупнозернистой сортировки слиянием и мелкозернистых сетей сортировки для общих сопоставимых данных. [43] [44]

Операция поиска позволяет программисту найти заданный элемент в потоке или, возможно, найти соседей указанного элемента. В основном используемый метод поиска — это бинарный поиск по отсортированным элементам.

Структуры данных

На графическом процессоре могут быть представлены различные структуры данных:

Приложения

Ниже приведены некоторые области, в которых графические процессоры использовались для вычислений общего назначения:

Биоинформатика

Использование GPGPU в биоинформатике: [59] [83]

Молекулярная динамика

† Ожидаемое ускорение сильно зависит от конфигурации системы. Производительность графического процессора сравнивается с многоядерным сокетом x86 CPU. Производительность графического процессора измеряется на поддерживаемых графическим процессором функциях и может быть сравнением производительности ядра с ядром. Подробную информацию об используемой конфигурации см. на веб-сайте приложения. Ускорение согласно внутреннему тестированию Nvidia или документации ISV.

‡ Q= Quadro GPU , T= Tesla GPU . Nvidia рекомендовала GPU для этого приложения. Обратитесь к разработчику или ISV, чтобы получить информацию о сертификации.

Смотрите также

Ссылки

  1. ^ Фанг, Джеймс; Тан, Феликс; Манн, Стив (7–10 октября 2002 г.). Опосредованная реальность с использованием аппаратного обеспечения компьютерной графики для компьютерного зрения (PDF) . Труды Международного симпозиума по носимым вычислениям 2002 г. (ISWC2002). Сиэтл, Вашингтон, США. стр. 83–89. Архивировано из оригинала (PDF) 2 апреля 2012 г.
  2. ^ Aimone, Chris; Fung, James; Mann, Steve (2003). «Оценка движения без признаков на основе видео Eye Tap с помощью гироскопического отслеживания для носимой компьютерной реальности». Персональные и повсеместные вычисления . 7 (5): 236–248. doi :10.1007/s00779-003-0239-6. S2CID  25168728.
  3. ^ «Обработка сигналов компьютерного зрения на графических процессорах», Труды Международной конференции IEEE по акустике, речи и обработке сигналов (ICASSP 2004) Архивировано 19 августа 2011 г. в Wayback Machine : Монреаль, Квебек, Канада, 17–21 мая 2004 г., стр. V-93 – V-96
  4. ^ Читти, ДМ (2007, июль). Параллельный подход к генетическому программированию с использованием программируемого графического оборудования Архивировано 8 августа 2017 г. в Wayback Machine . В трудах 9-й ежегодной конференции по генетическим и эволюционным вычислениям (стр. 1566-1573). ACM.
  5. ^ «Использование нескольких графических карт в качестве параллельного компьютера общего назначения: приложения к компьютерному зрению», Труды 17-й Международной конференции по распознаванию образов (ICPR2004). Архивировано 18 июля 2011 г. в Wayback Machine , Кембридж, Соединенное Королевство, 23–26 августа 2004 г., том 1, страницы 805–808.
  6. Халл, Джеральд (декабрь 1987 г.). «ЖИЗНЬ». Amazing Computing . 2 (12): 81–84.
  7. ^ Крюгер, Йенс; Вестерманн, Рюдигер (июль 2003 г.). «Операторы линейной алгебры для реализации численных алгоритмов на GPU». ACM Transactions on Graphics . 22 (3): 908–916. doi :10.1145/882262.882363. ISSN  0730-0301.
  8. ^ Больц, Джефф; Фармер, Ян; Гринспун, Эйтан; Шредер, Питер (июль 2003 г.). «Решатели разреженных матриц на графическом процессоре: сопряженные градиенты и многосетка». ACM Transactions on Graphics . 22 (3): 917–924. doi :10.1145/882262.882364. ISSN  0730-0301.
  9. ^ Тардити, Дэвид; Пури, Сидд; Оглсби, Хосе (2006). «Ускоритель: использование параллелизма данных для программирования графических процессоров общего назначения» (PDF) . ACM SIGARCH Computer Architecture News . 34 (5). doi :10.1145/1168919.1168898.
  10. ^ Че, Шуай; Бойер, Майкл; Мэн, Цзяюань; Тарьян, Д.; Шиффер, Джереми В.; Скадрон, Кевин (2008). «Исследование производительности приложений общего назначения на графических процессорах с использованием CUDA». J. Параллельные и распределенные вычисления . 68 (10): 1370–1380. CiteSeerX 10.1.1.143.4849 . дои : 10.1016/j.jpdc.2008.05.014. 
  11. ^ Glaser, J.; Nguyen, TD; Anderson, JA; Lui, P.; Spiga, F.; Millan, JA; Morse, DC; Glotzer, SC (2015). «Сильное масштабирование моделирования молекулярной динамики общего назначения на графических процессорах». Computer Physics Communications . 192 : 97–107. arXiv : 1412.3387 . Bibcode : 2015CoPhC.192...97G. doi : 10.1016/j.cpc.2015.02.028 .
  12. ^ ab Du, Peng; Weber, Rick; Luszczek, Piotr; Tomov, Stanimire; Peterson, Gregory; Dongarra, Jack (2012). «От CUDA к OpenCL: на пути к производительно-переносимому решению для многоплатформенного программирования GPU». Параллельные вычисления . 38 (8): 391–407. CiteSeerX 10.1.1.193.7712 . doi :10.1016/j.parco.2011.10.002. 
  13. ^ "OpenCL набирает популярность на CUDA". 28 февраля 2012 г. Архивировано из оригинала 23 апреля 2012 г. Получено 10 апреля 2012 г.«Как две основные среды программирования для вычислений на графических процессорах, OpenCL и CUDA в течение последних нескольких лет конкурируют за внимание в сообществе разработчиков».
  14. ^ Джеймс Фанг, Стив Манн, Крис Аймон, «OpenVIDIA: Parallel GPU Computer Vision, архивировано 23 декабря 2019 г. на Wayback Machine », Труды ACM Multimedia 2005, Сингапур, 6–11 ноября 2005 г., страницы 849–852
  15. ^ "Hybridizer". Гибридизатор . Архивировано из оригинала 17 октября 2017 года.
  16. ^ "Домашняя страница". Altimesh . Архивировано из оригинала 17 октября 2017 года.
  17. ^ "Hybridizer generics and heritage". 27 июля 2017 г. Архивировано из оригинала 17 октября 2017 г.
  18. ^ «Отладка и профилирование с помощью Hybridizer». 5 июня 2017 г. Архивировано из оригинала 17 октября 2017 г.
  19. ^ "Введение". Alea GPU . Архивировано из оригинала 25 декабря 2016 года . Получено 15 декабря 2016 года .
  20. ^ "Домашняя страница". Quant Alea . Архивировано из оригинала 12 декабря 2016 . Получено 15 декабря 2016 .
  21. ^ "Использование F# для программирования GPU". F# Software Foundation. Архивировано из оригинала 18 декабря 2016 года . Получено 15 декабря 2016 года .
  22. ^ "Alea GPU Features". Quant Alea . Архивировано из оригинала 21 декабря 2016 . Получено 15 декабря 2016 .
  23. ^ "MATLAB Adds GPGPU Support". 20 сентября 2010 г. Архивировано из оригинала 27 сентября 2010 г.
  24. ^ ab Joselli, Mark, et al. «Новый физический движок с автоматическим распределением процессов между CPU-GPU [ нерабочая ссылка ] ». Труды симпозиума ACM SIGGRAPH 2008 года по видеоиграм. ACM, 2008.
  25. ^ "Android 4.2 API - Android Developers". developer.android.com . Архивировано из оригинала 26 августа 2013 г.
  26. ^ «Перенос скриптов на OpenGL ES 3.1».
  27. ^ «Перенос скриптов в Vulkan».
  28. ^ Харрис, Марк (2005). «Отображение вычислительных концепций на графических процессорах». Курсы ACM SIGGRAPH 2005 по теме SIGGRAPH '05 . стр. 50–es. doi :10.1145/1198555.1198768. ISBN 9781450378338. S2CID  8212423.
  29. ^ Двойная точность на графических процессорах (Труды ASIM 2005) Архивировано 21 августа 2014 г. на Wayback Machine : Доминик Годдеке, Роберт Стржодка и Стефан Турек. Ускорение моделирования двойной точности (FEM) с помощью (GPU). Труды ASIM 2005 – 18-й симпозиум по технике моделирования, 2005.
  30. ^ "Nvidia-Kepler-GK110-Architecture-Whitepaper" (PDF) . Архивировано (PDF) из оригинала 21 февраля 2015 г.
  31. ^ "Внутри Pascal: новейшая вычислительная платформа Nvidia, архив 7 мая 2017 г. на Wayback Machine "
  32. ^ «Внутри Volta: самый передовой в мире графический процессор для центров обработки данных. Архивировано 1 января 2020 г. на Wayback Machine »
  33. ^ "https://www.tomshardware.com/reviews/geforce-radeon-power,2122.html Сколько мощности нужно вашей видеокарте?"
  34. ^ "https://images.nvidia.com/content/tesla/pdf/nvidia-tesla-p100-PCIe-datasheet.pdf Графический ускоритель Nvidia Tesla P100 Архивировано 24 июля 2018 года на Wayback Machine "
  35. ^ ab «Д. Гёддеке, 2010. Быстрые и точные многосеточные решатели конечных элементов для моделирования PDE на кластерах графических процессоров. Кандидатская диссертация, Технический университет Дортмунда». Архивировано из оригинала 16 декабря 2014 года.
  36. ^ Asanovic, K.; Bodik, R.; Demmel, J.; Keaveny, T.; Keutzer, K.; Kubiatowicz, J.; Morgan, N.; Patterson, D.; Sen, K.; Wawrzynek, J.; Wessel, D.; Yelick, K. (2009). "Взгляд на ландшафт параллельных вычислений". Commun. ACM . 52 (10): 56–67. doi : 10.1145/1562764.1562783 .
  37. ^ «GPU Gems – Глава 34, Идиомы управления потоком GPU».
  38. ^ Future Chips. "Учебник по удалению веток", 2011
  39. Обзорная статья GPGPU Архивировано 4 января 2007 г. на Wayback Machine : Джон Д. Оуэнс, Дэвид Любке, Нага Говиндараджу, Марк Харрис, Йенс Крюгер, Аарон Э. Лефон и Тим Перселл. «Обзор вычислений общего назначения на графическом оборудовании». Computer Graphics Forum, том 26, номер 1, 2007 г., стр. 80–113.
  40. ^ "S. Sengupta, M. Harris, Y. Zhang, JD Owens, 2007. Scan Primitives for GPU computing. In T. Aila and M. Segal (eds.): Graphics Hardware (2007)". Архивировано из оригинала 5 июня 2015 г. Получено 16 декабря 2014 г.
  41. ^ Blelloch, GE (1989). "Scans as primitive parallel operations" (PDF) . IEEE Transactions on Computers . 38 (11): 1526–1538. doi :10.1109/12.42122. Архивировано из оригинала (PDF) 23 сентября 2015 г. . Получено 16 декабря 2014 г. .
  42. ^ "М. Харрис, С. Сенгупта, Дж. Д. Оуэнс. Параллельная префиксная сумма (сканирование) с CUDA. В Nvidia: GPU Gems 3, Глава 39".[ постоянная мертвая ссылка ]
  43. ^ Меррилл, Дуэйн. Разработка алгоритма, ориентированного на распределение, с применением к вычислениям на графических процессорах. Кандидатская диссертация, кафедра компьютерных наук, Университет Вирджинии. Декабрь 2011 г.
  44. ^ Шон Бакстер. Современные ГПУ Архивировано 7 октября 2016 года на Wayback Machine , 2013.
  45. ^ Леунг, Алан, Ондржей Лхотак и Гулам Лашари. «Автоматическое распараллеливание для графических процессоров». Труды 7-й Международной конференции по принципам и практике программирования на Java. ACM, 2009.
  46. ^ Хенриксен, Троелс, Мартин Элсман и Космин Э. Оанча. «Разделение по размеру: гибридный подход к выводу размера в футарке». Труды 3-го семинара ACM SIGPLAN по функциональным высокопроизводительным вычислениям. ACM, 2014.
  47. ^ Баскаран, Мутху Маникандан; Бондугула, Удай; Кришнамурти, Шрирам; Рамануджам, Дж.; Рунтев, Атанас; Садаяппан, П. (2008). «Среда компилятора для оптимизации вложений аффинных циклов для gpgpus». Материалы 22-й ежегодной международной конференции по суперкомпьютингу-ICS'08 . п. 225. дои : 10.1145/1375527.1375562. ISBN 9781605581583. S2CID  6137960.
  48. ^ "К. Крейн, И. Лламас, С. Тарик, 2008. Моделирование и рендеринг трехмерных жидкостей в реальном времени. В Nvidia: GPU Gems 3, Глава 30".[ постоянная мертвая ссылка ]
  49. ^ "M. Harris, 2004. Fast Fluid Dynamics Simulation on the GPU. In Nvidia: GPU Gems, Chapter 38". Архивировано из оригинала 7 октября 2017 г.
  50. ^ Блок, Бенджамин; Вирнау, Питер; Прейс, Тобиас (2010). «Многопроцессорное ускоренное многоспиновое Монте-Карло-симуляционное моделирование двумерной модели Изинга». Computer Physics Communications . 181 (9): 1549–1556. arXiv : 1007.3726 . Bibcode : 2010CoPhC.181.1549B. doi : 10.1016/j.cpc.2010.05.005. S2CID  14828005.
  51. ^ Сан, С.; Бауэр, К.; Бейхель, Р. (2011). «Автоматизированная 3-мерная сегментация легких с раком легких в данных КТ с использованием нового надежного подхода к активной модели формы». Труды IEEE по медицинской визуализации . 31 (2): 449–460. doi :10.1109/TMI.2011.2171357. PMC 3657761. PMID  21997248 . 
  52. ^ Хименес, Эдвард С. и Лорел Дж. Орр. «Переосмысление союза реконструкции компьютерной томографии и вычислений GPGPU». Системы проникающего излучения и их применение XIV. Том 8854. Международное общество оптики и фотоники, 2013.
  53. ^ Sorensen, TS; Schaeffter, T.; Noe, KO; Hansen, MS (2008). «Ускорение неэквиспейсного быстрого преобразования Фурье на оборудовании для массовой графики». IEEE Transactions on Medical Imaging . 27 (4): 538–547. doi :10.1109/TMI.2007.909834. PMID  18390350. S2CID  206747049.
  54. ^ Гарсия, Винсент; Дебрев, Эрик; Барло, Мишель (2008). «Быстрый поиск ближайших соседей k с использованием графического процессора». arXiv : 0804.1448 [cs.CV].
  55. ^ Кококкиони, Марко; Грассо, Раффаэле; Риксен, Мишель (2011). «Быстрое прототипирование высокопроизводительных приложений нечетких вычислений с использованием высокоуровневого программирования GPU для поддержки морских операций». Симпозиум IEEE 2011 года по вычислительному интеллекту для приложений безопасности и обороны (CISDA) . стр. 17–23. doi :10.1109/CISDA.2011.5945947. ISBN 978-1-4244-9939-7. S2CID  2089441.
  56. ^ Уэйлен, Шон (10 марта 2005 г.). Аудио и графический процессор . CiteSeerX 10.1.1.114.365 . 
  57. ^ Уилсон, Рон (3 сентября 2009 г.). «DSP приносит вам прогулку по луне в высоком разрешении». EDN . Архивировано из оригинала 22 января 2013 г. Получено 3 сентября 2009 г. Сообщается, что Lowry использует графические процессоры Nvidia Tesla (графические процессоры), запрограммированные в CUDA (Compute Unified Device Architecture) компании для реализации алгоритмов. Nvidia утверждает, что графические процессоры примерно на два порядка быстрее вычислений центрального процессора, что сокращает время обработки до менее одной минуты на кадр.
  58. ^ Alerstam, E.; Svensson, T.; Andersson-Engels, S. (2008). "Параллельные вычисления с графическими процессорами для высокоскоростного моделирования миграции фотонов методом Монте-Карло" (PDF) . Journal of Biomedical Optics . 13 (6): 060504. Bibcode :2008JBO....13f0504A. doi : 10.1117/1.3041496 . PMID  19123645. Архивировано (PDF) из оригинала 9 августа 2011 г.
  59. ^ abc Хасан, Хондкер С.; Чаттерджи, Амлан; Радхакришнан, Шридхар; Антонио, Джон К. (2014). "Модель прогнозирования производительности и анализ для ресурсоемких задач на графических процессорах" (PDF) . Advanced Information Systems Engineering (PDF) . Lecture Notes in Computer Science. Vol. 7908. pp. 612–617. doi :10.1007/978-3-662-44917-2_65. ISBN 978-3-642-38708-1.
  60. ^ "Computational Physics with GPUs: Lund Observatory". www.astro.lu.se . Архивировано из оригинала 12 июля 2010 г.
  61. ^ Schatz, Michael C; Trapnell, Cole; Delcher, Arthur L; Varshney, Amitabh (2007). "Высокопроизводительное выравнивание последовательностей с использованием графических процессоров". BMC Bioinformatics . 8 : 474. doi : 10.1186/1471-2105-8-474 . PMC 2222658 . PMID  18070356. 
  62. ^ Светлин А. Манавски; Джорджио Валле (2008). «CUDA-совместимые графические карты как эффективные аппаратные ускорители для выравнивания последовательностей Смита-Уотермана». BMC Bioinformatics . 9 (Suppl. 2): S10. doi : 10.1186/1471-2105-9-s2-s10 . PMC 2323659. PMID  18387198 . 
  63. ^ Олейник, М; Штойвер, М; Горлач, С; Хайдер, Д (15 ноября 2014 г.). "gCUP: быстрое прогнозирование использования корецепторов ВИЧ-1 на основе графического процессора для секвенирования следующего поколения". Биоинформатика . 30 (22): 3272–3. doi : 10.1093/bioinformatics/btu535 . PMID  25123901.
  64. ^ Ван, Гохуэй и др. «Ускорение алгоритмов компьютерного зрения с использованием фреймворка OpenCL на мобильном GPU — пример». Международная конференция IEEE по акустике, речи и обработке сигналов 2013 г. IEEE, 2013.
  65. ^ Бойер, Винсент; Эль Баз, Дидье (2013). «Последние достижения в области вычислений на графических процессорах в исследовании операций». Международный симпозиум IEEE 2013 года по параллельной и распределенной обработке, семинары и форум PhD (PDF) . стр. 1778–1787. doi :10.1109/IPDPSW.2013.45. ISBN 978-0-7695-4979-8. S2CID  2774188.
  66. ^ Буката, Либор; Суха, Премысл; Ханзалек, Зденек (2014). «Решение проблемы планирования проектов с ограниченными ресурсами с использованием параллельного поиска Tabu, разработанного для платформы CUDA». Журнал параллельных и распределенных вычислений . 77 : 58–68. arXiv : 1711.04556 . doi : 10.1016/j.jpdc.2014.11.005. S2CID  206391585.
  67. ^ Боймелт, Зденек; Дворжак, Ян; Щуха, Пржемысл; Ханзалек, Зденек (2016). «Новый подход к переназначению медсестер на основе параллельного алгоритма». Европейский журнал операционных исследований . 251 (2): 624–639. дои : 10.1016/j.ejor.2015.11.022.
  68. ^ CTU-IIG Архивировано 9 января 2016 г. в Wayback Machine Чешский технический университет в Праге, Industrial Informatics Group (2015).
  69. ^ NRRPGpu Архивировано 9 января 2016 г. в Wayback Machine Чешского технического университета в Праге, Industrial Informatics Group (2015).
  70. ^ Наджу Манчерил. "Сортировка на основе GPU в PostgreSQL" (PDF) . Школа компьютерных наук – Университет Карнеги-Меллона . Архивировано (PDF) из оригинала 2 августа 2011 г.
  71. ^ Манавски, Светлин А. «CUDA-совместимый графический процессор как эффективный аппаратный ускоритель для криптографии AES. Архивировано 7 мая 2019 г. на Wayback Machine ». Международная конференция IEEE по обработке сигналов и коммуникациям 2007 г. IEEE, 2007.
  72. ^ Харрисон, Оуэн; Уолдрон, Джон (2007). "Внедрение и анализ шифрования AES на массовых графических процессорах". Криптографическое оборудование и встраиваемые системы - CHES 2007. Конспект лекций по информатике. Том 4727. стр. 209. CiteSeerX 10.1.1.149.7643 . doi :10.1007/978-3-540-74735-2_15. ISBN  978-3-540-74734-5.
  73. ^ AES и режимы работы на совместимых с SM4.0 графических процессорах. Архивировано 21 августа 2010 г. на Wayback Machine Оуэн Харрисон, Джон Уолдрон, Практическая симметричная криптография на современном графическом оборудовании. В трудах USENIX Security 2008.
  74. ^ Харрисон, Оуэн; Уолдрон, Джон (2009). «Эффективное ускорение асимметричной криптографии на графическом оборудовании». Прогресс в криптологии – AFRICACRYPT 2009. Конспект лекций по информатике. Том 5580. стр. 350. CiteSeerX 10.1.1.155.5448 . doi :10.1007/978-3-642-02384-2_22. ISBN  978-3-642-02383-5.
  75. ^ "Teraflop Troubles: The Power of Graphics Processing Units May Threate the World's Password Security System". Georgia Tech Research Institute . Архивировано из оригинала 30 декабря 2010 года . Получено 7 ноября 2010 года .
  76. ^ «Хотите отпугнуть хакеров? Сделайте свой пароль длиннее». NBC News . 19 августа 2010 г. Архивировано из оригинала 11 июля 2013 г. Получено 7 ноября 2010 г.
  77. ^ Лернер, Ларри (9 апреля 2009 г.). «Точка зрения: массовые графические процессоры, а не центральные процессоры для моделирования EDA». EE Times . Получено 14 сентября 2023 г.
  78. ^ "W2500 ADS Transient Convolution GT". ускоряет моделирование целостности сигнала на рабочих станциях с графическими процессорами (GPU) на базе архитектуры Nvidia Compute Unified Device Architecture (CUDA)
  79. ^ GrAVity: Массивно-параллельный антивирусный движок Архивировано 27 июля 2010 г. на Wayback Machine . Гиоргос Василиадис и Сотирис Иоаннидис, GrAVity: Массивно-параллельный антивирусный движок. В материалах RAID 2010.
  80. ^ "Лаборатория Касперского использует технологии Nvidia для усиления защиты". Лаборатория Касперского . 14 декабря 2009 г. Архивировано из оригинала 19 июня 2010 г. В ходе внутреннего тестирования Tesla S1070 продемонстрировал 360-кратное увеличение скорости работы алгоритма определения сходства по сравнению с популярным центральным процессором Intel Core 2 Duo, работающим на тактовой частоте 2,6 ГГц.
  81. ^ Gnort: Высокопроизводительное обнаружение вторжений в сеть с использованием графических процессоров Архивировано 9 апреля 2011 г. на Wayback Machine . Гиоргос Василиадис и др., Gnort: Высокопроизводительное обнаружение вторжений в сеть с использованием графических процессоров. В материалах RAID 2008.
  82. ^ Сопоставление регулярных выражений на графическом оборудовании для обнаружения вторжений Архивировано 27 июля 2010 г. на Wayback Machine . Гиоргос Василиадис и др., Сопоставление регулярных выражений на графическом оборудовании для обнаружения вторжений. В материалах RAID 2009.
  83. ^ "GPU-Accelerated Applications" (PDF) . Архивировано (PDF) из оригинала 25 марта 2013 г. . Получено 12 сентября 2013 г. .
  84. ^ Лэнгдон, Уильям Б.; Лэм, Брайан Йи Хонг; Петке, Джастина; Харман, Марк (2015). «Улучшение программного обеспечения для анализа ДНК CUDA с помощью генетического программирования». Труды конференции 2015 года по генетическим и эволюционным вычислениям — GECCO '15 . С. 1063–1070. doi :10.1145/2739480.2754652. ISBN 9781450334723. S2CID  8992769.

Дальнейшее чтение