簡単な C++ コードを作成し、C++ でテストした後、同じコードを MATLAB に適合させ、mex file_name.cpp
C++ と同じコンパイラを使用する MATLAB で同じコードを実行しました。コードは次のとおりです。
int k;
for(int j = 0; j < 100;j++){
for(int i = 0; i < 10000000; i++){
k++;
}
k/=10000000
}
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;
このコードを MATLAB 用に編集しました。つまり、適切な型に変更したり、MEX 関数を追加したりしました。結果は、C++ では 3100 ミリ秒であるのに対し、MATLAB では約 900 ミリ秒です。
私が理解していないのは、両方が同じコードを同じコンパイラで実行していることです (MATLAB ではmex -setup
、コマンド ラインで記述し、MEX コンパイラとして Visual Studio コンパイラを選択しました)。ただし、MATLAB は約3.5 倍高速です。
高速化のために MATLAB が行っていることと、C++ が行っていないことは何ですか? なぜそんなに大きな違いがあるのか 誰か説明してもらえますか?他のコードをいくつか試しましたが、MATLAB ではすべて 3 ~ 6 倍高速です。
私の PC は 64 ビット Windows 7、C++ には Visual Studio 2010、MATLAB は R2012b です。
Visual Studio のバージョンが原因である可能性はありますか? VS2012に変更すると、速くなりますか?
mex -vの出力はこちらです。
ありがとう、