Обчислення на графічних процесорах. Обчислення на GPU Як Майні криптовалюта за допомогою відеокарти - покрокова інструкція

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

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

Майнінг на відеокарті - це процес видобутку криптовалюта за допомогою графічних процесорів (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, що вплине на курс цієї монети. Подібних сценаріїв на ринку безліч і важливо розуміти, що сьогоднішня картина може не зберегтися протягом усього терміну окупності обладнання.

Сьогодні новини про використання графічних процесорів для загальних обчислень можна почути на кожному розі. Такі слова, як CUDA, Stream і OpenCL, за якихось два роки стали чи не найбільш цитованими в айтішной інтернеті. Однак, що означають ці слова, і що несуть стоять за ними технології, відомо далеко не кожному. А для линуксоидов, які звикли "бути в прольоті", так і взагалі все це бачиться темним лісом.

народження GPGPU

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

Пізніше з'явилися багатоядерні процесори і багатопроцесорні системи, в яких таких компонентів було кілька. Це дозволило машинам виконувати кілька завдань одночасно, а загальна (теоретична) продуктивність системи піднялася рівно в стільки разів, скільки ядер було встановлено в машині. Однак виявилося, що виробляти і конструювати багатоядерні процесори занадто складно і дорого.

У кожному ядрі доводилося розміщувати повноцінний процесор складною і заплутаною x86-архітектури, зі своїм (досить об'ємним) кешем, конвеєром інструкцій, блоками SSE, безліччю блоків, що виконують оптимізації і т.д. і т.п. Тому процес нарощування кількості ядер суттєво загальмувався, і білі університетські халати, яким два або чотири ядра було явно мало, знайшли спосіб задіяти для своїх наукових розрахунків інші обчислювальні потужності, яких було в достатку на відеокарті (в результаті навіть з'явився інструмент BrookGPU, емулює додатковий процесор за допомогою викликів функцій DirectX і OpenGL).

Графічні процесори, позбавлені багатьох недоліків центрального процесора, виявилися відмінною і дуже швидкої лічильної машинкою, і зовсім скоро до напрацювань вчених умів почали придивлятися самі виробники GPU (а nVidia так і взагалі найняла більшість дослідників на роботу). В результаті з'явилася технологія nVidia CUDA, яка визначає інтерфейс, за допомогою якого стало можливим перенести обчислення складних алгоритмів на плечі GPU без будь-яких милиць. Пізніше за нею пішла ATi (AMD) з власним варіантом технології під назвою Close to Metal (нині Stream), а зовсім скоро з'явилася стала стандартом версія від Apple, яка отримала ім'я OpenCL.

GPU - наше все?

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

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

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

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

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

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

KGPU або ядро ​​Linux, прискорене GPU

Дослідники з університету Юти розробили систему KGPU, що дозволяє виконувати деякі функції ядра Linux на графічному процесорі за допомогою фреймворка CUDA. Для виконання цього завдання використовується модифіковане ядро ​​Linux і спеціальний демон, який працює в просторі користувача, слухає запити ядра і передає їх драйверу відеокарти за допомогою бібліотеки CUDA. Цікаво, що незважаючи на істотний оверхед, який створює така архітектура, авторам KGPU вдалося створити реалізацію алгоритму AES, який піднімає швидкість шифрування файлової системи eCryptfs в 6 разів.

Що є зараз?

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

Також народилися мультимедійні додатки, наприклад, кодировщик FlacCL, що дозволяє перекодувати звукову доріжку в формат FLAC. Підтримкою GPGPU обзавелися і деякі вже існуючі раніше додатки, найпомітнішим з яких став ImageMagick, який тепер вміє перекладати частину своєї роботи на графічний процесор за допомогою OpenCL. Також є проекти з перекладу на CUDA / OpenCL (не люблять юніксоід ATi) архиваторов даних і інших систем стиснення інформації. Найцікавіші з цих проектів ми розглянемо в наступних розділах статті, а поки спробуємо розібратися з тим, що нам потрібно для того, щоб все це завелося і стабільно працювало.

GPU вже давно обігнали x86-процесори в продуктивності

· По-друге, в систему повинні бути встановлені останні пропрієтарні драйвера для відеокарти, вони забезпечать підтримку як рідних для картки технологій GPGPU, так і відкритого OpenCL.

· І по-третє, так як поки дістрібутівостроітелі ще не почали поширювати пакети додатків з підтримкою GPGPU, нам доведеться збирати додатки самостійно, а для цього потрібні офіційні SDK від виробників: CUDA Toolkit або ATI Stream SDK. Вони містять у собі необхідні для складання додатків заголовки та бібліотеки.

Ставимо CUDA Toolkit

Йдемо по вищенаведеної посиланням і викачуємо CUDA Toolkit для Linux (вибрати можна з декількох версій, для дистрибутивів Fedora, RHEL, Ubuntu і SUSE, є версії як для архітектури x86, так і для x86_64). Крім того, там же треба скачати комплекти драйверів для розробників (Developer Drivers for Linux, вони йдуть першими в списку).

Запускаємо інсталятор SDK:

$ Sudo sh cudatoolkit_4.0.17_linux_64_ubuntu10.10.run

Коли установка буде завершена, приступаємо до установки драйверів. Для цього завершуємо роботу X-сервера:

# Sudo /etc/init.d/gdm stop

відкриваємо консоль і запускаємо інсталятор драйверів:

$ Sudo sh devdriver_4.0_linux_64_270.41.19.run

Після закінчення установки стартуємо ікси:

Щоб додаток змогли працювати з CUDA / OpenCL, прописуємо шлях до каталогу з CUDA-бібліотеками в змінну LD_LIBRARY_PATH:

$ Export LD_LIBRARY_PATH = / usr / local / cuda / lib64

Або, якщо ти встановив 32-бітну версію:

$ Export LD_LIBRARY_PATH = / usr / local / cuda / lib32

Також необхідно прописати шлях до заголовків файлів CUDA, щоб компілятор їх знайшов на етапі складання програми:

$ Export C_INCLUDE_PATH = / usr / local / cuda / include

Все, тепер можна приступити до складання CUDA / OpenCL-софта.

Ставимо ATI Stream SDK

Stream SDK не вимагає установки, тому скачаний з сайту AMD-архів можна просто розпакувати в будь-який каталог (найкращим вибором буде / opt) і прописати шлях до нього у всю ту ж змінну LD_LIBRARY_PATH:

$ Wget http://goo.gl/CNCNo

$ Sudo tar -xzf ~ / AMD-APP-SDK-v2.4-lnx64.tgz -C / opt

$ Export LD_LIBRARY_PATH = / opt / AMD-APP-SDK-v2.4-lnx64 / lib / x86_64 /

$ Export C_INCLUDE_PATH = / opt / AMD-APP-SDK-v2.4-lnx64 / include /

Як і у випадку з CUDA Toolkit, x86_64 необхідно замінити на x86 в 32-бітних системах. Тепер переходимо в кореневій каталог і розпаковуємо архів icd-registration.tgz (це свого роду безкоштовний ліцензійний ключ):

$ Sudo tar -xzf /opt/AMD-APP-SDK-v2.4-lnx64/icd-registration.tgz -З /

Перевіряємо правильність установки / роботи пакета за допомогою інструменту clinfo:

$ /opt/AMD-APP-SDK-v2.4-lnx64/bin/x86_64/clinfo

ImageMagick і OpenCL

Підтримка OpenCL з'явилася в ImageMagick вже досить давно, однак за замовчуванням вона не активована ні в одному дистрибутиві. Тому нам доведеться зібрати IM самостійно з початкових кодів. Нічого складного в цьому немає, все необхідне вже є в SDK, тому збірка не зажадає установки якихось додаткових бібліотек від nVidia або AMD. Отже, викачуємо / розпаковуємо архів з вихідними кодами:

$ Wget http://goo.gl/F6VYV

$ Tar -xjf ImageMagick-6.7.0-0.tar.bz2

$ Cd ImageMagick-6.7.0-0

$ Sudo apt-get install build-essential

Запускаємо конфигуратор і Грепан його висновок на предмет підтримки OpenCL:

$ LDFLAGS = -L $ LD_LIBRARY_PATH ./confi gure | grep -e cl.h -e OpenCL

Правильний результат роботи команди повинен виглядати приблизно так:

checking CL / cl.h usability ... yes

checking CL / cl.h presence ... yes

checking for CL / cl.h ... yes

checking OpenCL / cl.h usability ... no

checking OpenCL / cl.h presence ... no

checking for OpenCL / cl.h ... no

checking for OpenCL library ... -lOpenCL

Словом "yes" повинні бути відзначені або перші три рядки, або другі (або обидва варіанти відразу). Якщо це не так, значить, швидше за все, була неправильно инициализирована змінна C_INCLUDE_PATH. Якщо ж словом "no" відзначена останній рядок, значить, справа в змінної LD_LIBRARY_PATH. Якщо все окей, запускаємо процес складання / установки:

$ Sudo make install clean

Перевіряємо, що ImageMagick дійсно було скомпільовано з підтримкою OpenCL:

$ / Usr / local / bin / convert -version | grep Features

Features: OpenMP OpenCL

Тепер виміряємо отриманий виграш у швидкості. Розробники ImageMagick рекомендують використовувати для цього фільтр convolve:

$ Time / usr / bin / convert image.jpg -convolve "-1, -1, -1, -1, 9, -1, -1, -1, -1" image2.jpg

$ Time / usr / local / bin / convert image.jpg -convolve "-1, -1, -1, -1, 9, -1, -1, -1, -1" image2.jpg

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

FlacCL (Flacuda)

FlacCL - це кодировщик звукових файлів в формат FLAC, вповні в своїй роботі можливості OpenCL. Він входить до складу пакету CUETools для Windows, але завдяки mono може бути використаний і в Linux. Для отримання архіву з кодувальником виконуємо наступну команду:

$ Mkdir flaccl && cd flaccl

$ Wget www.cuetools.net/install/flaccl03.rar

$ Sudo apt-get install unrar mono

$ Unrar x fl accl03.rar

Щоб програма змогла знайти бібліотеку OpenCL, робимо символічне посилання:

$ Ln -s $ LD_LIBRARY_PATH / libOpenCL.so libopencl.so

Тепер запускаємо кодировщик:

$ Mono CUETools.FLACCL.cmd.exe music.wav

Якщо на екран буде виведено повідомлення про помилку "Error: Requested compile size is bigger than the required workgroup size of 32", значить, у нас в системі занадто слабка відеокарта, і кількість задіяних ядер слід скоротити до зазначеного числа за допомогою прапора '- group-size XX ', де XX - потрібну кількість ядер.

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

oclHashcat або брутфорс по-швидкому

Як я вже говорив, одними з перших підтримку GPGPU в свої продукти додали розробники різних крекерів і систем брутфорса паролів. Для них нова технологія стала справжнім святим граалем, який дозволив з легкістю перенести від природи легко распараллелівать код на плечі швидких GPU-процесорів. Тому не дивно, що зараз існують десятки найрізноманітніших реалізацій подібних програм. Але в цій статті я розповім тільки про одну з них - oclHashcat.

oclHashcat - це ломалка, яка вміє підбирати паролі по їх хешу з екстремально високою швидкістю, задіюючи при цьому потужності GPU за допомогою OpenCL. Якщо вірити вимірам, опублікованими на сайті проекту, швидкість підбору MD5-паролів на nVidia GTX580 становить до 15800 млн комбінацій в секунду, завдяки чому oclHashcat здатний знайти середній за складністю восьмісімвольний пароль за якісь 9 хвилин.

Програма підтримує OpenCL і CUDA, алгоритми MD5, md5 ($ pass. $ Salt), md5 (md5 ($ pass)), vBulletin< v3.8.5, SHA1, sha1($pass.$salt), хэши MySQL, MD4, NTLM, Domain Cached Credentials, SHA256, поддерживает распределенный подбор паролей с задействованием мощности нескольких машин.

$ 7z x oclHashcat-0.25.7z

$ Cd oclHashcat-0.25

І запустити програму (скористаємося пробним списком хеш і пробним словником):

$ ./OclHashcat64.bin example.hash? L? L? L? L example.dict

oclHashcat відкриє текст користувальницької угоди, з яким слід погодитися, набравши "YES". Після цього почнеться процес перебору, прогрес якого можна дізнатися після натискання . Щоб призупинити процес, кнопаем

Для відновлення - . Також можна використовувати прямий перебір (наприклад, від aaaaaaaa до zzzzzzzz):

$ ./OclHashcat64.bin hash.txt? L? L? L? L? L? L? L? L

І різні модифікації словника і методу прямого перебору, а також їх комбінації (про це можна прочитати у файлі docs / examples.txt). У моєму випадку швидкість перебору всього словника склала 11 хвилин, тоді як прямий перебір (від aaaaaaaa до zzzzzzzz) тривав близько 40 хвилин. В середньому швидкість роботи GPU (чіп RV710) склала 88,3 млн / с.

висновки

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


Яка програма потрібна для Майнінг криптовалюта? Що враховувати при виборі обладнання для Майнінг? Як Майні біткоіни і ефіріум за допомогою відеокарти на комп'ютері?

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

З вами Денис Кудерін - експерт журналу «ХітёрБобёр» з питань фінансів і їх грамотного множення. Я розповім, що собою являє Майнінг на відеокартів 17-18 роках, як правильно вибрати пристрій для заробітку криптовалюта, і чому добувати біткоіни на відкритих вже не вигідно.

Ви дізнаєтеся також, де купити саму продуктивну і потужну відеокартудля професійного Майнінг, і отримаєте експертні поради щодо підвищення ефективності своєї Майнінг-ферми.

1. Майнінг на відеокарті - легкі гроші або невиправдані витрати

Хороша відеокарта - не просто адаптер цифрових сигналів, а й потужний процесор, здатний вирішувати найскладніші обчислювальні завдання. І в тому числі - обчислювати хеш-код для ланцюжка блоків (блокчейна). Це робить графічні плати ідеальним інструментом для Майнінг- видобутку криптовалюта.

питання:Чому саме процесор відеокарти? Адже в будь-якому комп'ютері є центральний процесор? Хіба не логічно проводити обчислення з його допомогою?

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

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

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

Крім обчислень коду, Майнінг виконує ще кілька найважливіших завдань:

  • підтримка децентралізації системи:відсутність прихильності до серверів - основа блокчейна;
  • підтвердження транзакцій- без Майнінг операції не зможуть увійти в новий блок;
  • формування нових блоків системи- і занесення їх в єдиний для всіх комп'ютерів реєстр.

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

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

Потужна модель Antminer S9

На щастя для Майнер, біткоіни - не єдина на планеті криптовалюта, а одна з сотень. Інші цифрові гроші - ефіріуми, Zcash, Expanse, догкоіниі т.д. як і раніше вигідно добувати за допомогою відеокарт. Винагорода стабільне, а обладнання окупається приблизно через 6-12 місяців.

Але є ще одна проблема - дефіцит потужних відеокарт. Ажіотаж навколо криптовалюта привів до подорожчання цих пристроїв. Купити нову, придатну для Майнінг, відеокарту в Росії не так-то просто.

Початківцям Майнер доводиться замовляти відеоадаптери в інтернет-магазинах (в тому числі зарубіжних) або купувати старий товар. Останнє, до речі, робити не раджу: обладнання для Майнінг застаріває і зношується з фантастичною швидкістю.

На Авито навіть продають цілі ферми для видобутку криптовалюта.

Причин багато: одні Майнер уже «награлися» у видобуток цифрових грошей і вирішили зайнятися більш прибутковими операціями з криптовалюта (зокрема, біржовою торгівлею), інші зрозуміли, що конкурувати з потужними китайськими кластерами, що працюють на базі електростанцій, їм не під силу. Треті переключилися з відеокарт на «Асіка».

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

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

Так, шість років тому нагорода за один блокчейн мережі біткоіни дорівнювала 50 монетам, Зараз це лише 12,5 БТК. Складність обчислень при цьому збільшилася в 10 тисяч разів. Правда, і вартість самого біткоіни зросла за цей час багато разів.

2. Як Майні криптовалюта за допомогою відеокарти - покрокова інструкція

Є два варіанти Майнінг - сольний і в складі пулу. Одиночній здобиччю займатися складно - потрібно мати величезну кількість хешрейта(Одиниць потужності), ініційованих обчислення мали ймовірність успішного закриття.

99% всіх Майнер працює в пулах(Англ. Pool - басейн) - спільнотах, зайнятих розподілом обчислювальних задач. Спільний Майнінг нівелює фактор випадковості і гарантує стабільний прибуток.

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

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

Трохи більше шансів у «самотніх мисливців» за ефірами і деякими іншими крипто-монетами.

Через своєрідного алгоритму шифрування ETH не видобувають за допомогою спеціальних процесорів (їх ще не придумали). Використовують для цього виключно відеокарти. За рахунок ефіріумов і інших альткоінов ще тримаються численні фермери сучасності.

Однією відеокарти для створення повноцінної ферми буде недостатньо: 4 штуки - «прожитковий мінімум» для Майнера, Який розраховує на стабільний прибуток. Не менш важлива потужна системаохолодження відеоадаптерів. І не випускайте з уваги і таку статтю витрат, як плата за електроенергію.

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

Крок 1. Вибираємо пул

Найбільші в світі кріптовалютние пули дислокуються на території КНР, а також в Ісландії і в США. Формально ці спільноти не мають державної приналежності, але російськомовні сайти пулів - рідкість в інтернеті.

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

Вибираємо пул за наступними критеріями:

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

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

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

Але такі «дрібниці» ентузіастів ніколи не зупиняли. Тим більше, є програма під назвою Profitable Pool. Вона автоматично відстежує найвигідніші для видобутку альткоіни на поточний момент. Є і сервіс пошуку самих пулів, а також їх рейтинги в реальному часі.

Крок 2. Встановлюємо та налаштовуємо програму

Зареєструвавшись на сайті пулу, потрібно завантажити спеціальну програму-майнер - не вирахував же код вручну за допомогою калькулятора. Таких програм теж досить. Для біткоіни це - 50 minerабо CGMiner, Для ефіру - Ethminer.

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

Крок 3. Реєструємо гаманець

Якщо у вас ще немає біткоіни-гаманця або ефіріум-сховища, потрібно їх обов'язково зареєструвати. Гаманці викачуємо з офіційних сайтів.

Іноді допомога в цій справі надають самі пули, але не безоплатно.

Крок 4. Запускаємо Майнінг і стежимо за статистикою

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

Крок 5. Виводимо криптовалюта

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

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

- кращий в Рунеті ресурс такого плану. Цей моніторинг порівнює показники більш 300 обмінних пунктів і знаходить кращі котирування по цікавлять вас валютних парах. Більш того, сервіс вказує резерви криптовалюта в касі. У списках моніторингу - тільки перевірені і надійні обмінні сервіси.

3. На що звертати увагу при виборі відеокарти для Майнінг

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

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

1) Потужність

