GPU оптимизация - трюизми. Компютър на GPU Пример за приложение на технологията

26.02.2022

Говорейки за паралелни изчисления на графични процесори, трябва да помним в какво време живеем, днес е време, когато всичко в света се ускорява толкова много, че вие ​​и аз губим представа за времето, без да забелязваме как то бърза. Всичко, което правим, е свързано с висока точност и скорост на обработка на информацията, в такива условия със сигурност се нуждаем от инструменти, за да обработим цялата информация, която имаме и да я преобразуваме в данни, освен това, когато говорим за такива задачи, трябва да помним, че тези задачи са необходими не само за големи организации или мега-корпорации, но и за обикновени потребители, които решават житейските си проблеми, свързани с високите технологии у дома на персонални компютри! Появата на NVIDIA CUDA не беше изненадваща, а по-скоро оправдана, тъй като скоро ще е необходимо да се обработват значително по-отнемащи време задачи на компютъра от преди. Работата, която преди отнемаше много време, сега ще отнеме няколко минути и съответно това ще се отрази на цялостната картина на целия свят!

Какво е GPU изчисление?

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

Какво е CUDA

CUDA е технология за програмиране на алгоритми на опростения език C, които се изпълняват на графични процесори на ускорители GeForce от осмо поколение и по-стари, както и на съответните карти Quadro и Tesla от NVIDIA. CUDA ви позволява да включите специални функции в текста на C програма. Тези функции са написани на опростения език за програмиране C и се изпълняват на GPU. Първоначалната версия на CUDA SDK беше представена на 15 февруари 2007 г. За успешен превод на код на този език, CUDA SDK включва собствен C компилатор nvcc за команден ред на NVIDIA. Компилаторът nvcc е базиран на отворения компилатор Open64 и е проектиран да превежда код на хост (основен, контролен код) и код на устройство (хардуерен код) (файлове с разширение .cu) в обектни файлове, подходящи за сглобяване на крайната програма или библиотека в всяка среда за програмиране, като Microsoft Visual Studio.

Технологични възможности

  1. Стандартен C език за паралелно разработване на приложения на GPU.
  2. Готови библиотеки за числен анализ за бързо преобразуване на Фурие и основен софтуерен пакет за линейна алгебра.
  3. Специален CUDA драйвер за изчисления с бърз трансфер на данни между GPU и CPU.
  4. Възможност за свързване на CUDA драйвера с OpenGL и DirectX графични драйвери.
  5. Поддръжка за Linux 32/64-bit, Windows XP 32/64-bit и MacOS операционни системи.

Предимства на технологията

  1. Интерфейсът за програмиране на приложения CUDA (CUDA API) е базиран на стандартния език за програмиране C с някои ограничения. Това опростява и изглажда процеса на изучаване на CUDA архитектурата.
  2. Споделената памет от 16 KB между нишките може да се използва за организиран от потребителя кеш с по-широка честотна лента, отколкото при извличане от обикновени текстури.
  3. По-ефективни транзакции между паметта на процесора и видео паметта.
  4. Пълна хардуерна поддръжка за целочислени и побитови операции.

Пример за приложение на технологията

cRark

Най-отнемащата време част от тази програма е тинктурата. Програмата има конзолен интерфейс, но благодарение на инструкциите, които идват със самата програма, можете да я използвате. Следното е кратки инструкцииза настройка на програмата. Ще тестваме програмата за функционалност и ще я сравним с друга подобна програма, която не използва NVIDIA CUDA, в този случай добре познатата програма „Advanced Archive Password Recovery“.

От изтегления cRark архив ни трябват само три файла: crark.exe, crark-hp.exe и password.def. Crerk.exe е помощна програма за аутопсия на конзолата RAR пароли 3.0 без криптирани файлове в архива (т.е. когато отваряме архива виждаме имената, но не можем да разопаковаме архива без парола).

Crerk-hp.exe е конзолна помощна програма за отваряне на пароли RAR 3.0 с криптиране на целия архив (т.е. когато отваряме архива, не виждаме нито името, нито самите архиви и не можем да разопаковаме архива без парола).

Password.def е всеки преименуван текстов файл с много малко съдържание (например: 1-ви ред: ## 2-ри ред: ?* , в този случай паролата ще бъде разбита с всички знаци). Password.def е директорът на програмата cRark. Файлът съдържа правилата за разбиване на паролата (или областта от знаци, които crark.exe ще използва в своята работа). Повече подробности за възможностите за избор на тези символи са написани в текстовия файл, получен при отваряне на изтегления от сайта на автора на програмата cRark: russian.def.

Подготовка

Веднага ще кажа, че програмата работи само ако вашата видеокарта е базирана на графичен процесор, който поддържа нивото на ускорение CUDA 1.1. Така че серия от видеокарти, базирани на чипа G80, като GeForce 8800 GTX, вече не са необходими, тъй като те имат хардуерна поддръжка за CUDA 1.0 ускорение. Програмата избира само пароли за RAR архиви от версии 3.0+ с помощта на CUDA. Всичко трябва да се монтира софтуерсвързани с CUDA, а именно:

  • NVIDIA драйвери, поддържащи CUDA, започвайки от 169.21
  • NVIDIA CUDA SDK, започвайки от версия 1.1
  • NVIDIA CUDA Toolkit, започвайки от версия 1.1

Създаваме всяка папка на произволно място (например на устройството C:) и я наричаме произволно име, например „3.2“. Там поставяме файловете: crark.exe, crark-hp.exe и password.def и защитен с парола/криптиран RAR архив.

След това трябва да стартирате конзолата на командния ред на Windows и да отидете в създадената папка. В Windows Vista и 7 трябва да извикате менюто „Старт“ и да въведете „cmd.exe“ в полето за търсене; в Windows XP от менюто „Старт“ първо трябва да извикате диалоговия прозорец „Изпълнение“ и да въведете „cmd .exe“ в него. След като отворите конзолата, въведете команда като: cd C:\folder\ , cd C:\3.2 в този случай.

Набиране на персонал при текстов редактордва реда (можете също да запишете текста като .bat файл в папката с cRark), за да познаете паролата на защитен с парола RAR архив с некриптирани файлове:

ехо изключено;
cmd /K crark (име на архив).rar

за да познаете паролата на защитен с парола и криптиран RAR архив:

ехо изключено;
cmd /K crark-hp (име на архив).rar

Копирайте 2 реда от текстовия файл в конзолата и натиснете Enter (или стартирайте .bat файла).

резултати

Процесът на дешифриране е показан на фигурата:

Скоростта на отгатване на cRark с помощта на CUDA беше 1625 пароли/секунда. След една минута тридесет и шест секунди беше избрана парола с 3 знака: “q)$.” За сравнение: скоростта на търсене в Advanced Archive Password Recovery на моя двуядрен процесор Процесор Athlon 3000+ се равнява на максимум 50 пароли/секунда и търсенето ще трябва да продължи 5 часа. Тоест грубата селекция на RAR архив в cRark с помощта на видеокарта GeForce 9800 GTX+ е 30 пъти по-бърза, отколкото на CPU.

За тези, които имат Процесор Intel, добра дънна платка с висока честота на системната шина (FSB 1600 MHz), скоростта на процесора и скоростта на търсене ще бъдат по-високи. И ако имате четириядрен процесор и чифт видеокарти от ниво GeForce 280 GTX, тогава скоростта на грубите пароли ще се ускори значително. За да обобщим примера, трябва да се каже, че този проблем беше решен с помощта на технологията CUDA само за 2 минути вместо за 5 часа, което показва високия потенциал на тази технология!

заключения

След като разгледахме технологията за паралелни изчисления CUDA днес, ние ясно видяхме цялата сила и огромен потенциал за развитието на тази технология, използвайки примера на програма за възстановяване на пароли за RAR архиви. Трябва да се каже за перспективите на тази технология, тази технология със сигурност ще намери място в живота на всеки човек, който реши да я използва, било то научни задачи или задачи, свързани с обработка на видео, или дори икономически задачи, които изискват бързо, точни изчисления, всичко това ще доведе до неизбежното повишаване на производителността на труда, което не може да бъде пренебрегнато. Днес фразата „домашен суперкомпютър“ вече започва да навлиза в лексикона; Абсолютно очевидно е, че за да се превърне такъв артикул в реалност, всеки дом вече разполага с инструмент, наречен CUDA. След пускането на карти, базирани на чипа G80 (2006), бяха пуснати огромен брой базирани на NVIDIA ускорители, които поддържат технологията CUDA, която може да сбъдне мечтите за суперкомпютри във всеки дом. Популяризирайки технологията CUDA, NVIDIA повишава авторитета си в очите на клиентите под формата на предоставяне на допълнителни възможности на тяхното оборудване, което много вече са закупили. Можем само да вярваме, че CUDA скоро ще се развие много бързо и ще позволи на потребителите да се възползват напълно от всички възможности на паралелното изчисление на GPU.

