PLASMA  2.4.5
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
time_dgemm.c
Go to the documentation of this file.
1 
6 #define _TYPE double
7 #define _PREC double
8 #define _LAMCH LAPACKE_dlamch_work
9 
10 #define _NAME "PLASMA_dgemm"
11 /* See Lawn 41 page 120 */
12 #define _FMULS FMULS_GEMM(M, N, K)
13 #define _FADDS FADDS_GEMM(M, N, K)
14 
15 #include "./timing.c"
16 
17 static int
18 RunTest(int *iparam, double *dparam, real_Double_t *t_)
19 {
20  double alpha, beta;
21  PASTE_CODE_IPARAM_LOCALS( iparam );
22 
23  LDB = max(K, iparam[IPARAM_LDB]);
24  LDC = max(M, iparam[IPARAM_LDC]);
25 
26  /* Allocate Data */
27  PASTE_CODE_ALLOCATE_MATRIX( A, 1, double, LDA, K );
28  PASTE_CODE_ALLOCATE_MATRIX( B, 1, double, LDB, N );
29  PASTE_CODE_ALLOCATE_MATRIX( C, 1, double, LDC, N );
30  PASTE_CODE_ALLOCATE_MATRIX( C2, check, double, LDC, N );
31 
32  PLASMA_dplrnt( M, K, A, LDA, 453 );
33  PLASMA_dplrnt( K, N, B, LDB, 5673 );
34  PLASMA_dplrnt( M, N, C, LDC, 740 );
35 
36  LAPACKE_dlarnv_work(1, ISEED, 1, &alpha);
37  LAPACKE_dlarnv_work(1, ISEED, 1, &beta );
38 
39  if (check)
40  {
41  memcpy(C2, C, LDC*N*sizeof(double));
42  }
43 
44  START_TIMING();
45  PLASMA_dgemm( PlasmaNoTrans, PlasmaNoTrans, M, N, K, alpha, A, LDA, B, LDB, beta, C, LDC );
46  STOP_TIMING();
47 
48  /* Check the solution */
49  if (check)
50  {
52  alpha, A, LDA, B, LDB, beta, C, C2, LDC,
53  &(dparam[IPARAM_ANORM]),
54  &(dparam[IPARAM_BNORM]),
55  &(dparam[IPARAM_XNORM]));
56  free(C2);
57  }
58 
59  free( A );
60  free( B );
61  free( C );
62 
63  return 0;
64 }