문제

내가 함수 포인터 배열 이는 내가 사용하여 적절한 통화 cblas_xgemm (예를 들어, cblas_dgemmcblas_sgemm,etc., 아틀라스에서/CBLAS).

이 위대한 작품에게 말할 때 사용 cblas_dgemm 에 의해 함수 포인터;dgemm 라 적합한 인수 및 반환하는 올바른 결과입니다.

그러나 때,나는 통화 cblas_sgemm 에 의해 함수 포인터,나는 다음과 같이 출력:

ldc must be >= MAX(N,1): ldc=0 N=2Parameter 14 to routine cblas_sgemm was incorrect

내가 쓴 짧은 테스트 프로그램 는 문제를 보여 줍니다. 전화 cblas_sgemm 지 않고 함수 포인터이 잘 작동합니다.

참고 특히 다음과 같은 경고 gcc(도의 요점은 위 링크,는 방식으로 개발되었습니다 gcc 출력):

test_cblas_sgemm.c:20:3: warning: initialization from incompatible pointer type [enabled by default]

면 나는 주석으로 cblas_sgemm 라인 함수 포인터 배열의 정의하지 않은 경고,심지어 cblas_dgemm 라인입니다.하지만 그 의미가 없기 때문에 이들 모두 함수해야 하는 이와 같이!

여기에는 적절한 라인에서 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);

그래서 무엇이 있나요?그것은 어떻게든 점점 중 하나 xgemm 기능 중 하나에서 헤더와는 다른 에서 또 다른?또는 나 다루는 몇 가지 이상한 함수 포인터이 문제인가요?

도움이 되었습니까?

해결책

귀하의 질문은 기능 포인터 배열에서 호출하려는 상이한 서명의 기능이 있다는 사실로 끓인 것으로 보인다.나는 이것을 나 자신을 시도한 적이 없지만 조금만 연구에서는 이것이 가능하다는 것처럼 보이지 않는다.이는 정적으로 입력 한 언어 가이 기동의 유형을 평가할 수 없기 때문에 의미가 있습니다.

Boost :: Variant 및 다른 해결 방법을 사용하는 제안을 보았습니다. 그러나 우리의 유익이 아닌 라이브러리에 연결하기 때문에 나는 그 옵션을 추구하는 데 많은 가치가 있는지 모르겠습니다.

증명하거나 불리 해드하는 경우 테스트 프로그램에서 CBLAS를 제거하고 여러 서명 방법이있는 클래스를 구현할 수 있으므로 데이터 유형에서만 다릅니다.

측면 메모에서는 칼럼 전공이 주요 통증입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top