0

Intel MKLが提供するcblaを使用して、AとBの2つの行列の積をCに変換しようとしています。これがエラーになる理由はありますか?

double * A, *B, *C;

A = (double *) calloc(20 * 200, sizeof (double));
B = (double *) calloc(200 * 200, sizeof (double));
C = (double *) calloc(20 * 200, sizeof (double));

cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 
     20, 200, 200,
     1.0, A, 20,
     B, 200,
     0.0, C, 20);
4

1 に答える 1

2

cblas_dgemmのすべてのパラメーターを再確認してください。間違いがある場合、関数は配列の境界を超えて読み取っている可能性があります。不正なアドレスは依然として単一のメモリページ内にあるため、障害を引き起こさない小さなサイズの場合。(ただし、計算は間違っているので、確認する必要があります。)しかし、200x200マトリックスは2.5メガバイトのデータであるため、間違ったサイズを渡すと、間違いなくセグメンテーション違反が発生します。

于 2011-09-17T08:48:12.600 に答える