Характеристики на архитектурата AMD/ATI Radeon

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

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

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

Графичният процесор се състои от няколко десетки (30 за Nvidia GT200, 20 за Evergreen, 16 за Fermi) процесорни ядра, които се наричат ​​Streaming Multiprocessor в терминологията на Nvidia и SIMD Engine в терминологията на ATI. За целите на тази статия ще ги наричаме минипроцесори, защото те изпълняват няколкостотин програмни потока и могат да правят почти всичко, което може да прави обикновен CPU, но все пак не всичко.

Маркетинговите имена са объркващи - за по-голямо значение те показват броя на функционалните модули, които могат да изваждат и умножават: например 320 векторни „ядра“. Тези ядки са по-скоро зърна. По-добре е да мислите за GPU като за вид многоядрен процесор с голям брой ядра, изпълняващи много нишки едновременно.

Всеки минипроцесор има локална памет, 16 KB за GT200, 32 KB за Evergreen и 64 KB за Fermi (по същество програмируем L1 кеш). Той има време за достъп, подобно на кеш паметта от първо ниво на конвенционален процесор и изпълнява подобни функции за най-бързо доставяне на данни до функционални модули. В архитектурата на Fermi част от локалната памет може да бъде конфигурирана като обикновен кеш. В GPU локалната памет се използва за бърз обмен на данни между изпълняващи се нишки. Една от обичайните схеми на GPU програма е следната: първо данните от глобалната памет на GPU се зареждат в локалната памет. Това е просто обикновена видео памет, разположена (подобно на системната памет) отделно от „неговия” процесор - в случай на видео, тя е запоена от няколко чипа върху PCB на видеокартата. След това няколкостотин нишки работят с тези данни в локалната памет и записват резултата в глобалната памет, след което се прехвърлят към процесора. Отговорност на програмиста е да напише инструкции за зареждане и разтоварване на данни от локалната памет. По същество това е разделяне на данните [на конкретна задача] за паралелна обработка. Графичният процесор също поддържа атомарни инструкции за запис/четене в паметта, но те са неефективни и обикновено са необходими на последния етап, за да „залепят заедно“ резултатите от изчисленията на всички минипроцесори.

Локалната памет е обща за всички нишки, изпълнявани в минипроцесора, поради което, например, в терминологията на Nvidia дори се нарича споделена, а терминът локална памет означава точно обратното, а именно: определена лична област на отделна нишка в глобалната памет, видима и достъпна само за нея. Но в допълнение към локалната памет, минипроцесорът има друга област на паметта, която във всички архитектури е приблизително четири пъти по-голяма по обем. Той е разделен по равно между всички изпълняващи се нишки; това са регистри за съхранение на променливи и междинни резултати от изчисленията. Всяка нишка има няколко десетки регистъра. Точният брой зависи от това колко нишки изпълнява минипроцесорът. Този брой е много важен, тъй като латентността на глобалната памет е много висока, стотици цикли и при липса на кеш памет няма къде да се съхраняват междинните резултати от изчисленията.

И още една важна характеристика на GPU: „мека“ векторизация. Всеки минипроцесор има голям брой изчислителни модули (8 за GT200, 16 за Radeon и 32 за Fermi), но всички те могат да изпълняват само една и съща инструкция с един и същ програмен адрес. В този случай операндите могат да бъдат различни, различните нишки имат свои собствени. Например инструкции добавете съдържанието на два регистъра: изпълнява се едновременно от всички изчислителни устройства, но регистрите се вземат различни. Предполага се, че всички нишки на GPU програмата, извършващи паралелна обработка на данни, обикновено се движат паралелно през програмния код. Така всички изчислителни модули се зареждат равномерно. И ако нишките се разминават в своя път за изпълнение на кода поради разклонения в програмата, тогава възниква така наречената сериализация. Тогава не се използват всички изчислителни модули, тъй като нишките изпращат различни инструкции за изпълнение, а блок от изчислителни модули може да изпълни, както вече казахме, само инструкция с един адрес. И, разбира се, производителността пада спрямо максималната.

Предимството е, че векторизацията е напълно автоматична, не е програмиране с помощта на SSE, MMX и т.н. И самият графичен процесор се справя с несъответствията. Теоретично можете като цяло да пишете програми за GPU, без да мислите за векторния характер на модулите за изпълнение, но скоростта на такава програма няма да бъде много висока. Недостатъкът е голямата ширина на вектора. Той е по-голям от номиналния брой функционални модули и е 32 за Nvidia GPU и 64 за Radeon. Нишките се обработват в блокове с подходящ размер. Nvidia нарича този блок от нишки терминът warp, AMD го нарича wave front, което е същото. По този начин, на 16 изчислителни устройства, "вълнов фронт" с дължина от 64 нишки се обработва в четири тактови цикъла (приемайки обичайната дължина на инструкцията). Авторът предпочита термина варп в случая, поради асоциацията с морския термин варп, означаващ въже, вързано от усукани въжета. Така че нишките се "усукват" и образуват солиден пакет. „Вълновият фронт“ обаче може да се свърже и с морето: инструкциите пристигат до задвижващите механизми по същия начин, както вълните се търкалят една след друга към брега.

Ако всички нишки са еднакво напреднали в изпълнението на програмата (разположени на едно и също място) и по този начин изпълняват една и съща инструкция, тогава всичко е наред, но ако не, настъпва забавяне. В този случай нишките от един warp или wave front се намират на различни места в програмата; И само нишките от една група все още се изпълняват едновременно - всички изпълняват една и съща инструкция, но с различни операнди. В резултат на това warp работи толкова пъти по-бавно, колкото е броят на групите, на които е разделен, а броят на нишките в групата няма значение. Дори ако групата се състои само от една нишка, изпълнението ще отнеме същото време като пълно изкривяване. В хардуера това се реализира чрез маскиране на определени нишки, тоест инструкциите се изпълняват формално, но резултатите от тяхното изпълнение не се записват никъде и не се използват в бъдеще.

Въпреки че във всеки даден момент всеки минипроцесор (Streaming MultiProcessor или SIMD Engine) изпълнява инструкции, принадлежащи само на една деформация (група нишки), той има няколко десетки активни деформации в пула за изпълнение. След като изпълни инструкциите на един варп, минипроцесорът изпълнява не следващата инструкция на нишките на този варп, а инструкциите на някой друг варп. Тази деформация може да бъде на съвсем различно място в програмата, това няма да повлияе на скоростта, тъй като само вътре в деформацията инструкциите на всички нишки трябва да са еднакви за изпълнение на пълна скорост.

В този случай всяка от 20-те машини SIMD има четири активни вълнови фронта, всеки с 64 нишки. Всяка нишка е обозначена с къса линия. Общо: 64×4×20=5120 нишки

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

Основното е, че графичният процесор няма стек, където могат да се съхраняват функционални параметри и локални променливи. Поради големия брой нишки, просто няма място на чипа за стека. В действителност, тъй като графичният процесор изпълнява едновременно около 10 000 нишки, с размер на стека на една нишка от 100 KB, общият обем ще бъде 1 GB, което е равно на стандартното количество на цялата видео памет. Освен това няма начин да поставите стек със значителен размер в самото ядро ​​на GPU. Например, ако поставите 1000 байта стек в нишка, тогава само един минипроцесор ще изисква 1 MB памет, което е почти пет пъти комбинираното количество локална памет на минипроцесора и паметта, разпределена за съхранение на регистри.

Следователно няма рекурсия в GPU програма и няма какво да се прави с извиквания на функции. Всички функции се вмъкват директно в кода при компилирането на програмата. Това ограничава обхвата на GPU приложенията до задачи от изчислителен тип. Понякога е възможно да се използва емулация на ограничен стек, като се използва глобална памет за алгоритми за рекурсия с известна малка дълбочина на итерация, но това не е типично приложение на GPU. За да направите това, е необходимо специално да се разработи алгоритъм и да се проучи възможността за неговото прилагане, без да се гарантира успешно ускорение в сравнение с процесора.

