GPU

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

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

Изчисляването с общо предназначение на GPU (Graphics Processing Unit), по-известно като GPU програмиране, е използването на GPU заедно с CPU (Central Processing Unit) за ускоряване на изчисленията в приложения, традиционно обработвани само от CPU.Въпреки че GPU програмирането е практически жизнеспособно само през последните две десетилетия, приложенията му вече включват практически всяка индустрия. Например, GPU програмирането се използва за ускоряване на обработката на видео, цифрови изображения и аудио сигнали, статистическа физика, научни изчисления, медицински изображения, компютърно зрение, невронни мрежи и дълбоко обучение, криптография и дори откриване на проникване, наред с много други области.

Тази статия служи като теоретично въведение, насочено към онези, които биха искали да се научат как да пишат GPU-ускорени програми, както и тези, които имат само общ интерес към тази завладяваща тема.

Разликата между GPU и CPU

Дълго време преди 3D графиките с висока разделителна способност да станат норма, повечето компютри нямаха графичен процесор. Вместо това процесорът изпълни всички инструкции на компютърни програми, като изпълни основните аритметични, логически, контролни и входно / изходни (I / O) операции, посочени в инструкциите. Поради тази причина CPU често се описва като мозък на компютъра.

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

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

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

Въпреки това, сред задачите, които имат значителна полза от паралелната обработка, е дълбокото обучение, едно от най-търсените умения в областта на технологиите днес. Алгоритмите за дълбоко обучение имитират активността в слоеве неврони в неокортекса, позволявайки на машините да се научат как да разбират езика, да разпознават модели или да композират музика.

В резултат на нарастващото значение на изкуствения интелект, търсенето на разработчици, които разбират изчисленията с общо предназначение на графичен процесор, нараства.

CUDA Versus OpenCL Versus OpenACC

Тъй като графичните процесори разбират изчислителните проблеми от гледна точка на графичните примитиви, ранните усилия за използване на графични процесори като процесори с общо предназначение изискваха преформулиране на изчислителните проблеми на езика на графичните карти.

За щастие сега е много по-лесно да се извършват GPU-ускорени изчисления благодарение на паралелни изчислителни платформи като CUDA на Nvidia, 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, DirectCompute на Microsoft, 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.com

GPU програмиране с Python

GPU програмиране с C++

Допълнителна информация

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

Полезни инструменти за геймърите на Linux
Ако искате да играете игри на Linux, има вероятност да сте използвали приложения и помощни програми като Wine, Lutris и OBS Studio, за да подобрите иг...
HD Remastered Games за Linux, които никога преди не са имали издание на Linux
Много разработчици и издатели на игри излизат с HD ремастер на стари игри, за да удължат живота на франчайза, моля феновете, които искат съвместимост ...
Как да използвам AutoKey за автоматизиране на Linux игри
AutoKey е програма за автоматизация на настолни компютри за Linux и X11, програмирана в Python 3, GTK и Qt. Използвайки неговата функционалност за скр...