0

cublas を使用して、次の行列 - 行列乗算を実行したいと考えています。

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

先行インデックスとして K を使用して cA を割り当て、先行インデックスとして N を使用して cB を割り当てました。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です。関数パラメーターに規則の変更はありますか? ありがとう!

4

1 に答える 1

3

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));    
于 2012-11-10T04:19:27.193 に答える