Обчислення на GPU: міфи та реальність. Задіємо можливості GPU для прискорення софту Додаток. Паралелізм та нова архітектура NVIDIA Fermi

💖 Подобається?Поділися з друзями посиланням

Якось довелося мені поговорити на комп'ютерному ринку з технічним директором однієї з численних компаній, що займаються продажем ноутбуків. Цей «фахівець» намагався з піною біля рота пояснити, яка конфігурація ноутбука мені потрібна. Головне посилання його монологу полягало в тому, що час центральних процесорів (CPU) закінчився, і зараз всі програми активно використовують обчислення на графічному процесорі (GPU), а тому продуктивність ноутбука повністю залежить від графічного процесора, а на CPU можна не звертати ніякого уваги. Зрозумівши, що сперечатися і намагатися навчити цього технічного директора абсолютно безглуздо, я не став марнувати часу і купив потрібний мені ноутбук в іншому павільйоні. Проте сам факт такої кричущої некомпетентності продавця мене вразив. Було б зрозуміло, якби він намагався обдурити мене як покупця. Не. Він щиро вірив у те, що говорив. Так, мабуть, маркетологи в NVIDIA і AMD не дарма їдять свій хліб, і їм таки вдалося навіяти деяким користувачам ідею про домінуючу роль графічного процесора в сучасному комп'ютері.

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

Взагалі, обчислення на GPU переважно виконуються на спеціалізованих HPC-системах для наукових розрахунків. А ось додатки користувача, в яких застосовуються обчислення на GPU, можна перерахувати на пальцях. При цьому слід відразу ж зазначити, що термін «обчислення на GPU» в даному випадку не цілком коректний і може ввести в оману. Справа в тому, що якщо програма використовує обчислення на GPU, то це зовсім не означає, що центральний процесор не діє. Обчислення на GPU передбачає перенесення навантаження з центрального процесора на графічний. Як правило, центральний процесор при цьому залишається завантаженим, а використання графічного процесора, поряд із центральним, дозволяє підвищити продуктивність, тобто скоротити час виконання завдання. Причому сам GPU тут виступає у ролі своєрідного співпроцесора для CPU, але в жодному разі не замінює його повністю.

Щоб розібратися, чому обчислення на GPU не є такою собі панацеєю і чому некоректно стверджувати, що їх обчислювальні можливості перевершують можливості CPU, необхідно усвідомити різницю між центральним і графічним процесором.

Відмінності в архітектурах GPU та CPU

Ядра CPU проектуються для виконання одного потоку послідовних інструкцій з максимальною продуктивністю, а GPU - для швидкого виконання дуже великої кількості потоків інструкцій, що паралельно виконуються. У цьому полягає принципова відмінність графічних процесорів від центральних. CPU є універсальним процесором або процесором загального призначення, оптимізованим для досягнення високої продуктивностієдиного потоку команд, що обробляє і цілі числа, та числа з плаваючою точкою. При цьому доступ до пам'яті з даними та інструкціями відбувається переважно випадковим чином.

Для підвищення продуктивності CPU вони проектуються так, щоб виконувати якнайбільше інструкцій паралельно. Наприклад, у ядрах процесора використовується блок позачергового виконання команд, що дозволяє переупорядковувати інструкції над порядку надходження, що дозволяє підняти рівень паралелізму реалізації інструкцій лише на рівні одного потоку. Проте це все одно не дозволяє здійснити паралельне виконання великої кількості інструкцій, та й накладні витрати на розпаралелювання інструкцій усередині ядра процесора виявляються дуже суттєвими. Саме тому процесори загального призначення мають невелику кількість виконавчих блоків.

Графічний процесор влаштований принципово інакше. Він спочатку проектувався до виконання величезної кількості паралельних потоків команд. Причому ці потоки команд розпаралелені спочатку, і жодних накладних витрат на розпаралелювання інструкцій у графічному процесорі просто немає. Графічний процесор призначений візуалізації зображення. Якщо говорити спрощено, то на вході він приймає групу полігонів, проводить усі необхідні операції та на виході видає пікселі. Обробка полігонів та пікселів незалежна, їх можна обробляти паралельно, окремо один від одного. Тому через паралельну організацію роботи в GPU використовується велика кількість виконавчих блоків, які легко завантажити, на відміну від послідовного потоку інструкцій для CPU.

Графічні та центральні процесори різняться і за принципами доступу до пам'яті. У GPU доступ до пам'яті легко передбачуваний: якщо з пам'яті читається текстура текстури, то через деякий час прийде термін і для сусідніх текселів. При записі відбувається те саме: якщо якийсь піксел записується у фреймбуфер, то через кілька тактів записуватиметься піксел, розташований поруч з ним. Тому GPU, на відміну від CPU, просто не потрібна кешпам'ять великого розміру, а для текстур потрібно лише кілька кілобайт. Різний і принцип роботи з пам'яттю у GPU та CPU. Так, всі сучасні GPU мають кілька контролерів пам'яті, та й сама графічна пам'ять швидша, тому графічні процесори мають набагато більше обільшу пропускну здатність пам'яті, порівняно з універсальними процесорами, що дуже важливо для паралельних розрахунків, оперують величезними потоками даних.

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

Самі ж виконавчі блоки займають в універсальному процесорі відносно небагато місця.

У графічному процесорі, навпаки, основну площу займають саме численні виконавчі блоки, що дозволяє одночасно обробляти кілька тисяч потоків команд.

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

Використовувати обчислювальну міць графічних процесорів для неграфічних завдань можливо, але тільки в тому випадку, якщо задача, що розв'язується, допускає можливість розпаралелювання алгоритмів на сотні виконавчих блоків, що є в GPU. Зокрема, виконання розрахунків на GPU показує відмінні результати у разі, коли та сама послідовність математичних операцій застосовується до великому обсягу даних. При цьому кращі результати досягаються, якщо відношення числа арифметичних інструкцій до звернень до пам'яті досить велике. Ця операція пред'являє менші вимоги до управління виконанням та не потребує використання ємної кешпам'яті.

Можна навести безліч прикладів наукових розрахунків, де перевага GPU над CPU у плані ефективності обчислень незаперечна. Так, безліч наукових додатків з молекулярного моделювання, газової динаміки, динаміки рідин та іншого відмінно пристосовано для розрахунків на GPU.

Отже, якщо алгоритм розв'язання задачі може бути розпаралелений на тисячі окремих потоків, то ефективність розв'язання такої задачі із застосуванням GPU може бути вищою, ніж її розв'язання засобами тільки процесора загального призначення. Однак не можна так просто взяти і перенести рішення якоїсь задачі з CPU на GPU, хоча б просто тому, що CPU та GPU використовують різні команди. Тобто коли програма пишеться під рішення на CPU, то застосовується набір команд х86 (або набір команд, сумісний із конкретною архітектурою процесора), а ось для графічного процесора використовуються вже зовсім інші набори команд, які знов-таки враховують його архітектуру та можливості. При розробці сучасних 3D-ігор застосовуються API DirectX і OrenGL, що дозволяють програмістам працювати з шейдерами та текстурами. Однак використання API DirectX і OrenGL для неграфічних обчислень на графічному процесорі - це не найкращий варіант.

NVIDIA CUDA та AMD APP

Саме тому, коли почали робити перші спроби реалізувати неграфічні обчислення на GPU (General Purpose GPU, GPGPU), виник компілятор BrookGPU. До створення розробникам доводилося отримувати доступом до ресурсів відеокарти через графічні API OpenGL чи Direct3D, що значно ускладнювало процес програмування, оскільки вимагало специфічних знань - доводилося вивчати принципи роботи з 3D-об'єктами (шейдерами, текстурами тощо.). Це стало причиною обмеженого застосування GPGPU в програмних продуктах. BrookGPU став своєрідним перекладачем. Ці потокові розширення до мови Сі приховували від програмістів тривимірний API і за його використання потреба у знаннях 3D-програмування майже відпала. Обчислювальні потужності відеокарт стали доступними програмістам у вигляді додаткового співпроцесора для паралельних розрахунків. Компілятор BrookGPU обробляв файл із кодом Cі та розширеннями, вибудовуючи код, прив'язаний до бібліотеки з підтримкою DirectX або OpenGL.

Багато в чому завдяки BrookGPU, компанії NVIDIA і ATI (нині AMD) звернули увагу на технологію обчислень загального призначення на графічних процесорах, що зароджується, і почали розробку власних реалізацій, що забезпечують прямий і більш прозорий доступ до обчислювальних блоків 3D-прискорювачів.

В результаті компанія NVIDIA розробила програмно-апаратну архітектуру паралельних обчислень CUDA (Compute Unified Device Architecture). Архітектура CUDA дає змогу реалізувати неграфічні обчислення на графічних процесорах NVIDIA.

