Tengo un conjunto de punteros de función que utilizo para llamar al cblas_xgemm
apropiado (por ejemplo, cblas_dgemm
o cblas_sgemm
, etc., de ATLAS/CBLAS).¿Por qué cblas_dgemm y cblas_sgemm tienen diferentes tipos de puntero en una matriz de punteros de función?
Esto funciona muy bien cuando le digo que use cblas_dgemm
por el puntero de función; Se llama a dgemm con los argumentos apropiados y devuelve un resultado correcto.
Sin embargo, cuando llamo por cblas_sgemm
puntero de función, me sale el siguiente resultado:
ldc must be >= MAX(N,1): ldc=0 N=2Parameter 14 to routine cblas_sgemm was incorrect
He escrito un short test program que demuestra el problema. Llamadas al cblas_sgemm
sin que el puntero a la función funcione bien.
Nota sobre todo la siguiente advertencia gcc (véase también la esencia vinculado anteriormente, que tiene la salida de gcc completo):
test_cblas_sgemm.c:20:3: warning: initialization from incompatible pointer type [enabled by default]
Si comento hacia fuera de la línea de cblas_sgemm
en la definición matriz de punteros de función, no lo hago obtener una advertencia, incluso para la línea cblas_dgemm
. ¡Pero eso no tiene sentido porque ambas funciones deberían tener el mismo tipo de devolución!
Aquí están las líneas apropiadas de cblas.h
:
void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
const enum CBLAS_TRANSPOSE TransB, const int M, const int N,
const int K, const float alpha, const float *A,
const int lda, const float *B, const int ldb,
const float beta, float *C, const int ldc);
void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA,
const enum 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);
Entonces, ¿qué pasa? ¿Obtiene de alguna manera una de las funciones xgemm
de un encabezado y el otro de otro? ¿O estoy lidiando con algún extraño problema de puntero de función?
Podría mostrar algún código, es muy difícil comentar los errores del compilador abstracto sin algún contexto. – talonmies
Hay un código vinculado en la pregunta: https://gist.github.com/1671571 –