Exemplo n.º 1
0
void accel_multMatrix(double* m1,double* m2, int ndata,int ndata2,int npol, double* out){

   int m,n,k;
   double alpha=1.0,beta=0;

   m=npol;
   n=ndata;
   k=ndata2;
   /*
	* An important note about this. FORTRAN effectively transposes all matricies becaue
	* the memory is ordered differently.
	*
	* Therefore, to compute C=A.B we do C=B.A where there is an implicit transpose of all three
	* matricies.
	*
	* M.Keith 2013.
	*/
   F77_dgemm("N","N",&m,&n,&k,&alpha,m2,&m,m1,&k,&beta,out,&m);


   /*
	  m=ndata;
	  n=npol;
	  k=ndata;

	  F77_dgemm("N","T",&m,&n,&k,&alpha,m1,&m,m2,&n,&beta,out,&m);
	  */
}
Exemplo n.º 2
0
void bl1_dgemm_blas( trans1_t transa, trans1_t transb, int m, int n, int k, double* alpha, double* a, int lda, double* b, int ldb, double* beta, double* c, int ldc )
{
#ifdef BLIS1_ENABLE_CBLAS_INTERFACES
	enum CBLAS_ORDER     cblas_order = CblasColMajor;
	enum CBLAS_TRANSPOSE cblas_transa;
	enum CBLAS_TRANSPOSE cblas_transb;

	bl1_param_map_to_netlib_trans( transa, &cblas_transa );
	bl1_param_map_to_netlib_trans( transb, &cblas_transb );

	cblas_dgemm( cblas_order,
	             cblas_transa,
	             cblas_transb,
	             m,
	             n,
	             k,
	             *alpha,
	             a, lda,
	             b, ldb,
	             *beta,
	             c, ldc );
#else
	char blas_transa;
	char blas_transb;

	bl1_param_map_to_netlib_trans( transa, &blas_transa );
	bl1_param_map_to_netlib_trans( transb, &blas_transb );

	F77_dgemm( &blas_transa,
	           &blas_transb,
	           &m,
	           &n,
	           &k,
	           alpha,
	           a, &lda,
	           b, &ldb,
	           beta,
	           c, &ldc );
#endif
}
Exemplo n.º 3
0
void cblas_dgemm(const CBLAS_LAYOUT layout, const CBLAS_TRANSPOSE TransA,
                 const CBLAS_TRANSPOSE TransB, const int M, const int N,
                 const int K, const double alpha, const double  *A,
                 const int lda, const double  *B, const int ldb,
                 const double beta, double  *C, const int ldc)
{
   char TA, TB;
#ifdef F77_CHAR
   F77_CHAR F77_TA, F77_TB;
#else
   #define F77_TA &TA
   #define F77_TB &TB
#endif

#ifdef F77_INT
   F77_INT F77_M=M, F77_N=N, F77_K=K, F77_lda=lda, F77_ldb=ldb;
   F77_INT F77_ldc=ldc;
#else
   #define F77_M M
   #define F77_N N
   #define F77_K K
   #define F77_lda lda
   #define F77_ldb ldb
   #define F77_ldc ldc
#endif

   extern int CBLAS_CallFromC;
   extern int RowMajorStrg;
   RowMajorStrg = 0;
   CBLAS_CallFromC = 1;

   if( layout == CblasColMajor )
   {
      if(TransA == CblasTrans) TA='T';
      else if ( TransA == CblasConjTrans ) TA='C';
      else if ( TransA == CblasNoTrans )   TA='N';
      else
      {
         cblas_xerbla(2, "cblas_dgemm","Illegal TransA setting, %d\n", TransA);
         CBLAS_CallFromC = 0;
         RowMajorStrg = 0;
         return;
      }

      if(TransB == CblasTrans) TB='T';
      else if ( TransB == CblasConjTrans ) TB='C';
      else if ( TransB == CblasNoTrans )   TB='N';
      else
      {
         cblas_xerbla(3, "cblas_dgemm","Illegal TransB setting, %d\n", TransB);
         CBLAS_CallFromC = 0;
         RowMajorStrg = 0;
         return;
      }

      #ifdef F77_CHAR
         F77_TA = C2F_CHAR(&TA);
         F77_TB = C2F_CHAR(&TB);
      #endif

      F77_dgemm(F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A,
       &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc);
   } else if (layout == CblasRowMajor)
   {
      RowMajorStrg = 1;
      if(TransA == CblasTrans) TB='T';
      else if ( TransA == CblasConjTrans ) TB='C';
      else if ( TransA == CblasNoTrans )   TB='N';
      else
      {
         cblas_xerbla(2, "cblas_dgemm","Illegal TransA setting, %d\n", TransA);
         CBLAS_CallFromC = 0;
         RowMajorStrg = 0;
         return;
      }
      if(TransB == CblasTrans) TA='T';
      else if ( TransB == CblasConjTrans ) TA='C';
      else if ( TransB == CblasNoTrans )   TA='N';
      else
      {
         cblas_xerbla(2, "cblas_dgemm","Illegal TransB setting, %d\n", TransB);
         CBLAS_CallFromC = 0;
         RowMajorStrg = 0;
         return;
      }
      #ifdef F77_CHAR
         F77_TA = C2F_CHAR(&TA);
         F77_TB = C2F_CHAR(&TB);
      #endif

      F77_dgemm(F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B,
                  &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc);
   }
   else  cblas_xerbla(1, "cblas_dgemm", "Illegal layout setting, %d\n", layout);
   CBLAS_CallFromC = 0;
   RowMajorStrg = 0;
   return;
}
Exemplo n.º 4
0
void OpenMPBLAS3::gemm(
    const enum CBLAS_ORDER order,
    const enum CBLAS_TRANSPOSE TransA,
    const enum CBLAS_TRANSPOSE TransB,
    const IndexType m,
    const IndexType n,
    const IndexType k,
    const double alpha,
    const double* A,
    const IndexType lda,
    const double* B,
    const IndexType ldb,
    const double beta,
    double* C,
    const IndexType ldc,
    SyncToken* syncToken )
{
    if ( syncToken )
    {
        LAMA_LOG_WARN( logger, "no asynchronous execution for openmp possible at this level." )
    }

    char TA, TB;
#ifdef F77_CHAR
    F77_CHAR F77_TA, F77_TB;
#else
#define F77_TA &TA
#define F77_TB &TB
#endif
#ifdef F77_INT
    F77_INT F77_M = m, F77_N = n, F77_K = k, F77_lda = lda, F77_ldb = ldb;
    F77_INT F77_ldc = ldc;
#else
#define F77_M m
#define F77_N n
#define F77_K k
#define F77_lda lda
#define F77_ldb ldb
#define F77_ldc ldc
#endif
    IndexType RowMajorStrg;
    RowMajorStrg = 0;

    if ( order == CblasColMajor )
    {
        if ( TransA == CblasTrans )
        {
            TA = 'T';
        }
        else if ( TransA == CblasConjTrans )
        {
            TA = 'C';
        }
        else if ( TransA == CblasNoTrans )
        {
            TA = 'N';
        }
        else
        {
            BLASHelper::XERBLA_cpu( RowMajorStrg, 2, "cblas_dgemm", "Illegal TransA setting, %d\n", TransA );
            RowMajorStrg = 0;
            return;
        }

        if ( TransB == CblasTrans )
        {
            TB = 'T';
        }
        else if ( TransB == CblasConjTrans )
        {
            TB = 'C';
        }
        else if ( TransB == CblasNoTrans )
        {
            TB = 'N';
        }
        else
        {
            BLASHelper::XERBLA_cpu( RowMajorStrg, 3, "cblas_dgemm", "Illegal TransB setting, %d\n", TransB );
            RowMajorStrg = 0;
            return;
        }

#ifdef F77_CHAR
        F77_TA = C2F_CHAR( &TA );
        F77_TB = C2F_CHAR( &TB );
#endif
        F77_dgemm( F77_TA, F77_TB, &F77_M, &F77_N, &F77_K, &alpha, A, &F77_lda, B, &F77_ldb, &beta, C, &F77_ldc );
    }
    else if ( order == CblasRowMajor )
    {
        RowMajorStrg = 1;

        if ( TransA == CblasTrans )
        {
            TB = 'T';
        }
        else if ( TransA == CblasConjTrans )
        {
            TB = 'C';
        }
        else if ( TransA == CblasNoTrans )
        {
            TB = 'N';
        }
        else
        {
            BLASHelper::XERBLA_cpu( RowMajorStrg, 2, "cblas_dgemm", "Illegal TransA setting, %d\n", TransA );
            RowMajorStrg = 0;
            return;
        }

        if ( TransB == CblasTrans )
        {
            TA = 'T';
        }
        else if ( TransB == CblasConjTrans )
        {
            TA = 'C';
        }
        else if ( TransB == CblasNoTrans )
        {
            TA = 'N';
        }
        else
        {
            BLASHelper::XERBLA_cpu( RowMajorStrg, 2, "cblas_dgemm", "Illegal TransB setting, %d\n", TransB );
            RowMajorStrg = 0;
            return;
        }

#ifdef F77_CHAR
        F77_TA = C2F_CHAR( &TA );
        F77_TB = C2F_CHAR( &TB );
#endif
        F77_dgemm( F77_TA, F77_TB, &F77_N, &F77_M, &F77_K, &alpha, B, &F77_ldb, A, &F77_lda, &beta, C, &F77_ldc );
    }
    else
    {
        BLASHelper::XERBLA_cpu( RowMajorStrg, 1, "cblas_dgemm", "Illegal order setting, %d\n", order );
    }

    RowMajorStrg = 0;
    return;
}
Exemplo n.º 5
0
int main (int argc, char **argv )
{
   int rout=-1,info=0,m,n,k,lda,ldb,ldc;
   double A[2] = {0.0,0.0}, 
          B[2] = {0.0,0.0}, 
          C[2] = {0.0,0.0}, 
          ALPHA=0.0, BETA=0.0;
          
   if (argc > 2){
      rout = atoi(argv[1]);
      info = atoi(argv[2]);
   }
   
   if (rout == 1) {
      if (info==0) {
         printf("Checking if cblas_dgemm fails on parameter 4\n");
         cblas_dgemm( CblasRowMajor,  CblasTrans, CblasNoTrans, INVALID, 0, 0,
                   ALPHA, A, 1, B, 1, BETA, C, 1 );
      }
      if (info==1) {
         printf("Checking if cblas_dgemm fails on parameter 5\n");
         cblas_dgemm( CblasRowMajor,  CblasNoTrans, CblasTrans, 0, INVALID, 0,
                   ALPHA, A, 1, B, 1, BETA, C, 1 );
      }
      if (info==2) {
         printf("Checking if cblas_dgemm fails on parameter 9\n");
         cblas_dgemm( CblasRowMajor,  CblasNoTrans, CblasNoTrans, 0, 0, 2,
                   ALPHA, A, 1, B, 1, BETA, C, 2 );
      }
      if (info==3) {
         printf("Checking if cblas_dgemm fails on parameter 11\n");
         cblas_dgemm( CblasRowMajor,  CblasNoTrans, CblasNoTrans, 0, 2, 2,
                   ALPHA, A, 1, B, 1, BETA, C, 1 );
      }
   } else {
      if (info==0) {
         printf("Checking if F77_dgemm fails on parameter 3\n");
         m=INVALID; n=0; k=0; lda=1; ldb=1; ldc=1;
         F77_dgemm( "T", "N", &m, &n, &k,
                   &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc );
      }
      if (info==1) {
         m=0; n=INVALID; k=0; lda=1; ldb=1; ldc=1;
         printf("Checking if F77_dgemm fails on parameter 4\n");
         F77_dgemm( "N", "T", &m, &n, &k,
                   &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc );
      }
      if (info==2) {
         printf("Checking if F77_dgemm fails on parameter 8\n");
         m=2; n=0; k=0; lda=1; ldb=1; ldc=2;
         F77_dgemm( "N", "N" , &m, &n, &k,
                   &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc );
      }
      if (info==3) {
         printf("Checking if F77_dgemm fails on parameter 10\n");
         m=0; n=0; k=2; lda=1; ldb=1; ldc=1;
         F77_dgemm( "N", "N" , &m, &n, &k,
                   &ALPHA, A, &lda, B, &ldb, &BETA, C, &ldc );
      }
   }
          
   return 1;
}