CUDA cublas‹t›gbmv понимание

Недавно я хотел использовать простое умножение матрицы на вектор CUDA. Я нашел подходящую функцию в библиотеке cublas: cublas‹‹>>gbmv. Вот документация

Но на самом деле он очень беден, поэтому мне не удалось понять, что означают параметры kl и ku. Более того, я понятия не имею, что такое stride (его тоже надо указать). Есть краткое объяснение этих параметров (Страница 37), но, похоже, мне нужно знать кое-что еще.

Поиск в Интернете не дает тонны полезной информации по этому вопросу, в основном ссылки на другую версию документации.

Итак, у меня есть несколько вопросов к гуру GPU/CUDA/cublas:

  1. Как мне найти более понятные документы или руководства по использованию cublas?
  2. Если вы знаете, как использовать эту самую функцию, не могли бы вы объяснить мне, как мне ее использовать?
  3. Может быть, библиотека cublas какая-то необычная и все используют что-то более популярное, лучше документированное и так далее?

Большое спасибо.


person Ixanezis    schedule 23.05.2012    source источник
comment
Функции CUBLAS просто смоделированы на основе стандартного Fortran BLAS, для которого существует огромное количество документации. Поэтому попробуйте поискать SBGMV, и вы можете найти то, что ищете (ваша матрица действительно полосатая?)   -  person talonmies    schedule 23.05.2012


Ответы (1)


Итак, BLAS (подпрограммы базовой линейной алгебры) обычно представляет собой API для, как следует из названия, базовой линейной алгебры. алгебраические процедуры. Он включает векторно-векторные операции (уровень 1 blas-подпрограммы), матрично-векторные операции (уровень 2) и матрично-матричные операции (уровень 3). Доступен "reference" BLAS, который все правильно реализует, но в большинстве случаев вы будете использовать оптимизированная реализация для вашей архитектуры. cuBLAS — это реализация CUDA.

BLAS API был настолько успешным как API, описывающий базовые операции, что получил очень широкое распространение. Однако (а) имена невероятно загадочны из-за архитектурных ограничений того времени (это был 1979 год, и API был определен с использованием имен из 8 символов или меньше, чтобы обеспечить возможность широкой компиляции), и (б) он успешен, потому что он довольно общий, поэтому даже самые простые вызовы функций требуют множества посторонних аргументов.

Поскольку он настолько широко распространен, часто предполагается, что если вы занимаетесь числовой линейной алгеброй, вы уже знаете общую суть API, поэтому в руководствах по реализации часто не учитываются важные детали, и я думаю, что вы сталкиваетесь именно с этим.

Подпрограммы Уровня 2 и 3 обычно имеют имена функций в форме TMMOO.., где T — числовой тип матрицы/вектора (S/D для вещественного числа с одинарной/двойной точностью, C/Z для сложного с одинарной/двойной точностью), MM — это числовой тип матрицы/вектора. тип матрицы (GE для общего - например, просто плотная матрица, о которой больше ничего не скажешь; GB для общей ленточной матрицы, SY для симметричных матриц и т. д.), а OO — операция.

Все это сейчас кажется немного нелепым, но это работало и работает относительно хорошо — вы быстро научитесь сканировать их для знакомых операций, так что SGEMV представляет собой умножение вектора на общую матрицу одинарной точности (вероятно, это то, что вам нужно, а не SGBMV). , DGEMM — это умножение матрицы на матрицу двойной точности и т. д. Но это требует некоторой практики.

Поэтому, если вы посмотрите на инструкции cublas sgemv или в документацию оригинала, вы может пройтись по списку аргументов. Во-первых, основная операция

Эта функция выполняет умножение матрицы на вектор y = a op(A)x + b y, где A — матрица размера m x n, хранящаяся в формате по столбцам, x и y — векторы, а и — скаляры.

где op(A) может быть A, AT или AH. Итак, если вы хотите просто y = Ax, как это часто бывает, то a = 1, b = 0. и transa == CUBLAS_OP_N.

incx — шаг между различными элементами в x; есть много ситуаций, когда это может пригодиться, но если x — это просто простой массив 1d, содержащий вектор, тогда шаг будет равен 1.

И это все, что вам нужно для SGEMV.

person Jonathan Dursi    schedule 23.05.2012