Реліз публічної бета-версії CUDA SDK відбувся у лютому 2007 року. В основі API CUDA лежить спрощений діалект мови Сі. Архітектура CUDA SDK забезпечує програмістам реалізацію алгоритмів, здійснених на графічних процесорах NVIDIA, та включення спеціальних функцій до тексту програми на Cі. Для успішної трансляції коду цією мовою до складу CUDA SDK входить власний Сикомпілятор командного рядка nvcc компанії NVIDIA.

CUDA - це кросплатформне програмне забезпеченнядля таких операційних систем, як Linux, Mac OS X та Windows.

Компанія AMD (ATI) також розробила свою версію технології GPGPU, яка раніше називалася ATI Stream, а тепер – AMD Accelerated Parallel Processing (APP). Основу AMD APP складає відкритий індустріальний стандарт OpenCL (Open Computing Language). Стандарт OpenCL забезпечує паралелізм на рівні інструкцій та на рівні даних та є реалізацією техніки GPGPU. Це повністю відкритий стандарт, його використання не обкладається ліцензійними відрахуваннями. Зазначимо, що AMD APP та NVIDIA CUDA несумісні один з одним, проте, остання версія NVIDIA CUDA підтримує OpenCL.

Тестування GPGPU у відеоконвертерах

Отже, з'ясували, що з реалізації GPGPU на графічних процесорах NVIDIA призначено технологія CUDA, але в графічних процесорах AMD - API APP. Як зазначалося, використання неграфічних обчислень на GPU доцільно лише тому випадку, якщо вирішуване завдання то, можливо розпаралелена на безліч потоків. Однак більшість додатків користувача не задовольняють цьому критерію. Втім, є деякі винятки. Наприклад, більшість сучасних відеоконвертерів підтримують можливість використання обчислень на графічних процесорах NVIDIA та AMD.

Для того, щоб з'ясувати, наскільки ефективно використовуються обчислення на GPU в відеоконвертерах, ми відібрали три популярні рішення: Xilisoft Video Converter Ultimate 7.7.2, Wondershare Video Converter Ultimate 6.0.3.2 і Movavi Video Converter 10.2.1. Ці конвертери підтримують можливість використання графічних процесорів NVIDIA та AMD, причому у налаштуваннях відеоконвертерів можна вимкнути цю можливість, що дозволяє оцінити ефективність застосування GPU.

Для відеоконвертування ми застосовували три різні відеоролики.

Перший відеоролик мав тривалість 3 хв 35 с та розмір 1,05 Гбайт. Він був записаний у форматі зберігання даних (контейнер) mkv і мав такі характеристики:

  • відео:
    • формат - MPEG4 Video (H264),
    • роздільна здатність - 1920*um*1080,
    • режим бітрейту - Variable,
    • середній відеобітрейт – 42,1 Мбіт/с,
    • максимальний відеобітрейт – 59,1 Мбіт/с,
    • частота кадрів – 25 fps;
  • аудіо:
    • формат - MPEG-1 Audio,
    • аудіобітрейт - 128 Кбіт/с,
    • кількість каналів - 2,

Другий відеоролик мав тривалість 4 хв 25 с та розмір 1,98 Гбайт. Він був записаний у форматі зберігання даних (контейнер) MPG і мав такі характеристики:

  • відео:
    • формат - MPEG-PS (MPEG2 Video),
    • роздільна здатність - 1920*um*1080,
    • режим бітрейту – Variable.
    • середній відеобітрейт – 62,5 Мбіт/с,
    • максимальний відеобітрейт – 100 Мбіт/с,
    • частота кадрів – 25 fps;
  • аудіо:
    • формат - MPEG-1 Audio,
    • аудіобітрейт - 384 Кбіт/с,
    • кількість каналів - 2,

Третій відеоролик мав тривалість 3 хв 47 с та розмір 197 Мбайт. Він був записаний у форматі зберігання даних (контейнер) MOV і мав такі характеристики:

  • відео:
    • формат - MPEG4 Video (H264),
    • роздільна здатність - 1920*um*1080,
    • режим бітрейту - Variable,
    • відеобітрейт - 7024 Кбіт/с,
    • частота кадрів – 25 fps;
  • аудіо:
    • формат - AAC,
    • аудіобітрейт - 256 Кбіт/с,
    • кількість каналів - 2,
    • частота семплювання – 48 кГц.

Усі три тестових відеоролика конвертувалися з використанням відеоконвертерів у формат зберігання даних MP4 (кодек H.264) для перегляду на планшеті iPad 2. Роздільна здатність вихідного відеофайлу становила 1280*um*720.

Зазначимо, що ми не почали використовувати абсолютно однакові налаштування конвертування у всіх трьох конвертерах. Саме тому за часом конвертування некоректно порівнювати ефективність відеоконвертерів. Так, у відеоконвертері Xilisoft Video Converter Ultimate 7.7.2 для конвертування застосовувався пресет iPad 2 – H.264 HD Video. У цьому пресеті використовуються такі параметри кодування:

  • кодек – MPEG4 (H.264);
  • роздільна здатність - 1280*um*720;
  • частота кадрів – 29,97 fps;
  • відеобітрейт – 5210 Кбіт/с;
  • аудіокодек – AAC;
  • аудіобітрейт – 128 Кбіт/с;
  • кількість каналів – 2;
  • частота семплювання – 48 кГц.

У відеоконвертері Wondershare Video Converter Ultimate 6.0.3.2 використовувався пресет iPad 2 з наступними додатковими налаштуваннями:

  • кодек – MPEG4 (H.264);
  • роздільна здатність - 1280*um*720;
  • частота кадрів – 30 fps;
  • відеобітрейт – 5000 Кбіт/с;
  • аудіокодек – AAC;
  • аудіобітрейт – 128 Кбіт/с;
  • кількість каналів – 2;
  • частота семплювання – 48 кГц.

У конвертері Movavi Video Converter 10.2.1 застосовувався пресет iPad (1280*um*720, H.264) (*.mp4) з такими додатковими налаштуваннями:

  • відеоформат – H.264;
  • роздільна здатність - 1280*um*720;
  • частота кадрів – 30 fps;
  • відеобітрейт – 2500 Кбіт/с;
  • аудіокодек – AAC;
  • аудіобітрейт – 128 Кбіт/с;
  • кількість каналів – 2;
  • частота семплювання – 44,1 кГц.

Конвертування кожного вихідного відеоролика проводилося по п'ять разів на кожному відеоконвертері, причому з використанням як графічного процесора, так і тільки CPU. Після кожного конвертування комп'ютер перезавантажується.

У підсумку кожен відеоролик конвертувався десять разів у кожному відеоконвертері. Для автоматизації цієї рутинної роботибула написана спеціальна утилітаз графічним інтерфейсомдозволяє повністю автоматизувати процес тестування.

Конфігурація стенду для тестування

Стенд для тестування мав таку конфігурацію:

  • процесор - Intel Core i7-3770K;
  • материнська плата- Gigabyte GA-Z77X-UD5H;
  • чіпсет системної плати- Intel Z77 Express;
  • пам'ять – DDR3-1600;
  • обсяг пам'яті – 8 Гбайт (два модулі GEIL по 4 Гбайт);
  • режим роботи пам'яті – двоканальний;
  • відеокарта - NVIDIA GeForce GTX 660Ti (відеодрайвер 314.07);
  • накопичувач – Intel SSD 520 (240 Гбайт).

На стенді встановлювалась операційна система Windows 7 Ultimate (64-bit).

Спочатку ми провели тестування в штатному режимі роботи процесора та решти всіх компонентів системи. При цьому процесор Intel Core i7-3770K працював на штатній частоті 3,5 ГГц із активованим режимом Turbo Boost (максимальна частота процесора в режимі Turbo Boost становить 3,9 ГГц).

Потім ми повторили тестування, але при розгоні процесора до фіксованої частоти 4,5 ГГц (без використання режиму Turbo Boost). Це дозволило виявити залежність швидкості конвертування частоти процесора (CPU).

На наступному етапі тестування ми повернулися до штатних налаштувань процесора та повторили тестування вже з іншими відеокартами:

  • NVIDIA GeForce GTX 280 (драйвер 314.07);
  • NVIDIA GeForce GTX 460 (драйвер 314.07);
  • AMD Radeon HD6850 (драйвер 13.1).

Таким чином, відеоконвертування проводилося на чотирьох відеокарт різної архітектури.

Старша відеокарта NVIDIA GeForce 660Ti заснована на однойменному графічному процесорі з кодовим позначенням GK104 (архітектура Kepler), що виробляється за 28-нм техпроцесом. Цей графічний процесормістить 3540000000 транзисторів, а площа кристала становить 294 мм2.

