Які найшвидші доступні реалізації BLAS / LAPACK або інших лінійних підпрограм алгебри в системах GPU?


11

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

Відповіді:


9

Я не можу відповісти на другу половину вашого питання, що стосується інших реалізацій там, але я можу дати деяке розуміння проблем. Для довідки я особисто використовував ViennaCL на nVidia GTX 560 Ti з 2 Гб пам'яті для моїх орієнтирів.

Під час серійного коду на i5 середнього діапазону я побачив прискорення для множних щільних матриць приблизно 40х. Для таких операцій, як векторне скалярне множення, я бачив швидкість 1000x. Однак 800 фунтів горили в кімнаті - це пропускна здатність пам’яті. Для більшості комерційних графічних процесорів ви будете використовувати щось на зразок PCIe, що обмежує пропускну здатність приблизно 6 Гб / с. У моєму випадку, хоча обчислення було на 40 разів швидше, три копії матриць (дві до GPU та одна назад) займали приблизно стільки ж часу, скільки й просто обчислення на процесорі.

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

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

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


3
Ось чому ви хочете, щоб об’єкти, які живуть на графічному процесорі протягом тривалого періоду часу, а не охоче копіювались назад до центрального процесора. Наприклад, матриці та вектори PETSc містять прапор, який вказує, чи є CPU та / або GPU поточними. Операція на GPU позначає версію процесора як брудну та навпаки. Копія робиться прозоро, якщо ви запитуєте пам'ять у забрудненому місці, але це рідко, якщо всі алгоритмічні компоненти, які стосуються великих структур даних, можуть виконуватись там же.
Джед Браун

5

Дозвольте зосередитись лише на CUDA та BLAS.

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

Якщо ви подивитеся на орієнтири, опубліковані NVIDIA, і врахуйте, що Tesla M2090 має 1331 гігафлопсів (одна точність) та 665 Gigaflops (подвійний докт.) Пік, ви побачите, що для SGEMM і DGEMM ми вимірюємо пропускну здатність майже на 60% від теоретичного, що досить добре.

Але як ви визначаєте продуктивність флопів? Кількість / минуло час, коли кількість становить ( і - матричні розміри), а минулий час може включати чи не час перенесення з хоста в пам'ять GPU і назад. (Як правильно вказує Годрік, це має велике значення!)2мнкм×кк×н

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.