В настоящее время я реализую Stochastic Gradient Descent на GPU, используя CUDA, Thrust и cuBLAS.Насколько велики должны быть матрицы, если я использую BLAS/cuBLAS, чтобы он работал лучше обычного C/CUDA?
В моей первоначальной реализации я использовал простой CUDA для выполнения операций с матричным вектором, и теперь я пытаюсь оптимизировать это, используя вместо этого cuBLAS для таких операций.
В настоящее время я наблюдаю за тем, что для матриц строк размера x cols для небольшого количества cols простая CUDA последовательно превосходит cuBLAS, по-видимому, независимо от количества строк. Однако для большого количества колонок реализация cuBLAS побеждает.
Поэтому я задавался вопросом: существуют ли какие-либо правила большого пальца/рекомендации о том, какие должны быть минимальные размеры матриц/векторов, после которых использование BLAS или cuBLAS будет лучше, чем обычный C/CUDA, или это полностью зависит от функция приложения/BLAS?
Связанные вопрос: http://stackoverflow.com/q/26417475/209882 – Bar
Обратите внимание, что BLAS2 (матрица-вектор) операции, как правило, ограничена пропускной способностью памяти. Если возможно, вы хотели бы использовать операции BLAS3. Существует множество различных операций BLAS2, каждый из которых имеет свои собственные характеристики производительности (которые могут отличаться по архитектуре графического процессора), поэтому ваш вопрос кажется слишком широким. Проверьте, применимы ли какие-либо пакетные операции к вашему прецеденту, поскольку они обеспечивают лучшую производительность для небольших матриц, которые в противном случае используют только часть ресурсов машины. – njuffa
Вы выполняете именно то, что было в вопросе, с которым вы связались, - эталоном для вашего домена и размера проблемы и используйте эти данные для управления вашей эвристикой. Я очень * стараюсь закрыть это как дубликат этого вопроса. – talonmies