cblas_sgemmを使用して、intの2つの行列で高速行列乗算を実行しようとしています。
現在、すべてゼロを返しています。
単純な行列乗算を実行して、期待される出力データを再確認しましたが、ゼロではないはずです。
実用的な素朴なアプローチ:
typedef int mm_data_t;
void func1( mm_data_t *in1, mm_data_t *in2, mm_data_t *out, int N ){
int i, j, k;
for(i=0; i<N; i++){
for(k=0; k<N; k++){
int temp = in1[i*N+k];
for(j=0; j<N; j++){
out[i*N+j] += temp * in2[k*N+j];
}
}
}
}
そして、cblas_sgemmを使用します。
void func2( mm_data_t *in1, mm_data_t *in2, mm_data_t *out, int N ){
cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, N, N, N, 1.0, (float*)in1, N, (float*)in2, N, 0.0, (float*)out, N);
}
最適化のために1次元配列を使用しています。
入力データはブラックボックス化されていますが、一定です。