Нагадаємо, що графічний процесор GK104 включає чотири кластери. графічної обробки(Graphics Processing Clusters, GPC). Кластери GPC є незалежними пристроями у складі процесора і здатні працювати як окремі пристрої, оскільки мають всі необхідні ресурси: розтеризатори, геометричні двигуни і текстурні модулі.

Кожен такий кластер має два потокові мультипроцесори SMX (Streaming Multiprocessor), але в процесорі GK104 в одному з кластерів один мультипроцесор заблокований, тому є сім мультипроцесорів SMX.

Кожен потоковий мультипроцесор SMX містить 192 потокові обчислювальні ядра (ядра CUDA), тому в сукупності процесор GK104 налічує 1344 обчислювальних ядра CUDA. Крім того, кожен SMX-мультипроцесор містить 16 текстурних модулів (TMU), 32 блоки спеціальних функцій (Special Function Units, SFU), 32 блоки завантаження та зберігання (Load-Store Unit, LSU), двигун PolyMorph та багато іншого.

Відеокарта GeForce GTX 460 заснована на графічному процесорі з кодовим позначенням GF104 на базі архітектури Fermi. Цей процесор виробляється по 40-нм техпроцесу і містить близько 1,95 млрд. транзисторів.

Графічний процесор GF104 включає два кластери графічної обробки GPC. Кожен з них має чотири потокові мультипроцесори SM, але в процесорі GF104 в одному з кластерів один мультипроцесор заблокований, тому існує всього сім мультипроцесорів SM.

Кожен потоковий мультипроцесор SM містить 48 потокових обчислювальних ядра (CUDA), тому в сукупності процесор GK104 налічує 336 обчислювальних ядра CUDA. Крім того, кожен SM-мультипроцесор містить вісім текстурних модулів (TMU), вісім блоків спеціальних функцій (Special Function Units, SFU), 16 блоків завантаження та зберігання (Load-Store Unit, LSU), двигун PolyMorph та багато іншого.

Графічний процесор GeForce GTX 280 відноситься до другого покоління уніфікованої архітектури графічних процесорів NVIDIA і за своєю архітектурою сильно відрізняється від архітектури Fermi та Kepler.

Графічний процесор GeForce GTX 280 складається з кластерів обробки текстур (Texture Processing Clusters, TPC), які, хоч і схожі, але в той же час дуже відрізняються від кластерів графічної обробки GPC в архітектурах Fermi та Kepler. Усього таких кластерів у процесорі GeForce GTX 280 налічується десять. Кожен TPC-кластер включає три потокові мультипроцесори SM і вісім блоків текстурної вибірки та фільтрації (TMU). Кожен мультипроцесор складається із восьми потокових процесорів (SP). Мультипроцесори також містять блоки вибірки та фільтрації текстурних даних, що використовуються як у графічних, так і деяких розрахункових задачах.

Таким чином, в одному TPC-кластері - 24 потокові процесори, а в графічному процесорі GeForce GTX 280 їх вже 240.

Зведені характеристики використовуваних у тестуванні відеокарт на графічних процесорах NVIDIA представлені у таблиці.

У наведеній таблиці немає відеокарти AMD Radeon HD6850, що цілком природно, оскільки технічним характеристикамїї важко порівнювати із відеокартами NVIDIA. А тому розглянемо її окремо.

Графічний процесор AMD Radeon HD6850, що має кодову назву Barts, виготовляється по 40-нм техпроцесу і містить 1,7 млрд транзисторів.

Архітектура процесора AMD Radeon HD6850 є уніфікованою архітектурою з масивом загальних процесорів для потокової обробки численних видів даних.

Процесор AMD Radeon HD6850 складається з 12 SIMD-ядер, кожне з яких містить по 16 блоків суперскалярних потокових процесорів та чотири текстурні блоки. Кожен суперскалярний потоковий процесор містить п'ять універсальних потокових процесорів. Таким чином, всього в графічному процесорі AMD Radeon HD6850 налічується 12*um*16*um*5=960 універсальних потокових процесорів.

Частота графічного процесора відеокарти AMD Radeon HD6850 становить 775 МГц, а ефективна частота пам'яті GDDR5 – 4000 МГц. У цьому обсяг пам'яті становить 1024 Мбайт.

Результати тестування

Отже, звернімося до результатів тестування. Почнемо з першого тесту, коли використовується відеокарта NVIDIA GeForce GTX 660Ti та штатний режим роботи процесора Intel Core i7-3770K.

На рис. 1-3 показані результати конвертування трьох тестових відеороликів трьома конвертерами в режимах із застосуванням графічного процесора та без.

Як видно за результатами тестування, ефект від використання графічного процесора є. Для відеоконвертера Xilisoft Video Converter Ultimate 7.7.2 у разі застосування графічного процесора час конвертування скорочується на 14, 9 та 19% для першого, другого та третього відеоролика відповідно.

Для відеоконвертера Wondershare Video Converter Ultimate 6.0.32 використання графічного процесора дозволяє скоротити час конвертування на 10, 13 та 23% для першого, другого та третього відеоролика відповідно.

Але найбільше від застосування графічного процесора виграє конвертер Movavi Video Converter 10.2.1. Для першого, другого та третього відеоролика скорочення часу конвертування становить 64, 81 та 41% відповідно.

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

Тепер подивимося, який буде виграш за часом конвертування при розгоні процесора Intel Core i7-3770K до 4,5 ГГц. Якщо вважати, що в штатному режимі всі ядра процесора при конвертуванні завантажені і в режимі Turbo Boost працюють на частоті 3,7 ГГц, збільшення частоти до 4,5 ГГц відповідає розгону по частоті на 22%.

На рис. 4-6 показані результати конвертування трьох тестових відеороликів при розгоні процесора в режимах з використанням графічного процесора та без. У разі застосування графічного процесора дозволяє отримати виграш за часом конвертування.

Для відеоконвертера Xilisoft Video Converter Ultimate 7.7.2 у разі застосування графічного процесора час конвертування скорочується на 15, 9 та 20% для першого, другого та третього відеоролика відповідно.

Для відеоконвертера Wondershare Video Converter Ultimate 6.0.32 використання графічного процесора дозволяє скоротити час конвертування на 10, 10 та 20% для першого, другого та третього відеоролика відповідно.

Для конвертера Movavi Video Converter 10.2.1 застосування графічного процесора дозволяє скоротити час конвертування на 59, 81 та 40% відповідно.

Звичайно, цікаво подивитися, як розгін процесора дозволяє зменшити час конвертування при використанні графічного процесора і без нього.

На рис. 7-9 представлені результати порівняння часу конвертування відео без використання графічного процесора в штатному режимі роботи процесора і в режимі розгону. Оскільки в цьому випадку конвертування проводиться лише засобами CPU без обчислень на GPU, очевидно, що збільшення тактової частоти роботи процесора призводить до скорочення часу конвертування (збільшення швидкості конвертування). Так само очевидно, що скорочення швидкості конвертування має бути приблизно однаковим для всіх тестових відеороликів. Так, для відеоконвертера Xilisoft Video Converter Ultimate 7.7.2 при розгоні процесора час конвертування скорочується на 9, 11 та 9% для першого, другого та третього відеоролика відповідно. Для відеоконвертера Wondershare Video Converter Ultimate 6.0.32 час конвертування скорочується на 9, 9 та 10% для першого, другого та третього відеоролика відповідно. Ну а для відеоконвертера Movavi Video Converter 10.2.1 час конвертування скорочується на 13, 12 та 12% відповідно.

Таким чином, при розгоні процесора частотою на 20% час конвертування скорочується приблизно на 10%.

Порівняємо час конвертування відеороликів з використанням графічного процесора у штатному режимі роботи процесора та режимі розгону (рис. 10-12).

Для відеоконвертера Xilisoft Video Converter Ultimate 7.7.2 при розгоні процесора час конвертування скорочується на 10, 10 та 9% для першого, другого та третього відеоролика відповідно. Для відеоконвертера Wondershare Video Converter Ultimate 6.0.32 час конвертування скорочується на 9, 6 та 5% для першого, другого та третього відеоролика відповідно. Ну а для відеоконвертера Movavi Video Converter 10.2.1 час конвертування скорочується на 0,2, 10 та 10% відповідно.

Як бачимо, для конвертерів Xilisoft Video Converter Ultimate 7.7.2 та Wondershare Video Converter Ultimate 6.0.32 скорочення часу конвертування при розгоні процесора приблизно однаково як при використанні графічного процесора, так і без його застосування, що логічно, оскільки ці конвертери не дуже ефективно використовують обчислення на GPU. А ось для конвертера Movavi Video Converter 10.2.1, який ефективно використовує обчислення на GPU, розгін процесора в режимі використання обчислень на GPU мало позначається на скороченні часу конвертування, що також зрозуміло, оскільки в цьому випадку основне навантаження лягає на графічний процесор.

