Ich schreibe Finite-Differenzen-Methode Programm.
Ich verwende Intel Math Kernel Library. Beispiel: 1000x1000 Matrix A und 1000x1000 Matrix B.
In Intel MKL benötigte A * B mit der Funktion cblas_dgem() etwa 600 ms.
In MATLAB dauerte A * B etwa 800 ms.
Ich dachte MKL ist sehr schnell.LAPACK dgesv VS MATLAB mldivide
jedoch 1000x1000 Matrix A und 1000x1 Vektor B,
und A \ B (mldivide) in MATLAB, dauerte es 40 ms,
aber in MKL, mit LAPACKE_dgesv, dauerte es 400 ms!
so ist meine Frage,
Warum in mldivide, MATLAB ist so schnell und MKL ist so langsam?
Matrix A und Vektor B ist ganz mit zufälligen Werten gefüllt.
Ich verwende
MATLAB R2012b
Visual Studio 2015
Intel Parallel Studio XE 2016 Update 3 Cluster Edition
Danke.
EDITED
ersten, C++ Code.
#include "mkl.h"
#include "time.h"
int n = 1000;
double *a = (double *)malloc(sizeof(double) * n * n);
for(int i = 0;i < n * n;i++) a[i] = rand();
double *b = (double *)malloc(sizeof(double) * n);
for(int i = 0;i < n;i++) b[i] = rand();
int *ipiv = (int *)malloc(sizeof(int) * n);
time_t now = clock();
int info = LAPACKE_dgesv(LAPACK_ROW_MAJOR,n,1,a,n,ipiv,b,1);
time_t ms = clock() - now;
printf("%d ms",ms);
Zweitens, MATLAB-Code.
n = 1000;
a = rand(n,n);
b = rand(n,1);
tic;
c = a\b;
toc * 1000
Ich glaube, ich habe keine Fehler bei der Messung der Zeit.
Vielen Dank.
@ kangshiyin Richtig, ich falsch gelesen. Vielen Dank. – rayryeng
Können Sie Timing-Code anzeigen? Es gibt viele Dinge, die beim Timing schief gehen können. – kangshiyin
@kangshiyin Ich habe die Frage bearbeitet. Vielen Dank. –