Fermi представи възможността за използване на виртуални функции за първи път, но отново използването им е ограничено от липсата на голям, бърз кеш за всяка нишка. 1536 нишки представляват 48 KB или 16 KB от L1, тоест виртуалните функции в една програма могат да се използват сравнително рядко, в противен случай стекът ще използва и бавна глобална памет, което ще забави изпълнението и най-вероятно няма да донесе ползи в сравнение с CPU версията.

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

Предимства на архитектурата

Но изчислява GPU много бързо. И неговата висока многопоточност му помага за това. Голям брой активни нишки позволява частично да се скрие високата латентност на отделно разположената глобална видеопамет, която е около 500 такта. Изравнява се особено добре за код с висока плътност на аритметични операции. По този начин йерархията на кеша L1-L2-L3, скъпа за транзисторите, не е необходима. Вместо това върху чипа могат да бъдат поставени множество изчислителни модули, осигурявайки изключителна аритметична производителност. Докато инструкциите на една нишка или warp се изпълняват, останалите стотици нишки тихо чакат своите данни.

Fermi представи L2 кеш от около 1 MB, но той не може да се сравни с кеш паметта модерни процесори, той е по-предназначен за комуникация между ядра и различни софтуерни трикове. Ако неговият размер се раздели между всичките десетки хиляди нишки, всеки ще има много незначителен обем.

Но в допълнение към глобалната латентност на паметта, има много повече латентности в компютърното устройство, които трябва да бъдат скрити. Това е закъснението на прехвърлянето на данни в чипа от изчислителните устройства към кеша от първо ниво, тоест локалната памет на GPU, и към регистрите, както и кеша на инструкциите. Регистърният файл, както и локалната памет, се намират отделно от функционалните модули и скоростта на достъп до тях е приблизително една и половина дузина цикъла. И отново, голям брой нишки, активни деформации, могат ефективно да скрият това забавяне. Освен това общата честотна лента (честотна лента) на локалната памет на целия GPU, като се вземе предвид броят на минипроцесорите, които го съставят, е значително по-голяма от честотната лента на достъпа до кеша от първо ниво на съвременните процесори. GPU може да обработва значително повече данни за единица време.

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

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

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

GPU първоначално е проектиран за оптимално изпълнение на шейдърни програми за триъгълни пиксели, които очевидно са независими и могат да се изпълняват паралелно. И от това състояние то еволюира чрез добавяне на различни възможности (локална памет и адресируем достъп до видео паметта, както и усложняване на набора от инструкции) в много мощно изчислително устройство, което все още може да се използва ефективно само за алгоритми, които позволяват силно паралелно изпълнение използване на ограничено количество локална памет.

Пример

Един от най-класическите проблеми за GPU е проблемът за изчисляване на взаимодействието на N тела, създаващи гравитационно поле. Но ако ние, например, трябва да изчислим еволюцията на системата Земя-Луна-Слънце, тогава графичният процесор е лоша помощ за нас: има малко обекти. За всеки обект е необходимо да се изчислят взаимодействията с всички останали обекти, а има само два от тях. В случай на движение на Слънчевата система с всички планети и техните луни (около няколкостотин обекта), GPU все още не е много ефективен. Въпреки това, поради високите разходи за управление на нишките, многоядрен процесор също няма да може да покаже цялата си мощност и ще работи в еднопоточен режим. Но ако също трябва да изчислите траекториите на комети и обекти от астероидния пояс, тогава това вече е задача за графичния процесор, тъй като има достатъчно обекти за създаване на необходимия брой паралелни изчислителни нишки.

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

Друга възможност за използване на мощността на GPU в проблем с N-тела възниква, когато трябва да изчислите много отделни проблеми, макар и с малък брой тела. Например, ако трябва да изчислите опции за еволюцията на една система за различни опции за начални скорости. След това можете ефективно да използвате GPU без никакви проблеми.

Подробности за микроархитектурата на AMD Radeon

Разгледахме основните принципи на организацията на GPU; те са общи за видео ускорителите от всички производители, тъй като първоначално имаха една целева задача - шейдърни програми. Въпреки това, производителите намериха възможност да се различават по детайлите на микроархитектурното изпълнение. Въпреки че процесорите от различни доставчици понякога са много различни, дори и да са съвместими, като например Pentium 4 и Athlon или Core. Архитектурата на Nvidia вече е доста широко известна, сега ще разгледаме Radeon и ще подчертаем основните разлики в подходите на тези доставчици.

Видеокартите на AMD получиха пълна поддръжка за изчисления с общо предназначение, като се започне от фамилията Evergreen, която също така внедри спецификациите DirectX 11 за първи път. Картите от фамилията 47xx имат редица значителни ограничения, които ще бъдат обсъдени по-долу.

Разликите в размера на локалната памет (32 KB за Radeon срещу 16 KB за GT200 и 64 KB за Fermi) като цяло не са значителни. Както и размера на вълната от 64 нишки за AMD срещу 32 нишки в warp за Nvidia. Почти всяка GPU програма може лесно да бъде преконфигурирана и настроена към тези параметри. Производителността може да се промени с десетки процента, но в случай на GPU това не е толкова важно, тъй като GPU програма обикновено работи десет пъти по-бавно от CPU аналога, или десет пъти по-бързо, или изобщо не работи.

По-важно е използването на технологията VLIW (Very Long Instruction Word) от AMD. Nvidia използва скалар прости инструкции, работещи със скаларни регистри. Неговите ускорители реализират прост класически RISC. Видеокартите на AMD имат същия брой регистри като GT200, но регистрите са 128-битови векторни. Всяка VLIW инструкция работи с множество четирикомпонентни 32-битови регистри, което е подобно на SSE, но VLIW има много повече възможности. Това не е SIMD (Single Instruction Multiple Data) като SSE - тук инструкциите за всяка двойка операнди могат да бъдат различни и дори зависими! Например нека компонентите на регистър А се наричат ​​a1, a2, a3, a4; регистър B е подобен. Може да се изчисли с една инструкция, която се изпълнява в един часовников цикъл, например числото a1×b1+a2×b2+a3×b3+a4×b4 или двумерен вектор (a1×b1+a2×b2, a3 ×b3+a4×b4 ).

Това стана възможно благодарение на по-ниската честота на GPU в сравнение с CPU и силното намаляване на технологията на процеса през последните години. В този случай не е необходим планировчик; почти всичко се изпълнява в тактов цикъл.

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

Един векторен регистър може да съхранява едно число с двойна точност вместо четири числа с единична точност. А една VLIW инструкция може или да събере две двойки двойни числа, или да умножи две числа, или да умножи две числа и да събере с трето. По този начин пиковата производителност при двойно е около пет пъти по-ниска, отколкото при плаващ. За по-старите модели Radeon тя съответства на производителността на Nvidia Tesla на новата архитектура Fermi и е много по-висока от производителността на двойните карти на архитектурата GT200. В потребителските графични карти Geforce, базирани на Fermi максимална скоростдвойните изчисления са намалени четири пъти.


Принципна схема на работа на Radeon. Представен е само един минипроцесор от 20 работещи паралелно

Производителите на GPU, за разлика от производителите на CPU (предимно x86-съвместими), не са обвързани от проблеми със съвместимостта. GPU програма първо се компилира в някакъв междинен код и когато програмата се изпълнява, драйверът компилира този код в специфични за модела машинни инструкции. Както е описано по-горе, производителите на GPU се възползваха от това, като измислиха удобна ISA (Instruction Set Architecture) за своите GPU и ги променяха от поколение на поколение. Във всеки случай това добави известен процент от производителността поради липсата (като ненужен) на декодер. Но AMD отиде още по-далеч, като измисли свой собствен формат за подреждане на инструкции в машинен код. Те не са подредени последователно (според листинга на програмата), а по секции.

Първо идва секцията с инструкции за условно разклоняване, която има връзки към секции с непрекъснати аритметични инструкции, съответстващи на различните разклонения. Те се наричат ​​VLIW пакети. Тези раздели съдържат само аритметични инструкциис данни от регистри или локална памет. Тази организация опростява управлението на потока от инструкции и тяхното доставяне до изпълнителните устройства. Това е още по-полезно, като се има предвид, че VLIW инструкциите са относително големи по размер. Има и секции за инструкции за достъп до паметта.

Раздели с инструкции за условен скок
Раздел 0Клон 0Връзка към раздел 3 от непрекъснати аритметични инструкции
Секция 1Клон 1Линк към раздел №4
Раздел 2Клон 2Линк към раздел №5
Секции с непрекъснати аритметични инструкции
Раздел 3VLIW инструкция 0VLIW инструкция 1VLIW инструкция 2VLIW инструкция 3
Раздел 4VLIW инструкция 4VLIW инструкция 5
Раздел 5VLIW инструкция 6VLIW инструкция 7VLIW инструкция 8VLIW инструкция 9

Графичните процесори от Nvidia и AMD също имат вградени инструкции за бързо изчисляване на основни математически функции, квадратен корен, експонента, логаритми, синуси и косинуси за числа с единична точност за няколко такта. За това има специални изчислителни единици. Те „произхождат“ от необходимостта да се приложи бързо сближаване на тези функции в геометричните шейдъри.

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

Но по-очевидна характеристика, която разкрива графичния произход на устройството, са модулите за четене на 2D и 3D текстури с поддръжка на билинейна интерполация. Те се използват широко в GPU програми, тъй като осигуряват ускорено и опростено четене на масиви от данни само за четене. Едно от стандартните поведения на GPU приложение е да чете масиви от изходни данни, да ги обработва в изчислителните ядра и да записва резултата в друг масив, който след това се прехвърля обратно към CPU. Тази схема е стандартна и често срещана, защото е удобна за GPU архитектурата. Задачи, които изискват интензивно четене и запис в един голям регион на глобалната памет, като по този начин съдържат зависимости от данни, са трудни за паралелизиране и ефективно изпълнение на GPU. Освен това тяхната производителност ще зависи до голяма степен от латентността на глобалната памет, която е много висока. Но ако задачата е описана от модела „четене на данни – обработка – запис на резултата“, тогава почти сигурно можете да получите голям тласък от изпълнението й на GPU.

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

Въпреки че размерът на кешовете L1-L2 в картите на Nvidia и AMD е приблизително подобен, което очевидно се дължи на изискванията за оптималност по отношение на игровата графика, латентността на достъпа до тези кеши варира значително. Nvidia има по-висока латентност на достъпа, а кешовете на текстурите в GeForce основно помагат за намаляване на натоварването на шината на паметта, вместо директно да ускоряват достъпа до данни. Това не се забелязва в графичните програми, но е важно за програмите с общо предназначение. В Radeon латентността на текстурния кеш е по-ниска, но латентността на локалната памет на минипроцесорите е по-висока. Можем да дадем следния пример: за оптимално умножение на матрици на карти на Nvidia е по-добре да използвате локална памет, зареждайки матрицата там блок по блок, а за AMD е по-добърразчитайте на текстурен кеш с ниска латентност, като четете матрични елементи, ако е необходимо. Но това вече е доста фина оптимизация и за алгоритъм, който вече е фундаментално прехвърлен към GPU.

Тази разлика се проявява и при използване на 3D текстури. Един от първите GPU изчислителни бенчмаркове, който показа сериозно предимство за AMD, използва 3D текстури, тъй като работи с триизмерен масив от данни. И латентността на достъпа до текстури в Radeon е значително по-бърза, а 3D случаят е допълнително по-оптимизиран хардуерно.

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

Ограничения за серия Radeon 47xx

В това семейство поддръжката за GPU изчисления е непълна. Могат да се отбележат три важни момента. Първо, няма локална памет, тоест тя е физически там, но няма универсалния достъп, изискван от съвременния стандарт на GPU програми. Той се емулира в софтуера в глобалната памет, което означава, че използването му, за разлика от пълнофункционалния GPU, няма да донесе ползи. Втората точка е ограничената поддръжка за различни инструкции за операции с атомарна памет и инструкции за синхронизиране. И третата точка е доста малкият размер на кеша на инструкциите: започвайки от определен размер на програмата, скоростта се забавя значително. Има и други малки ограничения. Можем да кажем, че само програми, идеално подходящи за GPU, ще работят добре на тази видеокарта. Въпреки че в прости тестови програми, които работят само с регистри, видеокартата може да покаже добри резултати в Gigaflops, е проблематично да се програмира ефективно нещо сложно за нея.

Предимства и недостатъци на Evergreen

Ако сравните продуктите на AMD и Nvidia, от гледна точка на GPU изчисленията, серията 5xxx изглежда като много мощен GT200. Толкова мощен, че превъзхожда Ферми по върхова производителност около два и половина пъти. Особено след като параметрите на новите видеокарти на Nvidia бяха намалени и броят на ядрата беше намален. Но въвеждането на L2 кеш във Fermi опростява внедряването на някои алгоритми на GPU, като по този начин разширява обхвата на GPU. Интересното е, че за програмите CUDA, които бяха добре оптимизирани за предишното поколение GT200, архитектурните иновации на Fermi често не правеха нищо. Те се ускориха пропорционално на увеличаването на броя на изчислителните модули, тоест по-малко от два пъти (за числа с единична точност) или дори по-малко, защото честотната лента на паметта не се увеличи (или по други причини).

И в задачи, които са добре пригодени за архитектурата на GPU и имат подчертан векторен характер (например умножение на матрици), Radeon показва производителност, относително близка до теоретичния връх и превъзхожда Fermi. Да не говорим за многоядрените процесори. Особено при проблеми с числа с единична точност.

Но Radeon има по-малка площ на матрицата, по-малко разсейване на топлината, консумация на енергия, по-висок добив и съответно по-ниска цена. И директно в задачите за 3D графика печалбата на Fermi, ако изобщо съществува, е много по-малка от разликата в кристалната площ. Това до голяма степен се дължи на факта, че изчислителната архитектура Radeon с 16 изчислителни единици на минипроцесор, размер на вълновия фронт от 64 нишки и VLIW векторни инструкции е отлична за основната си задача - изчислителни графични шейдъри. За по-голямата част от обикновените потребители производителността и цената на игрите са приоритет.

От професионална, научна софтуерна гледна точка, архитектурата Radeon осигурява най-добрата цена-производителност, производителност на ват и абсолютна производителност при задачи, които по своята същност са добре съчетани с GPU архитектури, позволявайки паралелизиране и векторизация.

Например, в напълно паралелна, лесно векторизирана задача за избор на ключ, Radeon е няколко пъти по-бърз от GeForce и няколко десетки пъти по-бърз от CPU.

Това е в съответствие с общата концепция на AMD Fusion, според която графичните процесори трябва да допълват процесора и в бъдеще да бъдат интегрирани в самото ядро ​​на процесора, точно както преди това математическият копроцесор беше преместен от отделен чип към ядрото на процесора (това се случи преди двадесет години, преди появата на първите процесори Pentium). GPU ще бъде интегрирано графично ядро ​​и векторен копроцесор за стрийминг задачи.

Radeon използва умна техника за смесване на инструкции от различни вълнови фронтове, когато се изпълняват от функционални модули. Това е лесно да се направи, тъй като инструкциите са напълно независими. Принципът е подобен на конвейерното изпълнение на независими инструкции от съвременните процесори. Очевидно това прави възможно ефективното изпълнение на сложни, многобайтови векторни VLIW инструкции. В CPU това изисква усъвършенстван планировчик за идентифициране на независими инструкции или използването на технологията Hyper-Threading, която също доставя на CPU умишлено независими инструкции от различни нишки.

мярка 0лента 1мярка 2мярка 3мярка 4мярка 5лента 6лента 7VLIW модул
фронт на вълната 0фронт на вълната 1фронт на вълната 0фронт на вълната 1фронт на вълната 0фронт на вълната 1фронт на вълната 0фронт на вълната 1
инстр. 0инстр. 0инстр. 16инстр. 16инстр. 32инстр. 32инстр. 48инстр. 48VLIW0
инстр. 1VLIW1
инстр. 2VLIW2
инстр. 3VLIW3
инстр. 4VLIW4
инстр. 5VLIW5
инстр. 6VLIW6
инстр. 7VLIW7
инстр. 8VLIW8
инстр. 9VLIW9
инстр. 10VLIW10
инстр. единадесетVLIW11
инстр. 12VLIW12
инстр. 13VLIW13
инстр. 14VLIW14
инстр. 15VLIW15

128 инструкции на два вълнови фронта, всеки от които се състои от 64 операции, се изпълняват от 16 VLIW модула в осем тактови цикъла. Получава се преплитане и всеки модул в действителност има два тактови цикъла, за да изпълни цяла инструкция, при условие че на втория тактов цикъл той започва да изпълнява нова паралелно. Това вероятно помага за бързото изпълнение на VLIW инструкция като a1×a2+b1×b2+c1×c2+d1×d2, тоест изпълнение на осем такива инструкции в осем тактови цикъла. (Формално се оказва, че е по един на такт.)

