|
liblapackwrap 0.1
|
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "liblapackwrap/blaswrap_<llw_typeset"#include "liblapackwrap/blaswrap_functions_<llw_typeset"
Include dependency graph for blaswrap_core.c:Go to the source code of this file.
Functions | |
| h c int llw_< llw_typeset > | _gemm_a (char transa, char transb, int M, int N, int K, LLW_< llw_typeset >_COMPLEX *alpha, LLW_CONST LLW_< llw_typeset >_COMPLEX *A, int LDA, LLW_CONST LLW_< llw_typeset >_COMPLEX *B, int LDB, LLW_< llw_typeset >_COMPLEX **C) |
| int llw_< llw_typeset > | _gemm (char transa, char transb, int M, int N, int K, LLW_< llw_typeset >_COMPLEX *alpha, LLW_CONST LLW_< llw_typeset >_COMPLEX *A, int LDA, LLW_CONST LLW_< llw_typeset >_COMPLEX *B, int LDB, LLW_< llw_typeset >_COMPLEX *beta, LLW_< llw_typeset >_COMPLEX *C, int LDC) |
| int llw_<llw_typeset> _gemm | ( | char | transa, |
| char | transb, | ||
| int | M, | ||
| int | N, | ||
| int | K, | ||
| LLW_< llw_typeset >_COMPLEX * | alpha, | ||
| LLW_CONST LLW_< llw_typeset >_COMPLEX * | A, | ||
| int | LDA, | ||
| LLW_CONST LLW_< llw_typeset >_COMPLEX * | B, | ||
| int | LDB, | ||
| LLW_< llw_typeset >_COMPLEX * | beta, | ||
| LLW_< llw_typeset >_COMPLEX * | C, | ||
| int | LDC | ||
| ) |
Definition at line 43 of file blaswrap_core.c.
{
int ka=(transa=='N')?K:M;
int kb=(transb=='N')?K:N;
LLW_<llw_typeset>_COMPLEX *a;
LLW_<llw_typeset>_COMPLEX *b;
#ifdef LLW_CONST
a = (LLW_<llw_typeset>_COMPLEX*)malloc(LDA*ka*sizeof(LLW_<llw_typeset>_COMPLEX));
if(a == NULL) return 100;
b = (LLW_<llw_typeset>_COMPLEX*)malloc(LDA*kb*sizeof(LLW_<llw_typeset>_COMPLEX));
if(b == NULL) {
free(a);
return 100;
}
memcpy(a, A, LDA*ka*sizeof(LLW_<llw_typeset>_COMPLEX));
memcpy(b, B, LDB*kb*sizeof(LLW_<llw_typeset>_COMPLEX));
#else
a = A;
b = B;
#endif
#ifdef FCALL
GEMM(&transa, &transb, &M, &N, &K,
#ifdef LLW_<llw_typeset>_IS_COMPLEX
(LAPACK_COMPLEX_TYPENAME*)alpha,
#else
(LAPACK_COMPLEX_TYPENAME*)&alpha,
#endif
(LAPACK_COMPLEX_TYPENAME*)a, &LDA, (LAPACK_COMPLEX_TYPENAME*)b, &LDB,
#ifdef LLW_<llw_typeset>_IS_COMPLEX
(LAPACK_COMPLEX_TYPENAME*)beta,
#else
(LAPACK_COMPLEX_TYPENAME*)&beta,
#endif
(LAPACK_COMPLEX_TYPENAME*)C, &LDC);
#else
GEMM(transa, transb, M, N, K,
#ifdef LLW_<llw_typeset>_IS_COMPLEX
(LAPACK_COMPLEX_TYPENAME*)alpha,
#else
*alpha,
#endif
(LAPACK_COMPLEX_TYPENAME*)a, LDA, (LAPACK_COMPLEX_TYPENAME*)b, LDB,
#ifdef LLW_<llw_typeset>_IS_COMPLEX
(LAPACK_COMPLEX_TYPENAME*)beta,
#else
*beta,
#endif
(LAPACK_COMPLEX_TYPENAME*)C, LDC);
#endif
#ifdef LLW_CONST
free(a);
free(b);
#endif
return 0;
}
| h c int llw_<llw_typeset> _gemm_a | ( | char | transa, |
| char | transb, | ||
| int | M, | ||
| int | N, | ||
| int | K, | ||
| LLW_< llw_typeset >_COMPLEX * | alpha, | ||
| LLW_CONST LLW_< llw_typeset >_COMPLEX * | A, | ||
| int | LDA, | ||
| LLW_CONST LLW_< llw_typeset >_COMPLEX * | B, | ||
| int | LDB, | ||
| LLW_< llw_typeset >_COMPLEX ** | C | ||
| ) |
frontend for llw_<llw_typeset>_gemm but if you don't have a matrix C yet (clearly, if you're calling this routine, you want one.
Definition at line 29 of file blaswrap_core.c.
{
*C = (LLW_<llw_typeset>_COMPLEX*)malloc(M*N*sizeof(LLW_<llw_typeset>_COMPLEX));
if((*C) == NULL) return 100;
//fprintf(stderr, "N=%d M=%d N*M=%lu\n", M, N, (long unsigned)M*N);
for(long unsigned i=0; i<M*N; i++) {
//fprintf(stderr, "\tC=%p *C=%p (*C)[%lu]=%g\n", (void*)C, (void*)*C, i, (*C)[i]);
llw_bw_<llw_typeset>_set_from_double(&((*C)[i]), 0);
//fprintf(stderr, "\t\t->(*C)[%lu]=%g\n", i, (*C)[i]);
}
LLW_<llw_typeset>_COMPLEX zero;
llw_bw_<llw_typeset>_set_from_double(&zero, 0.0);
return llw_<llw_typeset>_gemm(transa, transb, M, N, K, alpha, A, LDA, B, LDB, &zero, *C, M);
}