Дата Сциенце

ГПУ програмирање са Питхоном

ГПУ програмирање са Питхоном

У овом чланку ћемо заронити у ГПУ програмирање помоћу Питхона. Користећи лакоћу Питхона, можете откључати невероватну рачунарску снагу ГПУ-а ваше графичке картице (јединица за обраду графике). У овом примеру ћемо радити са НВИДИА-ином ЦУДА библиотеком.

Захтеви

За ову вежбу ће вам требати или физичка машина са Линуком и ГПУ заснован на НВИДИА, или покренути инстанцу засновану на ГПУ на Амазон Веб Сервицес. Било која би требало да функционише у реду, али ако одлучите да користите физичку машину, мораћете да будете сигурни да имате инсталиране власничке управљачке програме НВИДИА, погледајте упутства: хттпс: // линукхинт.цом / инсталл-нвидиа-дриверс-линук

Такође ће вам требати инсталиран ЦУДА Тоолкит. Овај пример користи Убунту 16.Конкретно 04 ЛТС, али постоје доступна преузимања за већину главних Линук дистрибуција на следећем УРЛ-у: хттпс: // програмер.нвидиа.цом / цуда-довнлоадс

Више волим .преузимање засновано на деб, а ови примери ће претпоставити да сте одабрали ту руту. Датотека коју преузимате је .деб пакет, али нема а .деб проширење, па га преименујте у а .деб на крају његова корисна. Затим га инсталирате са:

судо дпкг -и назив пакета.деб

Ако се од вас затражи да инсталирате ГПГ кључ, следите упутства дата за то.

Сада ћете морати да инсталирате сам пакет цуда. Да бисте то урадили, покрените:

судо апт-гет упдате судо апт-гет инсталација цуда -и 

Овај део може потрајати, па ћете можда пожелети шалицу кафе. Након што завршите, препоручујем поновно покретање како бисте били сигурни да су сви модули правилно поново учитани.

Даље ће вам требати дистрибуција Анацонда Питхон. То можете преузети овде: хттпс: // ввв.анаконда.цом / довнлоад / # линук

Зграбите 64-битну верзију и инсталирајте је овако:

сх Анацонда *.сх

(звездица у горњој команди ће осигурати да се команда изврши без обзира на мању верзију)

Подразумевана локација за инсталирање требало би да буде у реду и у овом упутству ћемо је користити. По дефаулту се инсталира на ~ / анацонда3

На крају инсталације, од вас ће бити затражено да одлучите да ли желите да додате Анацонду на своју путању. Одговорите да овде да бисте олакшали покретање потребних команди. Да бисте осигурали да се ова промена догоди, након што инсталациони програм потпуно заврши, одјавите се, а затим се поново пријавите на свој налог.

Више информација о инсталирању Анацонде: хттпс: // линукхинт.цом / инсталл-анацонда-питхон-он-убунту /

Напокон ћемо морати да инсталирамо Нумбу. Нумба користи компајлер ЛЛВМ за компајлирање Питхона у машински код. Ово не само да побољшава перформансе редовног Питхон кода, већ такође пружа лепак неопходан за слање упутстава ГПУ-у у бинарном облику. Да бисте то урадили, покрените:

цонда инсталл нумба

Ограничења и предности ГПУ програмирања

Примамљиво је помислити да било који Питхон програм можемо претворити у програм заснован на ГПУ-у, драматично убрзавајући његове перформансе. Међутим, ГПУ на видео картици ради знатно другачије него стандардни ЦПУ на рачунару.

ЦПУ обрађују много различитих улаза и излаза и имају широк асортиман упутстава за решавање ових ситуација. Они су такође одговорни за приступ меморији, бављење системском магистралом, руковање заштитним прстеновима, сегментирање и функционалност уноса / излаза. Они су екстремни мултитаскери без посебног фокуса.

