Просто любопытство. CuBLAS - это библиотека для базовых матричных вычислений. Но эти вычисления, в общем, также могут быть легко записаны в обычный код Cuda без использования CuBLAS. Итак, какова основная разница между библиотекой CuBLAS и вашей собственной программой Cuda для матричных вычислений?Обычный Cuda Vs CuBLAS?
ответ
Мы рекомендуем разработчикам использовать cuBLAS (или CUFFT, cuRAND, cuSPARSE, тяга, АЭС), когда подходит по многим причинам:
- Мы проверяем правильность всей каждой поддерживаемой аппаратной платформы, в том числе те, которые мы знаем, приходят но которые, возможно, еще не выпущены. Для сложных процедур вполне возможно иметь ошибки, которые появляются на одной архитектуре (или даже на одном чипе), но не на других. Это может произойти с изменениями в компиляторе, во время выполнения и т. Д.
- Мы тестируем наши библиотеки для регрессий производительности на одном и том же широком диапазоне платформ.
- Мы можем исправить ошибки в нашем коде, если вы их найдете. Жестко для нас сделать это с вашим кодом :)
- Мы всегда ищем, какие многоразовые полезные функциональные возможности могут быть вложены в библиотеку - это экономит вам массу времени разработки и упрощает чтение кода кодирования для API более высокого уровня.
Честно говоря, на данный момент я, вероятно, могу рассчитывать, с одной стороны, на количество разработчиков, которые фактически реализуют свои собственные процедуры с плотной линейной алгеброй, а не звонят cuBLAS. Это хорошее упражнение, когда вы изучаете CUDA, но для производственного кода обычно лучше использовать библиотеку.
(Раскрытие: я запускаю команду CUDA Library)
Затем укажите исходный код, иначе это будет очень трудоемким, если что-то пойдет не так из-за ошибки в cuBLAS – psihodelia
Существует несколько причин, по которым вы решили использовать библиотеку вместо написания своей собственной реализации. Три, с верхней части головы:
- Вам не нужно его писать. Зачем работать, когда кто-то другой сделал это за вас?
- Он будет оптимизирован. Поддерживаемые библиотеки NVIDIA, такие как cuBLAS, скорее всего, будут оптимизированы для всех текущих поколений графических процессоров, а более поздние версии будут оптимизированы для последующих поколений. Хотя большинство операций BLAS могут показаться довольно простыми для реализации, чтобы получить максимальную производительность, имеет для оптимизации аппаратного обеспечения (это не уникально для графических процессоров). Простая реализация SGEMM, например, может быть во много раз медленнее, чем оптимизированная версия.
- Они имеют тенденцию работать. Вероятно, у вас меньше шансов, что вы столкнетесь с ошибкой в библиотеке, тогда вы создадите ошибку в своей собственной реализации, которая укусит вас, когда вы измените какой-либо параметр в будущем.
Вышеуказанное относится не только к cuBLAS: если у вас есть метод, который находится в хорошо поддерживаемой библиотеке, вы, вероятно, сэкономите много времени и получите большую производительность, используя его относительно использования собственной реализации ,
+1, но что касается пункта 3, поиск ошибок в библиотеках может оказаться довольно уродливым, и это случается ... иногда. Также стоит упомянуть, что в случае каких-то конкретных проблем вы всегда можете написать какой-то «индивидуальный» код, который будет работать лучше в вашем случае. –
Это похоже на отношения между нормальным кодом C и библиотекой BLAS на процессоре, который делает оптимизацию уровня компилятора? Но графический процессор по своей сути многопоточен, поэтому ситуация может не совсем понравиться тем, что относятся к процессору. Скажем, добавление матрицы. – Fontaine007