Тут все просто - чим вище продуктивність процесора, тим краще для обчислення хеш-коду. Відмінні показники забезпечують карти з об'ємом пам'яті більше 2 ГБ. І вибирайте пристрої з 256-розрядної шиною. 128-розрядні для цієї справи не годяться.

2) Енергоспоживання

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

3) Охолодження

Стандартна складається з 4-16 карт. Вона виробляє надмірну кількість тепла, згубний для заліза і небажане для самого фермера. В однокімнатній квартирі без кондиціонера жити і працювати буде, м'яко кажучи, некомфортно.

Якісне охолоджування процесора - неодмінна умова успішного Майнінг

Тому при виборі двох карт з однаковою продуктивністю віддавайте перевагу тій, у якій менше показник теплової потужності (TDP) . найкращі параметриохолодження демонструють карти Radeon. Ці ж пристрої довше всіх інших карт працюють в активному режимі без зносу.

Додаткові кулери не тільки відведуть зайве тепло від процесорів, але і продовжать термін їх життя.

4) Можливість розгону

Розгін - примусове підвищення робочих показників відеокарти. Можливість «розігнати карту» залежить від двох параметрів - частоти графічного процесора і частоти відеопам'яті. Саме їх ви і будете розганяти, якщо захочете підвищити обчислювальні потужності.