Nvidia явно няма такава технология. И при отсъствието на VLIW, високата производителност при използване на скаларни инструкции изисква високочестотна работа, която автоматично увеличава разсейването на топлината и поставя високи изисквания към процеса (за да принуди веригата да работи на по-висока честота).

Недостатъкът на Radeon от гледна точка на GPU изчисленията е голямата му неприязън към разклонения. Графичните процесори обикновено не предпочитат разклоняването поради технологията, описана по-горе за изпълнение на инструкции: наведнъж в група нишки с един програмен адрес. (Между другото, тази техника се нарича SIMT: Single Instruction - Multiple Threads (една инструкция - много нишки), по аналогия със SIMD, където една инструкция изпълнява една операция с различни данни.) Radeon обаче не обича особено разклоняването: това се причинява от по-големия размер на снопа нишки. Ясно е, че ако програмата не е напълно векторна, тогава колкото по-голям е размерът на деформацията или фронта на вълната, толкова по-лошо, тъй като когато съседните нишки се разминават в своите програмни пътища, се формират повече групи, които трябва да бъдат изпълнени последователно (сериализирани). Да кажем, че всички нишки са разпръснати, тогава ако размерът на деформацията е 32 нишки, програмата ще работи 32 пъти по-бавно. А в случай на размер 64, както при Radeon, той е 64 пъти по-бавен.

Това е забележима, но не единствена проява на „враждебност“. Във видеокартите на Nvidia всеки функционален модул, иначе наричан CUDA ядро, има специален разклонителен процесор. А във видеокартите Radeon с 16 изчислителни модула има само два блока за управление на клона (те са премахнати от домейна на аритметичните блокове). Така че дори простата обработка на инструкция за условен скок, дори ако нейният резултат е еднакъв за всички нишки във фронта на вълната, отнема допълнително време. И скоростта пада.

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

Така че Radeon осигурява по-малка цялостна ефективност на програмиране, но осигурява по-добра цена/производителност в много случаи. С други думи, има по-малко програми, които могат да бъдат ефективно (изгодно) мигрирани от CPU към Radeon, отколкото има програми, които могат да работят ефективно на Fermi. Но тези, които могат да бъдат ефективно прехвърлени, ще работят по-ефективно на Radeon по много начини.

API за GPU изчисления

Самите технически характеристики на Radeon изглеждат привлекателни, въпреки че няма нужда да идеализираме и абсолютизираме GPU изчисленията. Но не по-малко важен за производителността е софтуерът, необходим за разработване и изпълнение на GPU програма - компилатори от език от високо ниво и време за изпълнение, тоест драйвер, който взаимодейства между частта от програмата, изпълнявана на CPU и GPU себе си. Това е дори по-важно, отколкото в случая с процесора: процесорът не се нуждае от драйвер, за да управлява трансфера на данни, а от гледна точка на компилатора, графичният процесор е по-претенциозен. Например, компилаторът трябва да се задоволи с минимален брой регистри, за да съхранява междинните резултати от изчисленията, а също така внимателно да интегрира извиквания на функции, отново използвайки минимум регистри. В края на краищата, колкото по-малко регистри използва дадена нишка, толкова повече нишки могат да бъдат стартирани и колкото по-пълно може да се зареди GPU, като по-добре се крие времето за достъп до паметта.

И софтуерната поддръжка за продуктите на Radeon все още изостава от развитието на хардуера. (За разлика от ситуацията с Nvidia, където пускането на хардуер беше забавено и продуктът беше пуснат в съкратена форма.) Съвсем наскоро компилаторът OpenCL, произведен от AMD, имаше бета статус с много недостатъци. Той генерира грешен код твърде често или отказва да компилира код от правилния изходен код, или самият той създава грешка и се срива. Едва в края на пролетта беше пусната версия с висока производителност. Също така не е без грешки, но има значително по-малко от тях и те са склонни да възникват в странични посоки, когато се опитвате да програмирате нещо на ръба на коректността. Например, те работят с типа uchar4, който дефинира 4-байтова четирикомпонентна променлива. Този тип е в спецификациите на OpenCL, но не си струва да работите с него на Radeon, защото регистрите са 128-битови: същите четири компонента, но 32-битови. И такава променлива uchar4 пак ще заема цял регистър, ще изисква само допълнителни операции за опаковане и достъп до отделни байтови компоненти. Компилаторът не трябва да има никакви грешки, но няма компилатори без недостатъци. Дори Intel Compiler след 11 версия има грешки при компилиране. Идентифицираните грешки се коригират в следващото издание, което ще бъде пуснато по-близо до есента.

Но все още има много неща, които се нуждаят от подобрение. Например, стандартният драйвер на Radeon GPU все още не поддържа GPU изчисления с помощта на OpenCL. Потребителят трябва да изтегли и инсталира допълнителен специален пакет.

Но най-важното е липсата на библиотеки с функции. За реални числа с двойна точност няма дори синус, косинус или степен. Е, това не е необходимо за събиране и умножение на матрици, но ако искате да програмирате нещо по-сложно, трябва да напишете всички функции от нулата. Или изчакайте нова версия на SDK. ACML (AMD Core Math Library) за фамилията Evergreen GPU с поддръжка за основни матрични функции трябва да бъде пуснат скоро.

В момента, според автора на статията, изглежда реалистично да се използва API Direct Compute 5.0 за програмиране на видеокарти Radeon, като естествено се вземат предвид ограниченията: съсредоточете се върху Windows платформа 7 и Windows Vista. Microsoft има богат опит в създаването на компилатори и можем да очакваме напълно функционална версия много скоро, Microsoft е пряко заинтересована от това. Но Direct Compute е фокусиран върху нуждите на интерактивните приложения: да се изчисли нещо и незабавно да се визуализира резултатът - например потокът течност върху повърхност. Това не означава, че не може да се използва само за изчисления, но това не е естественото му предназначение. Да кажем, че Microsoft не планира да добавя библиотечни функции към Direct Compute - само тези, които AMD в момента няма. Тоест, това, което сега може да бъде ефективно изчислено на Radeon - някои не много сложни програми - може да бъде имплементирано и на Direct Compute, което е много по-просто от OpenCL и трябва да е по-стабилно. Плюс това, той е напълно преносим и ще работи както на Nvidia, така и на AMD, така че трябва да компилирате програмата само веднъж, докато реализациите на OpenCL SDK на Nvidia и AMD не са напълно съвместими. (В смисъл, че ако разработите OpenCL програма на система AMD с помощта на AMD OpenCL SDK, тя може да не работи толкова лесно на Nvidia. Може да се наложи да компилирате същия текст с помощта на Nvidia SDK. И, разбира се, обратното .)

След това има много излишни функции в OpenCL, тъй като OpenCL е предназначен да бъде универсален език за програмиране и API за широк набор от системи. И GPU, и CPU, и Cell. Така че в случай, че просто трябва да напишете програма за типична потребителска система (процесор плюс видеокарта), OpenCL не изглежда да е „високо продуктивен“, така да се каже. Всяка функция има десет параметъра и девет от тях трябва да бъдат зададени на 0. И за да зададете всеки параметър, трябва да извикате специална функция, който също има параметри.

И най-важното текущо предимство на Direct Compute е, че потребителят не трябва да инсталира специален пакет: всичко, което е необходимо, вече е в DirectX 11.

Проблеми на развитието на GPU изчисленията

Ако вземем сферата на персоналните компютри, ситуацията е следната: няма много задачи, които изискват голяма изчислителна мощност и конвенционален двуядрен процесор силно липсва. Сякаш големи, ненаситни, но тромави чудовища бяха изпълзяли от морето на сушата, а на сушата нямаше почти нищо за ядене. И първичните обиталища на земната повърхност намаляват по размер, учейки се да консумират по-малко, както винаги се случва, когато има недостиг на природни ресурси. Ако имаше същата нужда от производителност сега, както преди 10-15 години, GPU изчисленията биха били голям хит. И така проблемите със съвместимостта и относителната сложност на програмирането на GPU излизат на преден план. По-добре е да напишете програма, която работи на всички системи, отколкото програма, която работи бързо, но работи само на GPU.

Перспективите за GPU са малко по-добри по отношение на употребата им в професионални приложения и сектора на работните станции, тъй като там има по-голяма нужда от производителност. Има плъгини за 3D редактори с поддръжка на GPU: например за изобразяване чрез проследяване на лъчи - да не се бърка с обикновено изобразяване на GPU! Нещо се появява и за 2D и редактори на презентации, с по-бързо създаване на сложни ефекти. Програмите за обработка на видео също постепенно получават поддръжка на GPU. Горните задачи, поради техния паралелен характер, се вписват добре в архитектурата на GPU, но сега е създадена много голяма кодова база, отстранени са грешки и е оптимизирана за всички възможности на CPU, така че ще отнеме време, за да се появят добри реализации на GPU .