Тепер подивимося результати тестування із різними відеокартами.

Здавалося б, чим потужніша відеокарта і чим більше в графічному процесорі ядер CUDA (або універсальних потокових процесорів для відеокарт AMD), тим ефективнішим має бути відеоконвертування у разі застосування графічного процесора. Але на практиці виходить не зовсім так.

Що стосується відеокарт на графічних процесорах NVIDIA, ситуація наступна. При використанні конвертерів Xilisoft Video Converter Ultimate 7.7.2 та Wondershare Video Converter Ultimate 6.0.32 час конвертування практично не залежить від типу використовуваної відеокарти. Тобто для відеокарт NVIDIA GeForce GTX 660Ti, NVIDIA GeForce GTX 460 і NVIDIA GeForce GTX 280 в режимі використання обчислень на GPU час конвертування виходить те саме (рис. 13-15).

Мал. 1. Результати конвертування першого
тестового відеоролика у штатному режимі
роботи процесора

процесора відеокарт в режимі використання графічного процесора

Мал. 14. Результати порівняння часу конвертування другого відеоролика

Мал. 15. Результати порівняння часу конвертування третього відеоролика
на різних відеокартах у режимі використання графічного процесора

Пояснити це можна лише тим, що алгоритм обчислень на графічному процесорі, реалізований у конвертерах Xilisoft Video Converter Ultimate 7.7.2 та Wondershare Video Converter Ultimate 6.0.32, просто неефективний і не дозволяє активно використовувати всі графічні ядра. До речі, саме цим пояснюється і той факт, що для цих конвертерів різниця в часі конвертування в режимах використання GPU і без використання невелика.

У конвертері Movavi Video Converter 10.2.1 ситуація дещо інша. Як ми пам'ятаємо, цей конвертер здатний дуже ефективно використовувати обчислення на GPU, а тому в режимі використання GPU час конвертування залежить від типу відеокарти, що використовується.

А ось з відеокартою AMD Radeon HD 6850 все як завжди. Чи то драйвер відеокарти «кривий», чи то алгоритми, реалізовані в конвертерах, потребують серйозного доопрацювання, але у разі застосування обчислень на GPU результати або не покращуються, або погіршуються.

Якщо говорити конкретніше, ситуація наступна. Для конвертера Xilisoft Video Converter Ultimate 7.7.2 під час використання графічного процесора для конвертування першого тестового відеоролика час конвертування збільшується на 43%, при конвертуванні другого ролика - на 66%.

Причому конвертер Xilisoft Video Converter Ultimate 7.7.2 характеризується ще й нестабільністю результатів. Розкид часу конвертування може досягати 40%! Саме тому ми повторювали всі тести десять разів і розраховували середній результат.

А ось для конвертерів Wondershare Video Converter Ultimate 6.0.32 та Movavi Video Converter 10.2.1 під час використання графічного процесора для конвертування всіх трьох відеороликів час конвертування не змінюється взагалі! Конвертери Wondershare Video Converter Ultimate 6.0.32 і Movavi Video Converter 10.2.1 або не використовують технологію AMD APP при конвертуванні, або відеодрайвер AMD просто «кривий», в результаті чого технологія AMD APP не працює.

Висновки

З проведеного тестування можна зробити такі важливі висновки. У сучасних відеоконвертерах справді може застосовуватися технологія обчислень на GPU, що дозволяє підвищити швидкість конвертування. Однак це зовсім не означає, що всі обчислення повністю переносяться на GPU та CPU залишається незадіяним. Як показує тестування, під час використання технології GPGPU центральний процесор залишається завантаженим, отже, застосування потужних, багатоядерних центральних процесорів у системах, що використовуються конвертування відео, залишається актуальним. Винятком цього правила є технологія AMD APP на графічних процесорах AMD. Наприклад, при використанні конвертера Xilisoft Video Converter Ultimate 7.7.2 з активованою технологією AMD APP навантаження на CPU дійсно знижується, але це призводить до того, що час конвертування не скорочується, а навпаки збільшується.

Загалом, якщо говорити про конвертування відео з додатковим використанням графічного процесора, то для вирішення цього завдання доцільно застосовувати відеокарти з графічними процесорами NVIDIA. Як показує практика, тільки в цьому випадку можна досягти збільшення швидкості конвертування. Причому слід пам'ятати, що реальний приріст у швидкості конвертування залежить від багатьох чинників. Це вхідний та вихідний формати відео, і, звичайно ж, сам відеоконвертер. Конвертери Xilisoft Video Converter Ultimate 7.7.2 та Wondershare Video Converter Ultimate 6.0.32 для цього завдання підходять погано, а ось конвертер та Movavi Video Converter 10.2.1 здатний дуже ефективно використовувати можливості NVIDIA GPU.

Що ж до відеокарт на графічних процесорах AMD, то для завдань відеоконвертування їх не варто застосовувати взагалі. У найкращому разі ніякого приросту у швидкості конвертування це не дасть, а в гіршому – можна отримати її зниження.

Однією з найбільш прихованих функцій, у недавньому оновлення Windows 10, є можливість перевірити, які програми використовують ваш графічний процесор (GPU). Якщо ви коли-небудь відкривали диспетчер завдань, то напевно дивилися на використання вашого ЦП, щоб дізнатися, які програми найбільше вантажать ЦП. У останніх оновленняхдодано аналогічну функцію, але для графічних процесорів GPU. Це допомагає зрозуміти, наскільки інтенсивним є ваше програмне забезпечення та ігри на вашому графічному процесорі, не завантажуючи програмне забезпечення сторонніх розробників. Є ще одна цікава функція, яка допомагає розвантажити ваш ЦП на GPU. Рекомендую почитати, як вибрати.

Чому я не маю GPU в диспетчері завдань?

На жаль, не всі відеокарти зможуть надати Windows статистику, необхідну для читання графічного процесора. Щоб переконатися, можна швидко використовувати інструмент діагностики DirectX для перевірки цієї технології.

  1. Натисніть " Пускі в пошуку напишіть dxdiagдля запуску засобу діагностики DirectX
  2. Перейдіть на вкладку " Екран",праворуч у графі " драйвери" у вас має бути модель WDDMбільше 2.0 версії для використання GPU графи у диспетчері завдань.

Включити графу GPU у диспетчері завдань

Щоб побачити використання графічного процесора для кожної програми, потрібно відкрити диспетчер завдань.

  • Натисніть клавіші Ctrl+Shift+Escвідкрити диспетчер завдань.
  • Натисніть правою кнопкою миші у диспетчері завдань на полі порожнє " Ім'я"і позначте з меню, що випадає GPU.Ви також можете відзначити Ядро графічного процесора, щоб бачити, які програми використовують його.
  • Тепер у диспетчері завдань, справа видно графа GPU та ядро ​​графічного процесора.


Перегляд загальної продуктивності графічного процесора

Ви можете відстежувати загальне використання GPU, щоб стежити за ним при великих навантаженнях та аналізувати. У цьому випадку ви можете побачити все, що потрібно, на вкладці " Продуктивність", вибравши графічний процесор.


Кожен елемент графічного процесора розбивається на окремі графіки, щоб дати ще більше інформації про те, як використовується ваш GPU. Якщо ви хочете змінити відображені графіки, ви можете клацнути маленьку стрілку поруч із назвою кожного завдання. На цьому екрані також відображається версія драйвера та дата, що є гарною альтернативою використанню DXDiag або диспетчера пристроїв.


Обчислення на графічних процесорах

Технологія CUDA (Compute Unified Device Architecture) - програмно-апаратна архітектура, що дозволяє проводити обчислення з використанням графічних процесорів NVIDIA, що підтримують технологію GPGPU (довільних обчислень на відеокартах). Архітектура CUDA вперше з'явилися на ринку з виходом чіпа NVIDIA восьмого покоління - G80 і є у всіх наступних серіях графічних чіпів, які використовуються в сімействах прискорювачів GeForce, ION, Quadro і Tesla.

CUDA SDK дозволяє програмістам реалізовувати на спеціальному спрощеному діалекті мови програмування Сі алгоритми, здійсненні на графічних процесорах NVIDIA і включати спеціальні функції текст програми на Cі. CUDA дає розробнику можливість на власний розсуд організовувати доступ до набору інструкцій графічного прискорювачаі управляти його пам'яттю, організовувати у ньому складні паралельні обчислення.

Історія