Які відеокарти брати?Вам знадобляться пристрої останнього поколінняабо щонайменше графічні прискорювачі, випущені не раніше, ніж 2-3 роки тому. Майнер використовують карти AMD Radeon, Nvidia, Geforce GTX.

Погляньте на таблицю окупності відеокарт (дані актуальні на кінець 2017 року):

4. Де купити відеокарту для Майнінг - огляд ТОП-3 магазинів

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

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

1) TopComputer

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

На момент написання статті в продажу є карти AMD, Nvidia(8 Gb) і інші різновиди, які підходять для Майнінг.

2) Мybitcoinshop

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

Компанія неодноразово отримувала неофіційне звання кращого в РФ магазину для Майнер. Оперативний сервіс, доброзичливе ставлення до клієнтів, передове устаткування - головні складові успіху.

3) Ship Shop America

Купівля і доставка товарів з США. Посередницька компанія для тих, кому потрібні дійсно ексклюзивні і самі передові товари для Майнінг.

Прямий партнер провідного виробника відеокарт для ігор і Майнінг - Nvidia. Максимальний термін очікування товару - 14 днів.

5. Як збільшити дохід від Майнінг на відеокарті - 3 корисних ради

Нетерплячі читачі, які бажають розпочати Майнінг прямо зараз і отримувати доходи вже з завтрашнього ранку, неодмінно запитають - скільки заробляють Майнер?

