content:MPI2: cleanup hostfile syntax description.
[parallel_computing.git] / src / matrix_multiplication_cuda / matmult_skeleton.cu
1
2 #define iprint 0
3 #define Epsilon 1.0e-4
4
5 // dimension of block
6 #define TILE_SIZE 16
7
8
9 void MatrixOut( float *M, int MatrixSize )
10
11
12
13 void MatrixInitial( float *M, int MatrixSize )
14 {
15   int i, j;
16
17   for ( i=0; i<MatrixSize; i++ )
18     for ( j=0; j<MatrixSize; j++ )
19       {
20         M[i*MatrixSize+j] = (double)rand()/(double)RAND_MAX; 
21         M[i*MatrixSize+j] = i + j;
22       }
23 }
24
25
26 void MatrixMultOnCPU( float *M, float *N, float *P, int MatrixSize )
27 {
28   int i, j, k;
29   float temp;
30
31   for ( i=0; i<MatrixSize; i++ )
32     for ( j=0; j<MatrixSize; j++ )
33       {
34         temp = 0.0;
35         for ( k=0; k<MatrixSize; k++ )
36           temp = temp + M[i*MatrixSize+k] * N[k*MatrixSize+j];
37         P[i*MatrixSize+j] = temp;
38       }
39 }
40
41
42
43 // use share memory for efficiency by avoiding
44 // high latenccy global memory
45 __global__ void MatrixMultKernel( float *Md, float *Nd, float *Pd, 
46                                   int num_block, int MatrixSize)
47 {
48   int bx, by, tx, ty, Row, Col, k, m;
49   float Pvalue;
50   __shared__ float Mds[TILE_SIZE][TILE_SIZE];
51   __shared__ float Nds[TILE_SIZE][TILE_SIZE];
52
53 }
54
55
56
57 void MatrixMultOnDevice( float *M, float *N, float *P, 
58                          int MatrixSize )
59
60
61
62 int main ( int argc, char *argv[] )
63 {
64   int MatrixSize, size;
65   int i, j, check;
66   float *M, *N, *P, *PCheck;
67   struct timeval t1, t2, t3, t4;
68   float  time_CPU, time_GPU;
69
70   // matrix size
71   MatrixSize = 2;
72   if ( argc == 2 )
73     MatrixSize = atoi( argv[1] );
74   printf("\n Matrix dimension: %d\n", MatrixSize );
75
76   // memory space for the matrices
77   size = MatrixSize * MatrixSize * sizeof(float);
78   M = (float *)malloc( size );
79   N = (float *)malloc( size );
80   P = (float *)malloc( size );
81   PCheck = (float *)malloc( size );
82
83
84 }