/* ====================================================== mult-static-matrix.cu ====================================================== */ #include #include #include #include struct timeval start_time, stop_time; int elapsed; void printMatrix( float *A, int n ) { for (int i = 0; i < n; i++ ) { for (int j = 0; j < n; j++ ) { printf("%6.2f ", A[i*n+j]); } printf("\n"); } } int main(int argc, char *argv[]) { if ( argc <= 1 ) { printf("Usage: %s N (NxN matrix multiplication)\n\n", argv[0]); exit(1); } int N = atoi( argv[1] ); int K; float A[N][N], B[N][N], C[N][N]; // initialize x and y arrays on the host for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { A[i][j] = rand()/1000000000.0; B[i][j] = rand()/1000000000.0; } gettimeofday(&start_time, NULL); // Record current sys time as start_time for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { C[i][j] = 0.0; for (int k = 0; k < N; k++) C[i][j] = C[i][j] + A[i][k]*B[k][j]; // Vector product } gettimeofday(&stop_time, NULL); // Record current sys time as stop_time elapsed = (stop_time.tv_sec*1000000 + stop_time.tv_usec) - (start_time.tv_sec*1000000 + start_time.tv_usec); printf("Elasped time = %d micro secs\n", elapsed); if ( N < 10 ) { printf("Matrix A:\n"); printMatrix( (float*)A, N ); printf("\nMatrix B:\n"); printMatrix( (float*)B, N ); printf("\nMatrix C = A*B:\n"); printMatrix( (float*)C, N ); } return 0; }