Заробітки залежать від обладнання, курсу криптовалюта, ефективності пулу, потужності ферми, кількості хешрейта і купи інших факторів. Одним вдається отримувати щомісяця до 70 000 на рублях , Інші задовольняються 10 доларамив тиждень. Це нестабільний і непередбачуваний бізнес.

Корисні поради допоможуть підвищити доходи і оптимізувати витрати.

Будете Майні стрімко зростаючу в ціні валюту, заробите більше. Для прикладу - ефір зараз коштує близько 300 доларів, Біткоіни - більше 6000 . Але враховувати треба не тільки поточну вартість, а й темпи зростання за тиждень.

Порада 2. Використовуйте калькулятор Майнінг для вибору оптимального обладнання

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

Ядер багато не буває ...

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

У даній статті описані основні поняття, для того щоб було легше орієнтуватися в теорії gpu-оптимізації і базові правила, для того щоб до цих понять, доводилося звертатися по-рідше.

Причини по якій GPU ефективні для роботи з великими обсягами даних, що вимагають обробки:

  • у них великі можливості по паралельному виконанню завдань (багато-багато процесорів)
  • висока пропускна здатність у пам'яті

Пропускна здатність пам'яті (memory bandwidth)- це скільки інформації - біт або гігабайт - може може бути передано за одиницю часу секунду або процесорний такт.

