私は簡単なC++コードを書いてC++でテストしましたが、mex file_name.cpp
でMATLABに同じコードを適用し、C++と同じコンパイラを使用しているMATLABで同じコードを実行します。ここでは、コードは次のようになります、私はMATLABのために、このコードを編集したこのコードのMatlabとC++の速度比較
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;
すなわち、適切なタイプに変更MEX-機能などを追加し、結果がで約900ms以下のとおりです。ここで
int k;
for(int j = 0; j < 100;j++){
for(int i = 0; i < 10000000; i++){
k++;
}
k/=10000000
}
は、MATLABのコードがありますC++で3100 msとは対照的にMATLABです。
は、私が理解していないこと、しかし、MATLABは周り3.5倍高速である両者が同じコードを実行していて、同じコンパイラで(MATLABで私は、コマンドラインでmex -setup
を書いて、MEXコンパイラとしてVisual Studioのコンパイラを選択)であります。
これより高速で、C++では何をしていないのですか?誰かが私に理由を説明してください、なぜそれほど大きな違いがありますか?私は他のコードを試しましたが、MATLABでは3〜6倍高速です。
私のPCは64ビットWindows 7、Visual Studio 2010はC++、MATLABはR2012bです。
これは私のVisual Studioバージョンのためですか?私はそれをVS2012に変更すれば、それは速くなるでしょうか?
mex -v出力はこちらです。
コンパイラは依然として####で、同じ値を返す単純なforループは削除できません。私の飛行機はどこにありますか? :-) – xanatos
mex -vを使ってmexをコンパイルし、matlabがどのフラグを使用しているかを確認してください。 – Shai
あなたはVSでデバッグモードまたはリリースモードでコンパイルしていますか? – Shai