В този сегмент също има такива слаби страниГрафичните процесори имат ограничено количество видео памет - приблизително 1 GB за обикновените графични процесори. Един от основните фактори, които намаляват производителността на GPU програмите, е необходимостта от обмен на данни между CPU и GPU по бавна шина и поради ограничената памет трябва да се прехвърлят повече данни. И тук концепцията на AMD за комбиниране на GPU и CPU в един модул изглежда обещаваща: можете да пожертвате високата честотна лента на графичната памет в името на леката и лесен достъпкъм споделена памет, също с по-ниска латентност. Тази висока честотна лента на текущата DDR5 видео памет е много по-търсена директно от графични програми, отколкото от повечето GPU изчислителни програми. Като цяло, споделената памет на GPU и CPU просто значително ще разшири обхвата на GPU, правейки възможно използването на неговите изчислителни възможности в малки подзадачи на програми.

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

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

Една от най-скритите функции напоследък Актуализация на Windows 10, е възможността да проверите кои приложения използват вашия графичен процесор (GPU). Ако някога сте отваряли диспечера на задачите, вероятно сте разглеждали използването на вашия процесор, за да видите кои приложения използват най-много процесора. IN последни актуализациидобави подобна функция, но за GPU графични процесори. Това ви помага да разберете колко интензивни са вашият софтуер и игри на вашия графичен процесор, без да се налага да изтегляте софтуер на трети страни. Има още една интересна функция, която помага да разтоварите вашия процесор към графичния процесор. Препоръчвам да прочетете как да изберете.

Защо нямам GPU в диспечера на задачите?

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

  1. Щракнете върху " Започнете“ и напишете в търсенето dxdiagза да стартирате инструмента за диагностика на DirectX.
  2. Отидете в раздела екран",вдясно в колоната " драйвери"трябва да имаш WDDM моделповече от 2.0 версия за използване на GPU графики в диспечера на задачите.

Активиране на GPU графика в диспечера на задачите

За да видите използването на GPU за всяко приложение, трябва да отворите диспечера на задачите.

  • Натиснете комбинация от бутони Ctrl + Shift + Escза да отворите диспечера на задачите.
  • Щракнете с десния бутон върху полето „празно“ в диспечера на задачите име"и проверете от падащото меню GPUМожете също да отбележите GPU ядроза да видите кои програми го използват.
  • Сега в диспечера на задачите графиката на GPU и ядрото на GPU се виждат отдясно.


Вижте цялостната производителност на GPU

Можете да наблюдавате цялостното използване на GPU, за да го наблюдавате при тежки натоварвания и да го анализирате. В този случай можете да видите всичко необходимо в раздела " производителност“ като изберете графичен процесор.


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


Каква програма е необходима за копаене на криптовалута? Какво да имате предвид при избора на минно оборудване? Как да копаете Bitcoin и Ethereum с помощта на видеокарта на компютър?

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

Денис Кудерин е с вас, експерт на списание HeatherBober по въпросите на финансите и тяхното компетентно умножаване. Ще ти кажа какво е копаене на видео картав 17-18, как да изберем правилното устройство за печелене на криптовалута и защо копаенето на биткойни на видеокарти вече не е печелившо.

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

1. Копаене на видеокарта - лесни пари или неоправдани разходи

Добрата видеокарта не е само адаптер цифрови сигнали, но също мощен процесор, способни да решават сложни изчислителни проблеми. И включително - изчисляване на хеш код за блокова верига (блокчейн). Това прави графичните карти идеалният инструмент за минен– копаене на криптовалута.

Въпрос:Защо процесор за видеокарта? В крайна сметка всеки компютър има процесор? Не е ли логично да се правят изчисления с него?

Отговор:Процесорът на CPU може също да изчислява блокчейни, но го прави стотици пъти по-бавно от процесора на видеокартата (GPU). И не защото единият е по-добър, другият е по-лош. Те просто имат различни принципи на работа. И ако комбинирате няколко видеокарти, мощността на такъв компютърен център ще се увеличи няколко пъти повече.

За тези, които нямат представа как се добиват цифрови пари, малка образователна програма. Минен - основният, а понякога и единственият начин за производство на криптовалута.

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

В допълнение към изчисленията на кода, майнингът изпълнява още няколко важни задачи:

  • поддръжка за децентрализация на системата:липсата на привързаност към сървърите е в основата на блокчейна;
  • потвърждение на транзакцията– без копаене операциите няма да могат да влязат в нов блок;
  • формиране на нови блокове на системата– и въвеждането им в единен регистър за всички компютри.

Бих искал веднага да охладя жарта на начинаещите миньори: процесът на копаене става все по-труден всяка година. Например използването на видеокарта отдавна е нерентабилно.

Само заклети аматьори сега копаят топки-биялки с помощта на графични процесори, тъй като видеокартите са заменени от специализирани процесори ASIC. Тези чипове консумират по-малко енергия и са по-ефективни в изчислително отношение. Всички са добри, но струват около порядък 130-150 хиляди рубли .

Мощен модел Antminer S9

За щастие на копачите, Bitcoin не е единствената криптовалута на планетата, а една от стотиците. Други цифрови пари – Ethereum, Zcash, Expanse, dogecoinsи т.н. Все още е изгодно да копаете с видеокарти. Възнаграждението е стабилно, а оборудването се изплаща за приблизително 6-12 месеца.

Но има и друг проблем - недостигът на мощни видеокарти.. Шумът около криптовалутата доведе до повишаване на цената на тези устройства. Купуването на нова видеокарта, подходяща за копаене в Русия, не е толкова лесно.

Начинаещите миньори трябва да поръчват видео адаптери от онлайн магазини (включително чуждестранни) или да купуват използвани стоки. Между другото, не препоръчвам да правите последното: минното оборудване остарява и се износва с фантастична скорост.

На Avito дори продават цели ферми за копаене на криптовалута.

Има много причини: някои копачи вече са „играли достатъчно“ в копаене на цифрови пари и са решили да се включат в по-печеливши операции с криптовалута (по-специално борсова търговия), други осъзнават, че не са в състояние да се конкурират с мощни китайски клъстери, работещи на основа на електроцентрали. Други пък преминаха от видеокарти към ASIC.

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

Друго нещо е, че има все повече играчи на това поле. Освен това общият брой цифрови монети не се увеличава от това. Напротив, наградата става по-малка.

И така, преди шест години наградата за един блокчейн от биткойн мрежата беше равна на 50 монети, сега е просто 12,5 BTK. Сложността на изчисленията се е увеличила 10 хиляди пъти. Вярно е, че стойността на самия биткойн се е увеличила многократно през това време.

2. Как да копаете криптовалута с помощта на видеокарта - инструкции стъпка по стъпка

Има две опции за копаене - самостоятелно и като част от пул. Трудно е да се прави соло копаене – трябва да имате огромно количество хешрейт(енергийни единици), така че започнатите изчисления да имат вероятност за успешно завършване.

99% от всички миньори работят в басейни(на английски pool – басейн) – общности, занимаващи се с разпределяне на компютърни задачи. Съвместното копаене елиминира фактора на случайността и гарантира стабилни печалби.

Един миньор, когото познавам, каза следното за това: Добивам от 3 години, през което време не съм общувал с никой, който копае сам.

Такива златотърсачи са подобни на златотърсачите от 19 век. Можете да търсите с години своя къс самородно злато (в нашия случай биткойн) и пак да не го намерите. Тоест блокчейнът никога няма да бъде затворен, което означава, че няма да получите никаква награда.

„Самотните ловци“ имат малко по-добър шанс за етер и някои други крипто монети.

Поради уникалния алгоритъм за криптиране, ETH не се копае с помощта на специални процесори (те все още не са измислени). За това се използват само видео карти. Много фермери на нашето време все още оцеляват за сметка на Ethereum и други алткойни.

Една видеокарта няма да е достатъчна за създаване на пълноценна ферма: 4 броя – “издръжка” за миньорразчитайки на стабилни печалби. Също толкова важна е мощната охладителна система за видео адаптери. И не изпускайте от поглед такъв разход като сметките за електричество.

Инструкциите стъпка по стъпка ще ви предпазят от грешки и ще ускорят настройката на процеса.