Одне із завдань оптимізації - задіяти по максимуму пропускну здатність - збільшити показники throughput(В ідеалі вона повинна бути дорівнює memory bandwidth).

Для поліпшення використання пропускної здатності:

  • збільшити обсяг інформації - використовувати пропускної канал на повну (наприклад кожен потік працює з флоат4)
  • зменшувати латентність - затримку між операціями

Затримка (latency)- проміжок часу між моментами, коли контролер запросив конкретну осередок пам'яті і тим моментом, коли дані стали доступні процесору для виконання інструкцій. На саму затримку ми ніяк вплинути не можемо - ці обмеження присутні на апаратному рівні. Саме за рахунок цієї затримки процесор може одночасно обслуговувати кілька потоків - поки потік А запросив виділити йому пам'яті, потік Б може щось порахувати, а потік З чекати поки до нього прийдуть запитані дані.

Як знизити затримку (latency) якщо використовується синхронізація:

  • зменшити число потоків в блоці
  • збільшити число груп-блоків

Використання ресурсів GPU на повну - GPU Occupancy

У високочолих розмовах про оптимізацію часто мелькає термін - gpu occupancyабо kernel occupancy- він відображає ефективність використання ресурсів-потужностей відеокарти. Окремо відзначу - якщо ви навіть і використовуєте всі ресурси - це аж ніяк не означає що ви використовуєте їх правильно.

