Napisałem prosty kod C++ i przetestowałem go w C++, a następnie zaadoptowałem ten sam kod dla MATLAB przez mex file_name.cpp
i uruchomiłem ten sam kod w MATLAB, który używa tego samego kompilatora co C++. Oto kod:Porównanie programu Matlab kontra C++ w tym kodzie
int k;
for(int j = 0; j < 100;j++){
for(int i = 0; i < 10000000; i++){
k++;
}
k/=10000000
}
tutaj jest kod MATLAB:
double a;int j;int i;
double* k;
for(j = 0; j < 100;j++){
for(i = 0; i < 10000000; i++){
a = a+1;
}
a = a/10000000;
}
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
k = mxGetPr(plhs[0]);
*k = (double)a;
Mam edytować ten kod MATLAB, czyli zmianę do odpowiednich typów, dodając MEX-funkcyjny itp i wyniki są ok 900ms w MATLAB w przeciwieństwie do 3100 ms w C++.
Co ja nie rozumiem, jak działają ten sam kod i z tego samego kompilatora (w Matlab Piszę mex -setup
w wierszu poleceń i wybrany jako kompilator Visual Studio MEX kompilatora), jednak MATLAB jest około 3,5 razy szybciej .
Co robi MATLAB, aby być szybszym, a czego nie robi C++? Czy ktoś mógłby mi wyjaśnić, dlaczego jest tak wielka różnica? Próbowałem kilka innych kodów, wszystkie są 3-6 razy szybciej w MATLAB.
Mój komputer to 64-bitowy system Windows 7, Visual Studio 2010 jest używany w C++, MATLAB to R2012b.
Czy to możliwe z powodu mojej wersji Visual Studio? Jeśli zmienię go na VS2012, czy będzie on szybszy?
mex -v wyjście jest tutaj.
Dzięki,
Kompilatory są nadal tak s #### y nie można usunąć prostej pętli for, która zawsze zwraca te same wartości? Gdzie są moje latające samochody! :-) – xanatos
użyj 'mex -v', aby skompilować mex i zobacz jakie flagi używa matlab. – Shai
czy kompilujesz w trybie debugowania lub zwolnienia w VS? – Shai