Насколько большими должны быть матрицы, если я использую BLAS / cuBLAS, чтобы они работали лучше, чем обычная C / CUDA?

В настоящее время я внедряю Stochastic Gradient Descent на GPU, используя CUDA, Thrust и cuBLAS.

В моей первоначальной реализации я использовал простую CUDA для выполнения матрично-векторных операций, и теперь я пытаюсь оптимизировать это, используя вместо этого cuBLAS для таких операций.

В настоящее время я наблюдаю, что для матриц с размерами строк x cols для небольшого числа cols обычный CUDA неизменно превосходит cuBLAS, по-видимому, независимо от количества строк.
Однако для большого числа столбцов реализация cuBLAS выигрывает.

Поэтому мне было интересно: существуют ли какие-то практические правила / рекомендации о том, какими должны быть минимальные размеры матриц / векторов, после которых использование BLAS или cuBLAS будет более эффективным, чем простая C / CUDA, или это полностью зависит от приложения / BLAS? функционировать?

2

Решение

Я провел несколько тестов, которые я опубликую здесь:
Результаты приведены для задачи линейной регрессии, выполняемой за 10 итераций SGD, для наборов данных с 10000 строками. Реализация и другие результаты доступны здесь: https://github.com/thvasilo/cuda-sgd-sese-project

Время выполнения для 10-100 функций / столбцов:

введите описание изображения здесь

Поэтому для моей реализации точка изменения, при которой обычная CUDA становится медленнее, находится в 50 столбцах. Для cuBLAS существует 100% времени выполнения, но это может быть артефактом, эти эксперименты проводились только один раз, и различия в любом случае невелики.

При работе с большим количеством столбцов BLAS Lvl. 2 стабильно работает лучше:

введите описание изображения здесь

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector