GPU

Введение в программирование на GPU

Введение в программирование на GPU

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

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

Разница между графическим процессором и процессором

Задолго до того, как 3D-графика с высоким разрешением и высокой точностью стала нормой, большинство компьютеров не имели графического процессора. Вместо этого ЦП выполнял все инструкции компьютерных программ, выполняя основные арифметические, логические, управляющие операции и операции ввода-вывода (I / O), указанные в инструкциях. По этой причине ЦП часто называют мозгом компьютера.

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

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

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

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

В результате растущего значения искусственного интеллекта спрос на разработчиков, разбирающихся в вычислениях общего назначения на GPU, стремительно растет.

CUDA против OpenCL против OpenACC

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

К счастью, теперь стало намного проще выполнять вычисления с ускорением на GPU благодаря платформам параллельных вычислений, таким как Nvidia CUDA, OpenCL или OpenACC. Эти платформы позволяют разработчикам игнорировать языковой барьер, существующий между процессором и графическим процессором, и вместо этого сосредоточиться на концепциях вычислений более высокого уровня.

CUDA

Первоначально выпущенная Nvidia в 2007 году, CUDA (Compute Unified Device Architecture) является сегодня доминирующей проприетарной структурой. «С CUDA разработчики могут значительно ускорить вычислительные приложения, используя мощь графических процессоров», - описывает структуру Nvidia.

Разработчики могут вызывать CUDA из таких языков программирования, как C, C ++, Fortran или Python, без каких-либо навыков графического программирования. Более того, CUDA Toolkit от Nvidia содержит все, что нужно разработчикам, чтобы начать создавать приложения с ускорением на GPU, которые значительно превосходят их аналоги, привязанные к процессору.

CUDA SDK доступен для Microsoft Windows, Linux и macOS. платформа CUDA также поддерживает другие вычислительные интерфейсы, включая OpenCL, Microsoft DirectCompute, OpenGL Compute Shaders и C ++ AMP.

OpenCL

Первоначально выпущенный Khronos Group в 2009 году, OpenCL является самым популярным открытым бесплатным стандартом для кроссплатформенного параллельного программирования. По данным Khronos Group, «OpenCL значительно улучшает скорость и отзывчивость широкого спектра приложений во многих рыночных категориях, включая игры и развлечения, научное и медицинское программное обеспечение, профессиональные творческие инструменты, обработку изображений, обучение нейронных сетей и логические выводы.”

OpenCL до сих пор реализован Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx и ZiiLABS, и он поддерживает все популярные операционные системы на всех основных платформах, что делает его чрезвычайно универсальный. OpenCL определяет C-подобный язык для написания программ, но сторонние API существуют для других языков программирования и платформ, таких как Python или Java.

OpenACC

OpenACC - это самый молодой стандарт программирования для параллельных вычислений, описанный в этой статье. Первоначально он был выпущен в 2015 году группой компаний, включающей Cray, CAPS, Nvidia и PGI (Portland Group), для упрощения параллельного программирования гетерогенных систем CPU / GPU.

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

Разработчики, заинтересованные в OpenACC, могут аннотировать исходный код C, C ++ и Fortran, чтобы сообщить графическому процессору, какие области следует ускорить. Цель состоит в том, чтобы предоставить модель программирования ускорителей, которая переносима между операционными системами и различными типами центральных процессоров и ускорителей.

Какой мне использовать?

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

Изучите кодирование на GPU в LinuxHint.ком

Программирование на GPU с помощью Python

Программирование на GPU с помощью C++

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

Чтобы познакомиться с CUDA, мы рекомендуем вам следовать инструкциям в кратком руководстве по CUDA, в котором объясняется, как настроить и запустить CUDA в Linux, Windows и macOS. Руководство AMD по программированию OpenCL предоставляет фантастический подробный обзор OpenCL, но предполагается, что читатель знаком с первыми тремя главами спецификации OpenCL. OpenACC предлагает трехступенчатое вводное руководство, предназначенное для демонстрации того, как использовать преимущества программирования на GPU, а дополнительную информацию можно найти в спецификации OpenACC.

OpenTTD против Simutrans
Создание собственного транспортного симулятора может быть увлекательным, расслабляющим и чрезвычайно увлекательным занятием. Вот почему вам нужно попр...
Учебник OpenTTD
OpenTTD - одна из самых популярных бизнес-симуляторов. В этой игре вам нужно создать замечательный транспортный бизнес. Тем не менее, вы начнете в нач...
SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...