Дозвольте зосередитись лише на CUDA та BLAS.
Швидкість над хост-реалізацією BLAS не є хорошою метрикою для оцінки пропускної здатності, оскільки це залежить від занадто багатьох факторів, хоча я згоден, що швидкість - це те, про що потрібно піклуватися.
Якщо ви подивитеся на орієнтири, опубліковані NVIDIA, і врахуйте, що Tesla M2090 має 1331 гігафлопсів (одна точність) та 665 Gigaflops (подвійний докт.) Пік, ви побачите, що для SGEMM і DGEMM ми вимірюємо пропускну здатність майже на 60% від теоретичного, що досить добре.
Але як ви визначаєте продуктивність флопів? Кількість / минуло час, коли кількість становить ( і - матричні розміри), а минулий час може включати чи не час перенесення з хоста в пам'ять GPU і назад. (Як правильно вказує Годрік, це має велике значення!)2м н кm × kk × n
Що стосується стійкої пропускної здатності з плаваючою точкою, я думаю, що флопи повинні бути обчислені без урахування даних та часу передачі результатів, і це ускладнює порівняння прискорення. Крім того, ви повинні враховувати розмір матриці, оскільки найкращі показники мають великі матриці.
Підсумок: прискорення роботи додатка в реальному житті може сильно відрізнятися від пікової вимірюваної продуктивності в лінійних алгебрах, оскільки ви повинні враховувати ініціалізацію GPU, час передачі даних тощо тощо.
Тому я не відповім на ваше запитання щодо найшвидшої бібліотеки, оскільки питання не має сенсу, якщо не буде визначено точну метрику та проблему. Все це говорило, я думаю, що cuBLAS та MAGMA - це дуже хороший вихідний пункт.