【C言語・BLAS】 行列ベクトル積におけるエラー
今、BLASを使って行列ベクトル積を計算するのにどれくらい時間がかかるか計測しようとしています。
しかし、短いプログラムにも関わらずC用インターフェースのスレッド並列版BLASを呼び出す部分でFloating point exceptionエラーが出てしまいます。
なぜエラーが出るのか全く分からないので、どなたか分かる方ご意見いただけないでしょうか?
#define SEED 1
#define N 100
/*
extern void dgemv(char transa, int m, int n, double alpha, double *a, int lda, double *x, int incx, double beta, double *y, int incy);
*/
int main( int argc, char *argv[] ){
char TRANS = 'T';
int INC = 1;
double ALPHA = 1.0;
double BETA = 0.0;
int i, j, n1, n2;
double **matrix;
double *vector;
double *result;
double start_time;
double end_time;
fprintf( stdout, "____performance evaluation start____\n" );
srand(SEED);
matrix = Malloc2DDouble( N, N );
vector = (double *) malloc ( sizeof(double) * N );
result = (double *) malloc ( sizeof(double) * N );
n1 = N; n2 = N;
#pragma omp parallel
{
#pragma omp for private(j)
for( i=0; i<n1; i++ ){
for( j=0; j<n2; j++ ){
matrix[i][j] = ( ( rand() / (double)RAND_MAX ) - 0.5 );
}
vector[i] = ( ( rand() / (double)RAND_MAX ) - 0.5 );
result[i] = 0.0;
}
}
start_time = GetTime();
dgemv( TRANS, n2, n1, ALPHA, matrix[0], n2, vector, INC, BETA, result, INC );
end_time = GetTime();
return EXIT_SUCCESS;
}
お礼
ありがとうございました
補足
pravate節をつけた場合とつけない場合の違いがよく分かりません(上のプログラムの場合) 具体的にどのような処理になるのですか