У 2003 р. Intel та AMD брали участь у спільній гонці за самий потужний процесор. За кілька років внаслідок цих перегонів тактові частотисуттєво зросли, особливо після виходу Intel Pentium 4.

Після приросту тактових частот (між 2001 і 2003 рр. тактова частота Pentium 4 подвоїлася з 1,5 до 3 ГГц), а користувачам довелося задовольнятися десятими частками гігагерц, які вивели на ринок виробники (з 2003 до 2005 рр.) 3,8 ГГц).

Архітектури, оптимізовані під високі тактові частоти, та сама Prescott, так само стали відчувати труднощі, і не тільки виробничі. Виробники чіпів зіштовхнулися із проблемами подолання законів фізики. Деякі аналітики навіть пророкували, що закон Мура перестане діяти. Але цього не сталося. Оригінальний зміст закону часто спотворюють, проте стосується кількості транзисторів лежить на поверхні кремнієвого ядра. Довгий час підвищення числа транзисторів у CPU супроводжувалося відповідним зростанням продуктивності - що призвело до спотворення сенсу. Але потім ситуація ускладнилася. Розробники архітектури CPU підійшли до закону скорочення приросту: число транзисторів, яке потрібно додати для потрібного збільшення продуктивності, ставало все більшим, заводячи в глухий кут.

Причина, через яку виробникам GPU не зіткнулися з цією проблемою, дуже проста: центральні процесори розробляються для отримання максимальної продуктивностіна потоці інструкцій, які обробляють різні дані (як цілі числа, і числа з плаваючою комою), виробляють випадковий доступом до пам'яті тощо. До цього часу розробники намагаються забезпечити більший паралелізм інструкцій - тобто виконувати якомога більше інструкцій паралельно. Так, наприклад, із Pentium з'явилося суперскалярне виконання, коли за деяких умов можна було виконувати дві інструкції за такт. Pentium Pro отримав позачергове виконання інструкцій, що дозволило оптимізувати роботу обчислювальних блоків. Проблема полягає в тому, що паралельне виконання послідовного потоку інструкцій має очевидні обмеження, тому сліпе підвищення числа обчислювальних блоків не дає виграшу, оскільки більшу частину часу вони все одно простоюватимуть.

Робота GPU відносно проста. Вона полягає у прийнятті групи полігонів з одного боку та генерації групи пікселів з іншого. Полігони та пікселі незалежні один від одного, тому їх можна обробляти паралельно. Таким чином, GPU можна виділити велику частину кристала на обчислювальні блоки, які, на відміну від CPU, будуть реально використовуватися.

GPU відрізняється від CPU не лише цим. Доступ до пам'яті в GPU дуже пов'язаний - якщо зчитується тексель, то через кілька тактів зчитуватиметься сусідній тексель; коли записується піксель, через кілька тактів записуватиметься сусідній. Розумно організуючи пам'ять, можна отримати продуктивність, близьку до теоретичної пропускну здатність. Це означає, що GPU, на відміну від CPU, не вимагає величезного кешу, оскільки його роль полягає у прискоренні операцій текстурування. Все, що потрібно, це кілька кілобайт, що містять кілька текселів, що використовуються в білінійних та трилінійних фільтрах.

Перші розрахунки на GPU

Найперші спроби такого застосування обмежувалися використанням деяких апаратних функцій, таких як растеризація та Z-буферизація. Але в нинішньому столітті з появою шейдерів почали прискорювати обчислення матриць. У 2003 р. на SIGGRAPH окрема секція була виділена під обчислення на GPU і отримала назву GPGPU (General-Purpose computation on GPU) - універсальні обчислення на GPU).

Найбільш відомий BrookGPU - компілятор потокової мови програмування Brook, створений виконання неграфічних обчислень на GPU. До появи розробники, які використовують можливості відеочипів для обчислень, вибирали одне із двох поширених API: Direct3D чи OpenGL. Це серйозно обмежувало застосування GPU, адже в 3D графіку використовуються шейдери та текстури, про які фахівці з паралельного програмування знати не зобов'язані, вони використовують потоки та ядра. Brook зміг допомогти полегшити їх завдання. Ці потокові розширення до мови C, розроблені в Стендфордському університеті, приховували від програмістів тривимірний API і представляли відеочіп у вигляді паралельного співпроцесора. Компілятор обробляв файл.br із кодом C++ та розширеннями, виробляючи код, прив'язаний до бібліотеки з підтримкою DirectX, OpenGL або x86.

Поява Brook викликала інтерес у NVIDIA та ATI і надалі, відкрив цілий новий його сектор - паралельні обчислювачі на основі відеочіпів.

Надалі деякі дослідники з проекту Brook перейшли в команду розробників NVIDIA, щоб представити програмно-апаратну стратегію паралельних обчислень, відкривши нову частку ринку. І головною перевагою цієї ініціативи NVIDIA стало те, що розробники чудово знають всі можливості своїх GPU до дрібниць, і у використанні графічного API немає необхідності, а працювати з апаратним забезпеченням можна за допомогою драйвера. Результатом зусиль цієї команди стала NVIDIA CUDA.

Області застосування паралельних розрахунків на GPU

При перенесенні обчислень на GPU у багатьох завданнях досягається прискорення в 5-30 разів, порівняно зі швидкими універсальними процесорами. Найкращі великі цифри(близько 100-кратного прискорення і навіть більше!) досягаються на коді, який не дуже добре підходить для розрахунків за допомогою блоків SSE, але цілком зручний для GPU.

Це лише деякі приклади прискорення синтетичного коду на GPU проти SSE-векторизованого коду на CPU (за даними NVIDIA):

Флуоресцентна мікроскопія: 12 х.

Молекулярна динаміка (non-bonded force calc): 8-16x;

Електростатика (пряме та багаторівневе підсумовування Кулону): 40-120x та 7x.

Таблиця, яку NVIDIA, показує всіх презентаціях, у якій показується швидкість графічних процесорів щодо центральних.

Перелік основних додатків, в яких застосовуються обчислення на GPU: аналіз та обробка зображень та сигналів, симуляція фізики, обчислювальна математика, обчислювальна біологія, фінансові розрахунки, бази даних, динаміка газів та рідин, криптографія, адаптивна променева терапія, астрономія, обробка звуку , біологічні симуляції, комп'ютерний зір, аналіз даних (data mining), цифрове кіно та телебачення, електромагнітні симуляції, геоінформаційні системи, військові застосування, гірське планування, молекулярна динаміка, магнітно-резонансна томографія (MRI), нейромережі, океанографічні дослідження, фізика частинок, симуляція згортання молекул білка, квантова хімія, трасування променів, візуалізація, радари, гідродинамічне моделювання , аналіз супутникових даних, сейсмічна розвідка, хірургія, ультразвук, відеоконференції

Переваги та обмеження CUDA

З погляду програміста графічний конвеєр є набором стадій обробки. Блок геометрії генерує трикутники, а блок растеризації – пікселі, що відображаються на моніторі. Традиційна модель програмування GPGPU виглядає так:

Щоб перенести обчислення на GPU у рамках такої моделі, потрібний спеціальний підхід. Навіть поелементне складання двох векторів вимагатиме відтворення фігури на екрані або у позаекранний буфер. Фігура розтеризується, колір кожного пікселя обчислюється за програмою (піксельному шейдеру). Програма зчитує вхідні дані з текстур кожного пікселя, складає їх і записує у вихідний буфер. І всі ці численні операції потрібні у тому, що у звичайній мові програмування записується одним оператором!

Тому застосування GPGPU для обчислень загального призначення має обмеження у вигляді занадто великої складності навчання розробників. Та й інших обмежень достатньо, адже піксельний шейдер - це лише формула залежності підсумкового кольору пікселя від його координати, а мова піксельних шейдерів - мова запису цих формул з Сі-подібним синтаксисом. Ранні методи GPGPU є хитрим трюком, що дозволяє використовувати потужність GPU, але без будь-якої зручності. Дані представлені зображеннями (текстурами), а алгоритм - процесом растеризации. Потрібно особливо відзначити і дуже специфічну модель пам'яті та виконання.

Програмно-апаратна архітектура для обчислень на GPU компанії NVIDIA відрізняється від попередніх моделей GPGPU тим, що дозволяє писати програми для GPU справжньою мовою Сі зі стандартним синтаксисом, покажчиками та необхідністю в мінімумі розширень для доступу до обчислювальних ресурсів відеочіпів. CUDA не залежить від графічних API, і має деякі особливості, призначені спеціально для обчислень загального призначення.

Переваги CUDA перед традиційним підходом до обчислень GPGPU