Обчислювальні потужності GPU - це сотні процесорів жадібних до обчислень, при створенні програми - ядра (kernel) - на плечі програміста лягати тягар розподілу навантаження на них. Помилка може привести до того, що велика частина цих дорогоцінних ресурсів може безцільно простоювати. Зараз я поясню чому. Почати доведеться здалеку.

Нагадаю, що варп ( warp в термінології NVidia, wavefront - в термінології AMD) - набір потоків які одночасно виконують одну й ту ж саму функцію-Кернел на процесорі. Потоки, об'єднані програмістом в блоки розбиваються на варпа планувальником потоків (окремо для кожного мультипроцессора) - поки один варп працює, другий чекає обробки запитів до пам'яті і т.д. Якщо якісь з потоків варпа все ще виконують обчислення, а інші вже зробили все що могли - має місце бути неефективне використання обчислювального ресурсу - в народі іменується простоювання потужностей.

Кожна точка синхронізації, кожне розгалуження логіки може породити таку ситуацію простою. Максимальна дивергенція (розгалуження логіки виконання) залежить від розміру варпа. Для GPU від NVidia - це 32, для AMD - 64.

Для того щоб знизити простої мультипроцессора під час виконання варпа:

  • мінімізувати час очікування бар'єрів
  • мінімізувати розбіжність логіки виконання в функції-Кернелі

