Matlab与此代码中的c ++速度比较

smt*_*tsp 6 c++ performance matlab visual-studio-2010

我编写了简单的C++代码并在C++中进行了测试,然后我为MATLAB调整了相同的代码,mex file_name.cpp并在MATLAB中使用与C++相同的编译器运行相同的代码.这是代码:

int k;
for(int j = 0; j < 100;j++){
    for(int i = 0; i < 10000000; i++){
        k++;
    }
    k/=10000000
}
Run Code Online (Sandbox Code Playgroud)

这是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;
Run Code Online (Sandbox Code Playgroud)

我已经为MATLAB编辑了这段代码,即改为合适的类型,添加MEX函数等,结果在MATLAB中约为900ms,而在C++中则为3100 ms.

我不明白的是两个都运行相同的代码和相同的编译器(在MATLAB中我mex -setup在命令行中编写,选择的Visual Studio编译器作为MEX编译器),但是,MATLAB的速度提高了大约3.5倍.

什么是MATLAB做得更快,C++没有做什么?有人可以解释一下为什么会有这么大的差异吗?我尝试过其他一些代码,在MATLAB中都快了3-6倍.

我的PC是64位Windows 7,Visual Studio 2010用于C++,MATLAB是R2012b.

这可能是因为我的Visual Studio版本?如果我把它改成VS2012,它会更快吗?

mex -v输出在这里.

谢谢,

pat*_*cek 3

性能高度依赖于平台、操作系统、编译器等。无论 Matlab 在这种情况下做什么,它都设法找到了 VS2010 编译器没有找到的优化。我大胆猜测升级到 VS2012 不会产生实质性差异,但我可能是错的。毕竟,它是一个不同的编译器。

我承认这有点令人惊讶,但请检查您的编译标志并尝试使用不同的配置进行分析。如果您安装的 Matlab 是 32 位的,这也可能会产生影响。

您的代码中也可能存在细微的差异,可能细微到您可能没有注意到。您的代码可能会链接到其他库,这些库的性能也可能存在很大差异。

这里的教训是,很难确切地确定为什么一件事比另一件事表现得更好。

编辑:您已经提到代码是为了调试而编译的。这只会进一步增加编译器输出内容的变化,因为激活调试选项也可能会关闭其他优化,并且每个编译器对于哪种调试信息重要且值得保留在代码中都有不同的想法。

我建议关闭所有调试选项以获得更一致的输出。我还建议确保您使用类似的优化级别进行编译,可能是尽可能最高的优化级别,也可能根本不使用。