CUDA забезпечує доступ до розділяється між потоками пам'яті розміром 16 Кб на мультипроцесор, яка може бути використана для організації кешу з широкою смугою пропускання, в порівнянні з текстурними вибірками;

Більш ефективна передача даних між системною та відеопам'яттю;

Відсутність необхідності в графічних API з надмірністю та накладними витратами;

Лінійна адресація пам'яті, і gather і scatter; можливість запису за довільними адресами;

Апаратна підтримка цілих і бітових операцій.

Основні обмеження CUDA:

відсутність підтримки рекурсії для виконуваних функцій;

Мінімальна ширина блоку 32 потоку;

Закрита архітектура CUDA, що належить NVIDIA.

Слабкими місцями програмування за допомогою попередніх методів GPGPU є те, що ці методи не використовують блоки виконання вершинних шейдерів у попередніх неуніфікованих архітектурах, дані зберігаються у текстурах, а виводяться у позаекранний буфер, а багатопрохідні алгоритми використовують піксельні шейдерні блоки. До обмежень GPGPU можна включити: недостатньо ефективне використання апаратних можливостей, обмеження смугою пропускання пам'яті, відсутність операції scatter (тільки gather), обов'язкове використання графічного API.

Основні переваги CUDA у порівнянні з попередніми методами GPGPU випливають з того, що ця архітектура спроектована для ефективного використання неграфічних обчислень на GPU та використовує мову програмування C, не вимагаючи перенесення алгоритмів у зручний для концепції графічного конвеєра вигляд. CUDA пропонує новий шлях обчислень на GPU, що не використовує графічні API, що пропонує довільний доступ до пам'яті (scatter або gather). Така архітектура позбавлена ​​недоліків GPGPU та використовує всі виконавчі блоки, а також розширює можливості за рахунок цілісної математики та операцій бітового зсуву.

CUDA відкриває деякі апаратні можливості, недоступні з графічних API, такі як пам'ять, що розділяється. Це пам'ять невеликого об'єму (16 кілобайт на мультипроцесор), до якої мають доступ блоки потоків. Вона дозволяє кешувати найчастіше використовувані дані і може забезпечити більш високу швидкість, в порівнянні з використанням текстурних вибірок для цього завдання. Що, своєю чергою, знижує чутливість до пропускної спроможності паралельних алгоритмів у багатьох додатках. Наприклад, це корисно для лінійної алгебри, швидкого перетворення Фур'є та фільтрів обробки зображень.

Зручніший у CUDA та доступ до пам'яті. Програмний коду графічних API виводить дані у вигляді 32-х значень з плаваючою точкою одинарної точності (RGBA значення одночасно у вісім render target) у заздалегідь визначені області, а CUDA підтримує scatter запис - необмежену кількість записів за будь-якою адресою. Такі переваги уможливлюють виконання на GPU деяких алгоритмів, які неможливо ефективно реалізувати за допомогою методів GPGPU, заснованих на графічних API.

Також, графічні API в обов'язковому порядку зберігають дані в текстурах, що вимагає попередньої упаковки великих масивів у текстури, що ускладнює алгоритм та змушує використовувати спеціальну адресацію. А CUDA дозволяє читати дані на будь-яку адресу. Ще однією перевагою CUDA є оптимізований обмін даними між CPU та GPU. А для розробників, які бажають отримати доступ до низькому рівню(наприклад, при написанні іншої мови програмування) CUDA пропонує можливість низькорівневого програмування на асемблері.

Недоліки CUDA

Один з нечисленних недоліків CUDA – слабка переносимість. Ця архітектура працює тільки на відеочіпах цієї компанії, та ще й не на всіх, а починаючи з серії GeForce 8 та 9 та відповідних Quadro, ION та Tesla. NVIDIA наводить цифру в 90 мільйонів CUDA-сумісних відеочіпів.

Альтернативи CUDA

Фреймворк для написання комп'ютерних програм, пов'язаних із паралельними обчисленнями на різних графічних та центральних процесорах. У фреймворк OpenCL входять мову програмування, яка базується на стандарті C99, та інтерфейс програмування додатків (API). OpenCL забезпечує паралелізм лише на рівні інструкцій і лише на рівні даних і є реалізацією техніки GPGPU. OpenCL є повністю відкритим стандартом, його використання не обкладається ліцензійними відрахуваннями.

Ціль OpenCL полягає в тому, щоб доповнити OpenGL і OpenAL, які є відкритими галузевими стандартами для тривимірної комп'ютерної графікита звуку, користуючись можливостями GPU. OpenCL розробляється та підтримується некомерційним консорціумом Khronos Group, до якого входять багато великих компаній, включаючи Apple, AMD, Intel, nVidia, Sun Microsystems, Sony Computer Entertainment та інші.

CAL/IL (Compute Abstraction Layer/Intermediate Language)

ATI Stream Technology - це набір апаратних та програмних технологій, які дозволяють використовувати графічні процесори AMD, Спільно з центральним процесором, для прискорення багатьох додатків (не тільки графічних).

Областями застосування ATI Stream є програми, вимогливі до обчислювального ресурсу, такі як фінансовий аналіз або обробка сейсмічних даних. Використання потокового процесора дозволило збільшити швидкість деяких фінансових розрахунків у 55 разів у порівнянні з рішенням того ж завдання силами лише центрального процесора.

Технологію ATI Stream у NVIDIA не вважають дуже сильним конкурентом. CUDA та Stream - це дві різні технологіїякі стоять на різних рівнях розвитку. Програмування для продуктів ATI набагато складніше - їхня мова швидше нагадує асемблер. CUDA C, у свою чергу, набагато більш високорівнева мова. Писати на ньому зручніше та простіше. Для великих компаній розробників це дуже важливо. Якщо говорити про продуктивність, можна помітити, що її пікове значення в продуктах ATI вище, ніж у рішеннях NVIDIA. Але знову все зводиться до того, як цю потужність отримати.

DirectX11 (DirectCompute)

Інтерфейс програмування програм, що входить до складу DirectX - набору API від Microsoft, який призначений для роботи на IBM PC-сумісних комп'ютерах під управлінням операційних систем сімейства Microsoft Windows. DirectCompute призначений для виконання обчислень загального призначення на графічних процесорах, будучи реалізацією концепції GPGPU. Спочатку DirectCompute був опублікований у складі DirectX 11, проте пізніше став доступним і для DirectX 10 та DirectX 10.1.

NVDIA CUDA у російському науковому середовищі.

Станом на грудень 2009 р. програмна модель CUDA викладається у 269 університетах світу. У Росії навчальні курси з CUDA читаються в Московському, Санкт-Петербурзькому, Казанському, Новосибірському та Пермському державних університетах, Міжнародному університеті природи суспільства та людини "Дубна", Об'єднаному інституті ядерних досліджень, Московському інституті електронної техніки, Іванівському державному енергетичному університеті, БДТУ ім. В. Г. Шухова, МДТУ ім. Баумана, РГТУ ім. Менделєєва, Російському науковому центрі "Курчатовський інститут", Міжрегіональному суперкомп'ютерному центрі РАН, Таганрозькому технологічному інституті (ТТІ ЮФУ).

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

Що таке майнінг на відеокарті

Майнінг на відеокарті – це процес видобутку криптовалюти за допомогою графічних процесорів (GPU). Для цього використовують потужну відеокарту домашнього комп'ютера або спеціально зібрану ферму з декількох пристроїв в одній системі. Якщо вас цікавить, чому для цього процесу використовуються саме GPU, то відповідь дуже проста. Справа в тому, що відеокарти спочатку розробляються для обробки великої кількості даних шляхом твору однотипних операцій, як у випадку з обробкою відео. Така ж картина спостерігається і в майнінгу криптовалюти, адже тут процес хешування такий же однотипний.

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

Які відеокарти підійдуть для майнінгу

Отже, щодо вибору відеокарти, то тут звичайною практикою є придбання AMD rx 470, rx 480, rx 570, rx 580 або Нвідіа 1060, 1070, 1080 ti. Також підійдуть, але не принесуть великого прибутку, відеокарти типу r9 280x, r9 290, 1050, 1060. Цілком точно не принесе прибутку майнінг на слабкій відеокарті на кшталт geforce gtx 460, gts 450, gtx 550ti. Якщо говорити про пам'ять, то краще брати від 2 гб. Може виявитися недостатньо навіть 1 гігабайт, не кажучи вже про 512 мегабайт. Якщо говорити про майнінг на професійній відеокарті, то він приносить приблизно стільки ж, скільки і звичайні або навіть менше. З урахуванням вартості таких ВК - це невигідно, але видобувати за їх допомогою можна, якщо вони вже є у вас.

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

Найпопулярніші відеокарти для майнінгу 2020

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