Стъпка 1. Изберете пул

Най-големите пулове за криптовалута в света се намират в Китай, както и в Исландия и САЩ. Формално тези общности нямат държавна принадлежност, но сайтовете за басейни на руски език са рядкост в Интернет.

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

Ние избираме басейн по следните критерии:

  • производителност;
  • работни часове;
  • слава сред миньорите на криптовалута;
  • наличие на положителни отзиви на независими форуми;
  • удобство при теглене на пари;
  • размер на комисионната;
  • принцип на изчисляване на печалбата.

Ежедневно се случват промени на пазара на криптовалута. Това се отнася и за скоковете на обменния курс и появата на нови цифрови пари - вилицибиткойн. Случват се и глобални промени.

Така наскоро стана известно, че етерът в близко бъдеще ще премине към фундаментално различна система за разпределение на печалбата. Накратко, доходите в мрежата на Etherium ще се печелят от копачи, които имат „много кетсе“, тоест монети, а начинаещите копачи ще трябва или да затворят магазина, или да преминат към други пари.

Но такива „малки неща“ никога не са спирали ентусиастите. Освен това има програма, наречена Profitable Pool. Той автоматично проследява най-печелившите алткойни за копаене в момента. Има и услуга за търсене на самите басейни, както и техните оценки в реално време.

Стъпка 2. Инсталирайте и конфигурирайте програмата

След като се регистрирате на уебсайта на басейна, трябва да изтеглите специална програма за копаене - не изчислявайте кода ръчно с помощта на калкулатор. Има и достатъчно такива програми. За биткойн това е - 50 миньорили CGMiner, за излъчване – Ethminer.

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

Стъпка 3. Регистрирайте портфейла

Ако все още нямате Bitcoin портфейл или Ethereum хранилище, трябва да ги регистрирате. Изтегляме портфейли от официални сайтове.

Понякога самите басейни оказват помощ по този въпрос, но не безплатно.

Стъпка 4. Стартирайте майнинга и наблюдавайте статистиката

Остава само да стартирате процеса и да изчакате първите разписки. Не забравяйте да изтеглите помощна програма, която ще следи състоянието на основните компоненти на вашия компютър - натоварване, прегряване и т.н.

Стъпка 5. Изтеглете криптовалута

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

Как да конвертирате цифрова валута във фиатна валута?Въпрос, достоен за отделна статия. Накратко най-много бърз начин- обменни бюра. Те вземат процент за услугите си, а вашата задача е да намерите най-изгодната цена с минимална комисионна. Професионална услуга за сравнение на топлообменници ще ви помогне да направите това.

– най-добрият ресурс от този вид в RuNet. Този мониторинг сравнява представянето на повече от 300 обменни бюра и намира най-добрите котировки за валутните двойки, които ви интересуват. Освен това услугата посочва резервите на криптовалута в касата. Списъците за наблюдение съдържат само доказани и надеждни обменни услуги.

3. Какво да търсите при избора на видеокарта за копаене

Трябва да изберете видеокарта разумно. Първият, който попаднете, или този, който вече е на вашия компютър, също ще копае, но тази мощност ще бъде незначителна дори за етери.

Основните показатели са както следва: производителност (мощност), консумация на енергия, охлаждане, перспективи за овърклок.

1) Мощност

Тук всичко е просто - колкото по-висока е производителността на процесора, толкова по-добре за изчисляване на хеш кода. Отлична производителност осигуряват карти с капацитет на паметта над 2 GB. И изберете устройства с 256-битова шина. 128-битовите не са подходящи за тази цел.

2) Консумирана мощност

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

3) Охлаждане

Стандартният се състои от 4-16 карти. Той произвежда прекомерно количество топлина, което е вредно за желязото и нежелано за самия фермер. Да живееш и работиш в едностаен апартамент без климатик ще бъде, меко казано, неудобно.

Висококачественото охлаждане на процесора е незаменимо условие за успешен добив

Ето защо, когато избирате две карти с еднаква производителност, дайте предпочитание на тази с индикатор за по-малка топлинна мощност (TDP) . Най-добрите параметри на охлаждане се демонстрират от картите Radeon. Същите тези устройства работят по-дълго от всички останали карти в активен режим без износване.

Допълнителните охладители не само ще премахнат излишната топлина от процесорите, но и ще удължат живота им.

4) Възможност за овърклок

Овърклокът е принудително увеличаване на производителността на видеокартата. Възможността за „овърклокване на картата“ зависи от два параметъра – Честоти на GPU и честоти на видео паметта. Това са тези, които ще овърклокнете, ако искате да увеличите изчислителната мощност.

Кои видео карти да взема?Ще ви трябват устройства последно поколениеили поне графични ускорители пуснати не по-рано от 2-3 години. Миньорите използват карти AMD Radeon, Nvidia, GeForce GTX.

Разгледайте таблицата за изплащане на видеокарти (данните са актуални към края на 2017 г.):

4. Къде да закупите видеокарта за копаене – преглед на ТОП 3 магазина

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

Нашият преглед ще ви помогне най-добри точкионлайн продажби.

1) Топкомпютър

Московски хипермаркет, специализиран в компютърна и домакинска техника. Работи на пазара повече от 14 години, като доставя стоки от цял ​​свят почти на цени на производителя. Има услуга за бърза доставка, безплатна за московчани.

Към момента на писане има карти в продажба AMD, Nvidia(8 Gb) и други разновидности, подходящи за копаене.

2) Mybitcoinshop

Специален магазин, търговия изключително със стоки за добив. Тук ще намерите всичко необходимо за изграждане на домашна ферма - видео карти с необходимата конфигурация, захранвания, адаптери и дори ASIC миньори (за ново поколение миньори). Има платена доставка и вземане от склад в Москва.

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

3) Ship Shop America

Покупка и доставка на стоки от САЩ. Посредническа компания за тези, които се нуждаят от наистина изключителни и авангардни продукти за копаене.

Директен партньор на водещия производител на видео карти за игри и майнинг – Nvidia. Максималният период на изчакване на стоки е 14 дни.

5. Как да увеличите доходите от копаене на видеокарта - 3 полезни съвета

Нетърпеливите читатели, които искат да започнат копаене точно сега и да получават доход от утре сутринта, със сигурност ще попитат - колко печелят миньорите?

Печалбите зависят от оборудването, курса на криптовалутата, ефективността на пула, мощността на фермата, хешрейта и куп други фактори. Някои успяват да получат до месечно 70 000 рубли , други са доволни 10 доларапрез Седмица. Това е нестабилен и непредвидим бизнес.

Полезни съвети ще ви помогнат да увеличите приходите си и да оптимизирате разходите си.

Ако копаете валута, чиято цена бързо расте, ще спечелите повече. Например етерът сега струва около 300 долара, Биткойн – повече 6000 . Но трябва да вземете предвид не само текущата стойност, но и темпа на растеж през седмицата.

Съвет 2. Използвайте калкулатор за копаене, за да изберете оптималния хардуер

Калкулатор за копаене на уебсайт на пул или друга специализирана услуга ще ви помогне да изберете оптималната програма и дори видеокарта за копаене.

Никога не може да има твърде много ядра...

Съвременните графични процесори са чудовищни, бързи зверове, способни да дъвчат гигабайти данни. Човекът обаче е коварен и колкото и да расте изчислителната мощност, той измисля все по-сложни проблеми, така че идва моментът, в който с тъга трябва да признаем, че е нужна оптимизация 🙁

Тази статия описва основните понятия, за да улесни навигирането в теорията на оптимизацията на gpu и основните правила, така че тези понятия да трябва да се разглеждат по-рядко.

Причини, поради които GPU са ефективни за работа с големи количества данни, които изискват обработка:

  • имат големи възможности за паралелно изпълнение на задачи (много, много процесори)
  • висока честотна лента на паметта

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

Една от задачите за оптимизация е да се използва максимална пропускателна способност - да се увеличи производителността пропускателна способност(в идеалния случай трябва да е равна на честотната лента на паметта).

За да подобрите използването на честотната лента:

  • увеличете количеството информация - използвайте максимално честотната лента (например всяка нишка работи с float4)
  • намаляване на латентността - забавяне между операциите

Латентност– периодът от време между моментите, в които контролерът е поискал конкретна клетка от паметта, и момента, в който данните са станали достъпни за процесора за изпълнение на инструкции. Не можем да повлияем по никакъв начин на самото забавяне - тези ограничения са налице на хардуерно ниво. Благодарение на това забавяне процесорът може да обслужва едновременно няколко нишки - докато нишката A е поискала да му бъде разпределена памет, нишката B може да изчисли нещо, а нишката C може да изчака, докато пристигнат исканите данни.

