Есть ли в cublas-4.1.28 изменение параметров функции?

Я хочу сделать следующее матрично-матричное умножение с помощью cublas:

  cA(M by K) * cB(K by N) => cAout(M by N)

Я назначил cA с K в качестве ведущего индекса и cB с N в качестве ведущего индекса. Согласно справочнику cublas-4.0, я должен сделать:

HANDLE_ERROR(cublasSgemm(hdl, CUBLAS_OP_N, CUBLAS_OP_N, M, K, N, &alpha, cA, K, cB, N, &beta, cAout, N));    

но это не сработало. Вместо этого следующий код дает ожидаемые результаты, буквально переключая cA и cB:

HANDLE_ERROR(cublasSgemm(hdl, CUBLAS_OP_N, CUBLAS_OP_N, N, K, M, &alpha, cB, N, cA, K, &beta, cAout, N));    

Версия cublas, которую я использовал, — 4.1.28. Есть ли соглашение об изменении параметров функции? Спасибо!


person Hailiang Zhang    schedule 09.11.2012    source источник


Ответы (1)


Напомним, что CUBLAS использует правило хранения по столбцам. Предполагая, что эти матрицы не являются частью какой-то большей матрицы, начальное измерение cA равно M, ведущее измерение cB равно K, а начальное измерение cAout равно M. Таким образом, ваш вызов SGEMM должен выглядеть так:

HANDLE_ERROR(cublasSgemm(hdl, CUBLAS_OP_N, CUBLAS_OP_N, M, K, N, &alpha, cA, M, cB, K, &beta, cAout, M));    
person njuffa    schedule 10.11.2012