Відеокарта Ethash Equihash CryptoNight Енергоспоживання
AMD Radeon R9 280x 11 MH/s 290 H/s 490 H/s 230W
AMD Radeon RX 470 26 MH/s 260 H/s 660 H/s 120W
AMD Radeon RX 480 29.5 MH/s 290 H/s 730 H/s 135W
AMD Radeon RX 570 27.9 MH/s 260 H/s 700 H/s 120W
AMD Radeon RX 580 30.2 MH/s 290 H/s 690 H/s 135W
Nvidia GeForce GTX 750 TI 0.5 MH/s 75 H/s 250 H/s 55W
Nvidia GeForce GTX 1050 TI 13.9 MH/s 180 H/s 300 H/s 75W
Nvidia GeForce GTX 1060 22.5 MH/s 270 H/s 430 H/s 90W
Nvidia GeForce GTX 1070 30 MH/s 430 H/s 630 H/s 120W
Nvidia GeForce GTX 1070 TI 30.5 MH/s 470 H/s 630 H/s 135W
Nvidia GeForce GTX 1080 23.3 MH/s 550 H/s 580 H/s 140W
Nvidia GeForce GTX 1080 TI 35 MH/s 685 H/s 830 H/s 190W

Чи можливий майнінг на одній відеокарті?

Якщо у вас немає бажання збирати повноцінну ферму з безлічі GPU або просто хочете випробувати цей процес на домашньому комп'ютері, то можна майнути і однією відеокартою. Жодних відмінностей немає і взагалі кількість пристроїв у системі не важлива. Більше того, ви можете встановити пристрої з різними чіпами або навіть від різних виробників. Потрібно лише запустити паралельно дві програми для чіпів різних компаній. Нагадаємо ще раз, що майнінг на інтегрованій відеокарті не провадиться.

Які криптовалюти можна майнути на відеокартах

Майнути на GPU можна будь-яку криптовалюту, але слід розуміти, що продуктивність на різних буде відрізнятися на одній картці. Старіші алгоритми вже погано підходять для відеопроцесорів і не принесуть жодного прибутку. Відбувається це через появу на ринку нових пристроїв - так званих . Вони є значно продуктивнішими і значно підвищують складність мережі, проте їхня вартість висока і обчислюється тисячами доларів. Тому видобуток монет на SHA-256 (Біткоїн) або Scrypt (Litecoin, Dogecoin) у домашніх умовах – це погана ідея у 2018-му році.

Крім LTC і DOGE, ASIC унеможливили видобуток Bitcoin (BTC), Dash та інших валют. Куди найкращим вибором стануть криптовалюти, які використовують захищені від ASIC-ів алгоритми. Так, наприклад, за допомогою GPU вийде видобувати монети на алгоритмах CryptoNight (Карбованець, Монеро, Electroneum, Bytecoin), Equihash (ZCash, Hush, Bitcoin Gold) та Ethash (Ethereum, Ethereum Classic). Список далеко не повний і постійно з'являються нові проекти цих алгоритмах. Серед них зустрічаються як форки популярніших монет, так і нові розробки. Зрідка навіть з'являються нові алгоритми, які призначені для вирішення певних завдань та можуть використовувати різне обладнання. Нижче буде розказано про те, як дізнатися про хешрейт відеокарти.

Що потрібно для майнінгу на відеокарті

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

  • Самі відеокарти. Вибір конкретних моделейзалежить від вашого бюджету або того, що вже є. Звичайно, старі пристрої на AGP не підійдуть, але можна використовувати будь-яку карту середнього чи топового класу останніх років. Вище можна повернутися до таблиці продуктивності відеокарт, яка дозволить зробити підходящий вибір.
  • Комп'ютер для встановлення. Не обов'язково використовувати топове залізо та робити ферму на базі високопродуктивних комплектуючих. Достатньо буде якогось старого AMD Athlon, кількох гігабайт оперативної пам'ятіі жорсткого дискадля установки операційної системиі потрібних програм. Важливою є також материнська плата. Вона повинна мати достатню для ферми кількість PCI слотів. Існують спеціальні версії для майнерів, які містять 6-8 слотів та у певних випадках вигідніше використовувати їх, ніж збирати кілька ПК. Особливу увагу варто приділяти лише блоку живлення, адже система працюватиме під високим навантаженням цілодобово. Брати БП потрібно обов'язково із запасом потужності та бажано наявність сертифікатів 80 Plus. Можливе також з'єднання двох блоків за допомогою спеціальних перехідників, але таке рішення викликає в інтернеті суперечки. Корпус краще не використати зовсім. Для кращого охолодженнярекомендується зробити чи купити спеціальний стенд. Відеокарти у такому разі виносяться за допомогою спеціальних перехідників, які називаються райзерами. Придбати їх можна у профільних магазинах або на аліекспресі.
  • Добре провітрюване сухе приміщення. Розміщувати ферму варто у нежитловій кімнаті, а краще взагалі в окремому приміщенні. Це дозволить позбутися дискомфорту, який виникає через шумну роботу систем охолодження та тепловіддачі. Якщо такої можливості немає, слід вибирати відеокарти з максимально тихою системою охолодження. Дізнатися про неї детальніше ви зможете із оглядів в інтернеті, наприклад, на YouTube. Слід також подумати про циркуляцію повітря та вентильованість, щоб максимально знизити температуру.
  • Програма майнер. GPU майнінг відбувається за допомогою спеціального , яке може бути знайдено в інтернеті. Для виробників ATI Radeon та Nvidia використовується різний софт. Це саме стосується і різних алгоритмів.
  • Обслуговування обладнання. Це дуже важливий пункт, оскільки не всі розуміють, що майнінг ферма потребує постійного догляду. Користувачеві слід стежити за температурою, міняти термопасту та очищати СО від пилу. Слід також пам'ятати про техніку безпеки та регулярно перевіряти справність системи.

Як налаштувати майнінг на відеокарті з нуля

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

Як вибрати відеокарту для майнінгу

Ми рекомендуємо вам ознайомитись з таблицею, яка представлена ​​вище та з розділом про підрахунок потенційного заробітку. Це дозволить розрахувати приблизний дохід і визначитися з тим, яке залізо вам більше по кишені, а також розібратися із термінами окупності вкладень. Не варто також забувати про сумісність роз'ємів живлення відеокарти та блоку живлення. Якщо використовуються різні, слід заздалегідь обзавестися відповідними перехідниками. Все це легко купується в китайських інтернет магазинах за копійки або місцеві продавці з деякою націнкою.

Вибираємо криптовалюту

Тепер важливо визначитися з тим, яка монета вас цікавить і яких цілей ви хочете досягти. Якщо вас цікавить заробіток у реальному часі, то варто вибирати валюти з найбільшим профітом Наразіта продавати їх відразу після отримання. Можна також майнути найпопулярніші монети і тримати їх доти, доки не відбудеться стрибок ціни. Є також свого роду стратегічний підхід, коли вибирається маловідома, але перспективна на ваш погляд валюта і ви вкладаєте потужності в неї, сподіваючись, що в майбутньому вартість значно зросте.

Вибираємо пул для майнінгу

Також мають деякі відмінності. Деякі з них вимагають реєстрації, а деяким достатньо лише адреси вашого гаманця для початку роботи. Перші зазвичай зберігають зароблені вами кошти до досягнення мінімальної виплати суми, або в очікуванні виведення вами грошей у ручному режимі. Хорошим прикладом такого пулу є Suprnova.cc. Там пропонується безліч криптовалютів і для роботи в кожному з пулів достатньо лише раз зареєструватися на сайті. Сервіс простий у налаштуванні та добре підійде новачкам.

Подібну спрощену систему пропонує сайт Minergate. Ну а якщо ви не хочете реєструватися на якомусь сайті і зберігати там зароблені кошти, то вам слід вибрати який-небудь пул в офіційній темі монети, що цікавить вас на форумі BitcoinTalk. Прості пули вимагають лише вказівки адреси для нарахування крипти і надалі за допомогою адреси можна буде дізнаватися про статистику видобутку.

Створюємо криптовалютний гаманець

Цей пункт не потрібний вам, якщо використовуєте пул, який вимагає реєстрацію та має вбудований гаманець. Якщо ж ви хочете отримувати виплати автоматично собі на гаманець, спробуйте почитати про створення гаманця у статті про відповідну монету. Цей процесможе суттєво відрізнятися для різних проектів.

Можна також просто вказувати адресу вашого гаманця на якійсь із бірж, але слід зазначити, що не всі обмінні платформи приймають транзакції з пулів. Найкращим варіантом буде створення гаманця безпосередньо на вашому комп'ютері, але якщо ви працюєте з великою кількістю валют, зберігання всіх блокчейнів буде незручно. У такому випадку варто пошукати надійні онлайн гаманці або полегшені версії, які не вимагають завантаження всього ланцюга блоків.