Для ефективного вирішення даного завдання має сенс розібратися - як же відбувається формування варпа (для випадку з кількома размерностями). Насправді порядок простий - в першу чергу по X, потім по Y і, в останню чергу, Z.

ядро запускається з блоками розмірністю 64 × 16, потоки розбиваються по варпа в порядку X, Y, Z - тобто перші 64 елемента розбиваються на два варпа, потім другі і т.д.

Ядро запускається з блоками розмірністю 16 × 64. У перший варп додаються перші і другі 16 елементів, в другій варп - треті і четверті і т.д.

Як знижувати дивергенцію (пам'ятаєте - розгалуження - не завжди причина критичною втрати продуктивності)

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

Як використовувати ресурси GPU по максимуму

Ресурси GPU, на жаль, теж мають свої обмеження. І, строго кажучи, перед запуском функції-Кернел має сенс визначити ліміти і при розподілі навантаження ці ліміти врахувати. Чому це важливо?

У відеокарт є обмеження на загальне число потоків, яке може виконувати один мультипроцессор, максимальне число потоків в одному блоці, максимальне число варпа на одному процесорі, обмеження на різні види пам'яті і т.п. Всю цю інформацію можна запросити як програмно, через відповідне API так і попередньо за допомогою утиліт з SDK. (Модулі deviceQuery для пристроїв NVidia, CLInfo - для відеокарт AMD).

Загальна практика:

  • число блоків / робочих груп потоків має бути кратно кількості потокових процесорів
  • розмір блоку / робочої групи повинен бути кратний розміру варпа

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

В голові всі ці деталі тримати швидко набридає, тому для розрахунок gpu-occupancy NVidia запропонувала несподіваний інструмент - ексельний (!) Калькулятор набитий макросами. Туди можна ввести інформацію по максимальному числу потоків для SM, число регістрів і розмір загальної (shared) пам'яті доступних на потоковому процесорі, і використовувані параметри запуску функцій - а він видає в процентах ефективність використання ресурсів (і ви рвете на голові волосся усвідомлюючи що щоб задіяти всі ядра вам не вистачає регістрів).

інформація по використанню:
http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/#calculating-occupancy

GPU і операції з пам'яттю

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

Проблема йде в наступному - кожен запит повертає у відповідь шматочок даних розміром кратний 128 бітам. А кожен потік використовує лише чверть його (в разі звичайної чотирьох-байтовой змінної). Коли суміжні потоки одночасно працюють з даними розташованими послідовно в осередках пам'яті - це знижує загальне число звернень до пам'яті. Називається це явище - об'єднані операції читання і запису ( coalesced access - good! both read and write) - і при вірній організації коду ( strided access to contiguous chunk of memory - bad!) Може відчутно поліпшити продуктивність. При організації свого ядра - пам'ятайте - суміжний доступ - в межах елементів одного рядка пам'яті, робота з елементами стовпчика - це вже не так ефективно. Хочете більше деталей? мені сподобалася ось ця pdf - або гуглити на предмет " memory coalescing techniques “.

Лідируючі позиції в номінації "вузьке місце" займає інша операція з пам'яттю - копію пам'яті хоста в ГПУ . Копіювання відбувається не аби як, а з спеціально виділеної драйвером і системою області пам'яті: при запиті на копіювання даних - система спочатку копіює туди ці дані, а вже потім заливає їх в GPU. Швидкість транспортування даних обмежена пропускною здатністю шини PCI Express xN (де N число ліній передачі даних) через які сучасні відеокарти спілкуються з хостом.

Однак, зайве копіювання повільної пам'яті на хості - це часом невиправдані витрати. Вихід - використовувати так звану pinned memory - спеціальним чином позначену область пам'яті, так що операційна система не має можливості виконувати з нею будь-які операції (наприклад - вивантажити в свап / перемістити на свій розсуд і т.п.). Передача даних з хоста на відеокарту здійснюється без участі операційної системи - асинхронно, через DMA (Direct memory access).

І, на останок, ще трохи про пам'ять. Колективна пам'ять на мультипроцесорі зазвичай організована у вигляді банків пам'яті містять 32 бітні слова - дані. Число банків за доброю традицією варіюється від одного покоління GPU до іншого - 16/32 Якщо кожен потік звертається за даними в окремий банк - все добре. Інакше виходить кілька запитів на читання / запис до одного банку і ми отримуємо - конфлікт ( shared memory bank conflict). Такі конфліктні звернення серіалізуются і відповідно виконуються послідовно, а не паралельно. Якщо до одного банку звертаються все потоки - використовується "широкомовний" відповідь ( broadcast) І конфлікту немає. Існує кілька способів ефективно боротися з конфліктами доступу, мені сподобалося опис основних методик щодо позбавлення від конфліктів доступу до банків пам'яті – .

Як зробити математичні операції ще швидше? Пам'ятати що:

  • обчислення подвійної точності - це високе навантаження операції з fp64 >> fp32
  • константи виду 3.13 в коді, за замовчуванням, інтерпретується як fp64 якщо явно не вказувати 3.14f
  • для оптимізації математики не зайвим буде впоратися в гайдах - а чи немає якихось прапорців у компілятора
  • виробники включають в свої SDK функції, які використовують особливості пристроїв для досягнення продуктивності (часто - на шкоду переносимості)

Для розробників CUDA має сенс звернути пильну увагу на концепцію cuda stream,дозволяють запускати відразу декілька функцій-ядер на одному пристрої або поєднувати асинхронне копіювання даних з хоста на пристрій під час виконання функцій. OpenCL, поки, такого функціоналу не надає 🙁

Брухт для профілювання:

NVifia Visual Profiler - цікава утилитка, аналізує ядра як CUDA так і OpenCL.

P. S. Як більш розлогого керівництва по оптимізації, можу порекомендувати гуглити всілякі best practices guide для OpenCL і CUDA.

  • ,