2013-04-05 5 views
3

Je suis assez nouveau en C++ et essaye d'utiliser les bibliothèques LAPACK pour la multiplication matricielle. J'ai essayé d'exécuter le dgemm de routine qui est donné ci-dessous. J'attends une sortie A * B. mais chaque fois que j'obtiens la réponse B * A. Est-ce la façon dont fonctionne la routine ou quoi que ce soit de mal avec mon code.LAPACK Multiplication matricielle avec C++

Mon code:

#include "stdafx.h" 
#include<iostream> 

using namespace std; 

extern "C" void dgemm_(const char *TRANSA, const char *TRANSB, const int *M, const int *N, const int *K, double *ALPHA, double *A, const int *LDA, double *B, const int *LDB, double *BETA, double *C, const int *LDC); 

int main(void) 
{ 
    double A[4] = {1,2,3,4}; 
    double B[4] = {5,6,7,8}; 
    char TRANS = 'N'; 
    int M = 2; 
    int N = 2; 
    int K = 2; 
    double ALPHA = 1.0; 
    int LDA = 2; 
    int LDB = 2; 
    double BETA = 0.0; 
    double C[4]; 
    int LDC = 2; 

    dgemm_(&TRANS, &TRANS, &M, &N, &K, &ALPHA, A, &LDA, B, &LDB, &BETA, C, &LDC); 

    cout << C[0] << endl; 
    cout << C[1] << endl; 
    cout << C[2] << endl; 
    cout << C[3] << endl; 
    getchar(); 
    return 0; 
} 

Toutes les entrées seront très utiles.

+2

Sons comme col majeur vs rang confusion majeure –

+0

@ David Heffernan Je soupçonne également la même chose. Merci beaucoup pour votre contribution. Pouvez-vous l'ajouter comme réponse? – Tushar

+0

DGEMM est une fonction BLAS, pas LAPACK. –

Répondre

2

Je n'ai pas étudié les détails de votre appel à dgemm, et je ne peux pas dire comment vous interprétez la matrice des résultats. Mais il semble assez probable que vous mélangez des interprétations majeures et des interprétations majeures quelque part. Très probablement, le calcul utilise col major, mais vous supposez une ligne majeure.

+0

J'ai étudié quelques détails au cours des derniers jours en fonction de vos entrées. dgemm est une routine BLAS basée sur Fortran. Ainsi, la question de la colonne major contre la rangée majeure est une cause certaine. – Tushar

Questions connexes