ГПУ-ови су, с друге стране, направљени да обрађују једноставне функције заслепљујуће великом брзином. Да би то постигли, очекују уједначеније стање улаза и излаза. Специјализовањем за скаларне функције. Скаларна функција узима један или више улаза, али враћа само један излаз. Ове вредности морају бити типови које је унапред дефинисао нумпи.

Пример кода

У овом примеру ћемо створити једноставну функцију која узима листу вредности, сабира их и враћа збир. Да бисмо демонстрирали снагу ГПУ-а, покренућемо једну од ових функција на ЦПУ-у и једну на ГПУ-у и приказати времена. Документовани код је испод:

импорт нумпи ас нп фром тимеит импорт дефаулт_тимер ас тимер фром нумба импорт вецторизе # Ово би требало да буде суштински велика вредност. На мојој тест машини требало је # 33 секунде да се покрене преко ЦПУ-а и нешто више од 3 секунде на ГПУ-у. НУМ_ЕЛЕМЕНТС = 100000000 # Ово је верзија процесора. деф вектор_адд_цпу (а, б): ц = нп.нуле (НУМ_ЕЛЕМЕНТС, дтипе = нп.флоат32) за и у опсегу (НУМ_ЕЛЕМЕНТС): ц [и] = а [и] + б [и] ретурн ц # Ово је верзија ГПУ-а. Обратите пажњу на украситељ @вецторизе. Ово говори # нумби да ово претвори у ГПУ векторизирану функцију. @вецторизе (["флоат32 (флоат32, флоат32)"], таргет = "цуда") деф вецтор_адд_гпу (а, б): ретурн а + б; деф маин (): а_извор = нп.оне (НУМ_ЕЛЕМЕНТС, дтипе = нп.флоат32) б_соурце = нп.оне (НУМ_ЕЛЕМЕНТС, дтипе = нп.флоат32) # Време ЦПУ функције старт = тимер () вецтор_адд_цпу (а_соурце, б_соурце) вецтор_адд_цпу_тиме = тимер () - старт # Време ГПУ функције старт = тимер () вецтор_адд_гпу (а_соурце, б_соурце) вецтор_адд_гпу_тиме = старт (тимер) тимес принт ("ЦПУ функцији је било потребно% ф секунди."% вецтор_адд_цпу_тиме) принт (" ГПУ функцији је требало% ф секунди."% вецтор_адд_гпу_тиме) врати 0 ако је __наме__ ==" __маин__ ": маин () 

Да бисте покренули пример, откуцајте:

питхон гпу-пример.пи

НАПОМЕНА: Ако налетите на проблеме приликом покретања програма, покушајте да користите „цонда инсталл аццелерате“.

Као што видите, верзија процесора ради знатно спорије.

Ако не, тада су ваше понављања премале. Прилагодите НУМ_ЕЛЕМЕНТС већој вредности (на мојој се чинило да је марша лома око 100 милиона). То је зато што постављање ГПУ-а одузима мало, али приметно време, па је потребно да се операција исплати, потребно је веће радно оптерећење. Једном када га подигнете изнад прага за вашу машину, приметићете значајно побољшање перформанси верзије ГПУ-а у односу на верзију ЦПУ-а.

Закључак

Надам се да сте уживали у нашем основном уводу у ГПУ програмирање са Питхоном. Иако је горњи пример тривијалан, он пружа оквир који вам је потребан да бисте своје идеје даље користили користећи снагу вашег ГПУ-а.

Водич за битку за Веснотх
Битка за Веснотх је једна од најпопуларнијих стратешких игара отвореног кода које тренутно можете играти. Не само да је ова игра у развоју већ јако ду...
0 А.Д. Приручник
Од многих стратешких игара тамо, 0 А.Д. успева да се истакне као свеобухватан наслов и врло дубока, тактичка игра упркос томе што је отворен извор. Ра...
Водич за Унити3Д
Увод у Унити 3Д Унити 3Д је моћан мотор за развој игара. То је унакрсна платформа која вам омогућава да креирате игре за мобилне уређаје, веб, стоне р...