Вибираємо та встановлюємо програму для майнінгу

Вибір програми для видобутку крипти залежить від вибраної монети та її алгоритму. Напевно, всі розробники такого програмного забезпечення мають теми на BitcoinTalks, де можна знайти посилання на скачування та інформацію про те, як відбуваються налаштування та запуск. Майже всі програми мають версії як для Віндовс, так і для Лінукс. Більшість таких майнерів є безкоштовними, але деякий відсоток часу вони використовують для підключення до пулу розробника. Це своєрідна комісія за використання програмного забезпечення. У деяких випадках її можна вимкнути, але це призводить до обмежень функціоналу.

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

Якщо ви не знаєте, яке ПЗ вибрати, перегляньте наш матеріал, присвячений або вивчіть інструкції на сайті пула. Зазвичай там завжди є розділ, присвячений початку роботи. Він містить перелік програм, які можна використовувати і конфігурації для .batфайлів. З його допомогою можна швидко розібратися з налаштуванням та розпочати майнінг на дискретній відеокарті. Можна відразу створити батники для всіх валют, з якими ви хочете працювати, щоб надалі було зручніше перемикатися між ними.

Запускаємо майнінг та стежимо за статистикою

Після запуску .batфайлу з налаштуваннями ви побачите консольне вікно, куди буде виводитися балка того, що відбувається. Його також можна буде знайти в папці із файлом, що запускається. У консолі ви можете ознайомитися з поточними показниками хешрейту та температурою картки. Викликати актуальні дані зазвичай дозволяють гарячі кнопки.

Ви також можете побачити, якщо пристрій не знаходить хеші. У такому разі буде виведено попередження. Трапляється це, коли щось налаштовано неправильно, вибране програмне забезпечення, яке не підходить для монети, або ГПУ не функціонує належним чином. Багато майнерів також використовують засоби для дистанційного доступудо ПК, щоб стежити за роботою ферми, коли вони не там, де вона встановлена.

Виводимо криптовалюту

Якщо ви використовуєте пули на кшталт Suprnova, всі кошти просто накопичуються на вашому акаунті і ви можете вивести їх у будь-який момент. Інші пули найчастіше використовують систему, коли кошти нараховуються автоматично на вказаний гаманець після отримання мінімальної суми виведення. Дізнатися, скільки ви заробили, зазвичай можна на сайті пула. Потрібно лише вказати адресу вашого гаманця або залогуватися в особистий кабінет.

Скільки можна заробити?

Сума, яку ви можете заробити, залежить від ситуації на ринку та, звичайно, загального хешрейту вашої ферми. Важливо також те, яку стратегію ви оберете. Необов'язково продавати все здобуте одразу. Можна, наприклад, зачекати на стрибок курсу намайненої монети і отримати в рази більше профіту. Однак все не так однозначно і передбачити подальший розвитокподій буває просто неможливо.

Окупність відеокарт

Підрахувати окупність допоможе спеціальний онлайн-калькулятор. В інтернеті їх багато, але ми розглянемо цей процес на прикладі сервісу WhatToMine. Він дозволяє отримувати дані про поточний профіт, ґрунтуючись на даних вашої ферми. Потрібно тільки вибрати відеокарти, які є у вас, а потім додати вартість електроенергії у вашому регіоні. Сайт порахує скільки ви можете заробити за день.

Слід розуміти, що враховується лише поточний стан справ ринку і ситуація може змінитися будь-якої миті. Курс може впасти або піднятися, складність майнінгу стане іншою або з'являться нові проекти. Так, наприклад, може припинитися видобуток ефіру у зв'язку з можливим переходом мережі на . Якщо припинитися майнінг ефіріуму, то фермам потрібно буде кудись направити вільні потужності, наприклад, у майнінг ZCash на GPU, що вплине на курс цієї монети. Подібних сценаріїв на ринку безліч і важливо розуміти, що сьогоднішня картина може не зберегтися протягом усього терміну окупності обладнання.

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

Налаштувати параметри GPU візуалізації

Якщо ваша програма гальмує, то частина або всі кадри оновлення екрана оновлюються більше ніж 16 мілісекунд. Щоб візуально побачити оновлення кадрів на екрані, можна увімкнути на пристрої спеціальну опцію (Profile GPU Rendering).

У вас з'явиться можливість побачити, скільки часу займає малювання кадрів. Нагадаю, що потрібно вкладатися у 16 ​​мілісекунд.

Опція доступна на пристрої, починаючи з Android 4.1. У пристрої слід активувати режим розробника. На пристроях з версією 4.2 і вище стандартний режим прихований. Для активації йде в Налаштування | Про телефоні сім разів клацаємо по рядку Номер збирання.

Після активації заходимо до Опції розробниката знаходимо пункт Налаштувати параметри GPU візуалізації(Profile GPU rendering), який слід увімкнути. У спливаючому вікні виберіть опцію На екрані у вигляді стовпчиків(On screen as bars). У цьому випадку графік виводитиметься поверх запущеної програми.

Ви можете протестувати не тільки свою програму, але й інші. Запустіть будь-яку програму і починайте працювати з нею. Під час роботи в нижній частині екрана ви побачите графік, що оновлюється. Горизонтальна вісьвідповідає за час. Вертикальна вісь показує час кожного кадру в мілісекундах. При взаємодії з додатком вертикальні смуги малюються на екрані, з'являючись зліва направо, показуючи продуктивність кадрів протягом якогось часу. Кожен такий стовпець є одним кадром для відтворення екрану. Чим вища висота стовпчика, тим більше часу йде на відмальовування. Тонка зелена лінія є орієнтиром і відповідає 16 мілісекунд за кадр. Таким чином, вам потрібно прагнути до того, щоб при вивченні вашої програми графік не вибивався за цю лінію.

Розглянемо збільшену версію графіка.

Зелена лінія відповідає за 16 мілісекунд. Щоб укластися в 60 кадрів на секунду, кожен стовпець графіка повинен малюватись нижче цієї лінії. У якихось моментах стовпець виявиться занадто великим і буде набагато вищим за зелену лінію. Це означає гальмування програми. Кожен стовпець має блакитний, фіолетовий (Lollipop та вище), червоний та помаранчевий кольори.

Блакитний колір відповідає за час, що використовується на створення та оновлення View.

Фіолетова частина є час, витрачений на передачу ресурсів рендерингу потоку.

Червоний колір є час для малювання.

Помаранчевий колір показує, скільки часу знадобилося процесору для очікування, коли GPU завершить свою роботу. Він є джерелом проблем при великих величинах.

Існують спеціальні методики зменшення навантаження на графічний процесор.

Налагодити показник GPU overdraw

Інше налаштування дозволяє дізнатися, як часто перемальовується один і той же ділянку екрану (тобто виконується зайва робота). Знову йдемо в Опції розробниката знаходимо пункт Налагодити показник GPU overdraw(Debug GPU Overdraw), який слід увімкнути. У спливаючому вікні виберіть опцію Показувати зони накладання(Show overdraw areas). Не лякайтесь! Деякі елементи на екрані змінять колір.

Поверніться до будь-якої програми та поспостерігайте за його роботою. Колір підкаже проблемні ділянки вашої програми.

Якщо колір у додатку не змінився, все відмінно. Немає накладання одного кольору поверх іншого.

Блакитний колір показує, що один шар малюється поверх нижнього шару. Добре.

Зелений колір – перемальовується двічі. Потрібно подумати про оптимізацію.

Рожевий колір – перемальовується тричі. Все дуже погано.

Червоний колір – перемальовується багато разів. Щось пішло не так.

Ви можете самостійно перевірити свою програму для пошуку проблемних місць. Створіть активність та помістіть на неї компонент TextView. Надайте кореневому елементу та текстовій мітці якесь тло в атрибуті android:background. У вас вийде наступне: спочатку ви зафарбували одним кольором нижній шар активності. Потім поверх неї малюється новий шар від TextView. До речі, насправді TextViewмалюється ще й текст.

У якихось моментах накладання кольорів не уникнути. Але уявіть собі, що ви так само встановили фон для списку ListViewщо займає всю площу активності. Система виконуватиме подвійну роботу, хоча нижній шар активності користувач ніколи не побачить. А якщо ви створите ще й власну розмітку для кожного елемента списку зі своїм фоном, то взагалі отримаєте перебір.

Маленька порада. Помістіть після методу setContentView()виклик методу, який прибере перирисування екрану кольором теми. Це допоможе прибрати одне зайве накладання кольору:

GetWindow().setBackgroundDrawable(null);



Розповісти друзям