Как да намалите забавянето, ако се използва синхронизация:

  • намаляване на броя на нишките в блок
  • увеличаване на броя на блоковите групи

Пълно използване на GPU ресурсите – GPU Occupancy

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

Изчислителната мощност на графичния процесор е стотици гладни за изчисления процесори при създаване на програма - ядрото - тежестта на разпределението на натоварването пада върху плещите на програмиста. Грешка може да остави голяма част от тези ценни ресурси бездействащи. Сега ще обясня защо. Ще трябва да започнем отдалеч.

Нека ви напомня тази деформация ( изкривяване в терминологията на NVidia, вълнов фронт – в терминологията на AMD) е набор от нишки, които едновременно изпълняват една и съща функция на ядрото на процесора. Нишките, обединени от програмиста в блокове, се разделят на деформации от планировчик на нишки (отделно за всеки мултипроцесор) - докато една деформация работи, втората чака обработка на заявки за памет и т.н. Ако някои от нишките на деформация все още извършват изчисления, докато други вече са направили всичко, което са могли, има неефективно използване на изчислителния ресурс - популярно наричан празен капацитет.

Всяка точка на синхронизация, всеки клон на логиката може да генерира такава празна ситуация. Максималната дивергенция (разклоняване на логиката на изпълнение) зависи от размера на деформацията. За NVidia GPU е 32, за AMD е 64.

За да намалите времето за престой на мултипроцесора по време на изпълнение на warp:

  • минимизирайте времето за изчакване на бариера
  • минимизиране на различията в логиката на изпълнение във функцията на ядрото

За ефективно решениеЗа този проблем има смисъл да разберете как се образуват изкривявания (за случая с няколко измерения). Всъщност редът е прост - първо в X, след това в Y и накрая в Z.

ядрото се стартира с блокове с размер 64x16, нишките са разделени на изкривявания в ред X, Y, Z - т.е. първите 64 елемента са разделени на две основи, след това втората и т.н.

Ядрото работи с 16x64 блока. Първият и вторият 16 елемент се добавят към първата основа, третият и четвъртият - към втората основа и т.н.

Как да намалите разминаването (не забравяйте, че разклоняването не винаги е причина за критична загуба на производителност)

  • когато съседните потоци имат различни пътища за изпълнение - има много условия и преходи по тях - потърсете начини за преструктуриране
  • потърсете небалансирано натоварване от нишки и решително го премахнете (това е, когато не само имаме условия, но поради тези условия, първата нишка винаги изчислява нещо, а петата не отговаря на това условие и е неактивна)

Как да се възползвате максимално от ресурсите на GPU

GPU ресурсите, за съжаление, също имат своите ограничения. И, строго погледнато, преди да стартирате функцията на ядрото, има смисъл да се определят ограниченията и да се вземат предвид тези ограничения при разпределяне на товара. Защо е важно?

Видеокартите имат ограничения за общия брой нишки, които един мултипроцесор може да изпълни, максималния брой нишки в един блок, максималния брой деформации на един процесор, ограничения за различни видове памет и т.н. Цялата тази информация може да бъде поискана или програмно, чрез съответния API, или преди това с помощта на помощни програми от SDK. (deviceQuery модули за NVidia устройства, CLINfo - за AMD видео карти).

Генерална репетиция:

  • броят на нишките блокове/работни групи трябва да е кратен на броя на поточните процесори
  • размерът на блока/работната група трябва да бъде кратен на размера на деформацията

Трябва да се има предвид, че абсолютният минимум е 3-4 изкривявания/wayfronts, въртящи се едновременно на всеки процесор; мъдрите ръководства съветват да се започне от разглеждането на най-малко седем wayfronts. В същото време не забравяйте хардуерните ограничения!

Поддържането на всички тези подробности в главата ви бързо става скучно, така че за изчисляване на заетостта на графичния процесор NVidia предложи неочакван инструмент - Excel(!) калкулатор, пълен с макроси. Там можете да въведете информация за максималния брой нишки за SM, броя на регистрите и размера на общата (споделена) памет, налична на поточния процесор, и използваните параметри за стартиране на функцията - и показва ефективността на използването на ресурсите като процент (а вие си късате косата, осъзнавайки, че за да използвате всички ядра, ви липсват регистри).

Информация за употреба:
http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/#calculating-occupancy

Операции с GPU и памет

Видеокартите са оптимизирани за 128-битови операции с памет. Тези. в идеалния случай всяка манипулация на паметта трябва в идеалния случай да промени 4 четирибайтови стойности наведнъж. Основният проблем за програмиста е, че съвременните GPU компилатори не знаят как да оптимизират такива неща. Това трябва да се направи директно във функционалния код и средно води до част от процента увеличение на производителността. Честотата на заявките за памет има много по-голямо влияние върху производителността.

Проблемът е следният: всяка заявка връща част от данните, която е кратна на 128 бита по размер. И всяка нишка използва само една четвърт от него (в случай на обикновена четирибайтова променлива). Когато съседни нишки работят едновременно с данни, разположени последователно в клетките на паметта, това намалява общия брой достъпи до паметта. Това явление се нарича комбинирани операции за четене и запис ( обединен достъп – добре! както чета, така и пиша) – и с правилната организация на кода ( кратък достъп до непрекъсната част от паметта – лошо!) може значително да подобри производителността. Когато организирате основния си - запомнете - непрекъснат достъп - в рамките на елементите на един ред памет, работата с елементи на колона вече не е толкова ефективна. Искате повече подробности? Хареса ми този pdf - или google за „ техники за обединяване на паметта “.

Челната позиция в категорията “bottleneck” се заема от друга операция на паметта – копиране на данни от паметта на хоста в GPU . Копирането не се случва така или иначе, а от област на паметта, специално разпределена от драйвера и системата: когато има заявка за копиране на данни, системата първо копира тези данни там и едва след това ги качва в GPU. Скоростта на пренос на данни е ограничена от честотната лента на шината PCI Express xN (където N е броят на линиите за данни), чрез които съвременните видеокарти комуникират с хоста.

Въпреки това, ненужното копиране на бавна памет на хоста понякога е неоправдана цена. Решението е използването на т.нар фиксирана памет – специално маркирана област на паметта, така че операционната система да не може да извършва никакви операции с нея (например да я изхвърли в суап/преместване по свое усмотрение и т.н.). Прехвърлянето на данни от хоста към видеокартата се извършва без участие операционна система- асинхронно, чрез DMA (директен достъп до паметта).

И накрая, малко повече за паметта. Споделената памет на мултипроцесора обикновено е организирана под формата на банки памет, съдържащи 32-битови думи - данни. Броят на банките, според добрата традиция, варира от едно GPU поколение до друго - 16/32 Ако всяка нишка има достъп до отделна банка за данни, всичко е наред. В противен случай получаваме няколко заявки за четене/запис към една банка и получаваме конфликт ( конфликт на банка споделена памет). Такива конфликтни извиквания се сериализират и следователно се изпълняват последователно, а не паралелно. Ако всички нишки имат достъп до една банка, се използва отговор „излъчване“ ( излъчване) и няма конфликт. Има няколко начина за ефективно справяне с конфликти за достъп, хареса ми описание на основните техники за отстраняване на конфликти при достъп до банки с памет – .

Как да направим математическите операции още по-бързи? Не забравяйте, че:

  • Изчисленията с двойна точност са операция с голямо натоварване с fp64 >> fp32
  • константите във формата 3.13 в кода по подразбиране се интерпретират като fp64, ако 3.14f не е изрично указано
  • За да оптимизирате математиката, би било добра идея да проверите ръководствата, за да видите дали компилаторът има някакви флагове
  • Производителите включват функции в своите SDK, които използват функциите на устройството за постигане на производителност (често за сметка на преносимостта)

Има смисъл разработчиците на CUDA да обърнат голямо внимание на концепцията cuda потоккоето ви позволява да изпълнявате няколко функции на ядрото на едно устройство наведнъж или да комбинирате асинхронно копиране на данни от хоста към устройството, докато изпълнявате функции. OpenCL все още не предоставя такава функционалност :)

Скрап за профилиране:

NVifia Visual Profiler е интересна помощна програма, която анализира както CUDA, така и OpenCL ядра.

P.S. По-обширно ръководство за оптимизация, мога да препоръчам да потърсите в Google всички видове ръководство за най-добри практики за OpenCL и CUDA.

  • ,