Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 性能权衡-什么时候MATLAB比C/C好/慢++;_C++_C_Performance_Matlab - Fatal编程技术网

C++ 性能权衡-什么时候MATLAB比C/C好/慢++;

C++ 性能权衡-什么时候MATLAB比C/C好/慢++;,c++,c,performance,matlab,C++,C,Performance,Matlab,我知道C/C++是一种低级语言,与其他高级语言相比,它生成的机器代码相对优化。但我想还有很多,从实践中也可以看出这一点 当我做简单的计算,如MontCarlo平均的高斯样本集合,我看到,在C++实现或MATLAB实现之间没有太大的区别,有时实际上Matlab有更好的时间。 当我继续使用数千行代码进行更大规模的模拟时,真实的画面慢慢地显示出来。C++模拟显示出比100g更好的性能,在时间复杂度上比等效的MATLAB实现更好。 < C++中的代码大部分时间是串行的,没有明确地进行高保真优化。然而,据

我知道C/C++是一种低级语言,与其他高级语言相比,它生成的机器代码相对优化。但我想还有很多,从实践中也可以看出这一点

当我做简单的计算,如MontCarlo平均的高斯样本集合,我看到,在C++实现或MATLAB实现之间没有太大的区别,有时实际上Matlab有更好的时间。 当我继续使用数千行代码进行更大规模的模拟时,真实的画面慢慢地显示出来。C++模拟显示出比100g更好的性能,在时间复杂度上比等效的MATLAB实现更好。 < C++中的代码大部分时间是串行的,没有明确地进行高保真优化。然而,据我所知,MATLAB天生就做了很多优化。例如,当我试图生成一大块随机样本时,其中C++中使用的等价于某些库,如IT++/GSL /Boost执行得相对较慢(所使用的算法是相同的,即MT1937)。 我的问题只是想知道MATLAB/C++在性能上是否有更简单的折衷。这是否就像人们所说的,“只要有可能,C/C++就更好”(经常经历的)?。从另一个角度来看,“除了舒适,MATLAB还有什么好处?”

顺便说一句,我不认为编码效率参数在这里很重要,在这两种情况下都是同一个程序员。而且,我认为其他替代方案,如python,R,在这里并不相关。但是对我们使用的特定库的依赖应该是有趣的


[我是通信系统编码理论的博士生。我一直使用matlab/C++进行仿真,并且在这两种情况下都有编写少量10K线路的合理经验]

您的问题很难回答。一般来说,C++是较快的,但是如果利用MATLAB编写的算法,它可以优于C++。在某些情况下,MATLAB可以并行化代码,在许多情况下,C++必须手动完成。MaTlab可以导出C++代码。
所以我的结论是,你必须衡量这两个项目的表现才能得到答案。但是你比较了两种实现方式,而不是Matlab和C++。

至少可以考虑四倍的差异。

  • 编译与解释
  • 强类型与动态类型
  • 性能与快速原型
  • 特长
  • For 1-3可以很容易地推广到两种编程语言之间的比较中

    对于4,
    MATLAB
    针对矩阵运算进行了优化。因此,如果您可以在
    MATLAB
    中对更多代码进行矢量化,那么性能将大大提高。相反,如果需要许多
    循环
    ,请毫不犹豫地使用
    C++
    或创建一个
    mex
    文件

    这毕竟是一个困难的问题

    >我的经验(这几年的计算机视觉和图像处理在两种语言中)都没有简单的答案,因为Matlab的性能强烈地依赖于(而且比C++的性能)对你的编码风格有很大的影响。p> 一般来说,MATLAB封装了经典的基于C++/FORTRAN的线性代数库。所以像
    x=A\b
    这样的任何东西都会非常快。此外,Matlab在为这些类型的问题选择最有效的解算器方面做得很好,因此对于
    x=a\b
    Matlab将查看矩阵的大小,并选择适当的低级例程

    如果将代码“矢量化”,即避免使用
    for
    循环,并使用索引数组或布尔数组访问数据,那么Matlab在大型矩阵的数据处理方面也会大放异彩。这东西是高度优化的

    对于其他例程,有些是用Matlab代码编写的,而另一些则指向C/C++实现(例如Delaunay代码)。您可以通过键入
    编辑一些例程.m
    来检查这一点。这将打开代码,您将看到它是全部是Matlab还是只是已编译内容的包装器


    我认为Matlab主要是为了舒适,但舒适意味着编码时间和最终的金钱,这就是Matlab在行业中使用的原因。此外,对于计算机科学以外的其他领域的工程师来说,这很容易学习,编程方面的培训很少。

    作为一名博士生,也是一名10年的Matlab用户,我很高兴与大家分享我的观点:

    Matlab是开发和原型化算法的绝佳工具,尤其是在处理GUI、高级分析(频域、LS优化等)时:快速编码、强大的语法(想想[]、{}、:等)

    一旦处理链变得更稳定、定义更明确、数据维度增加,就转移到C/C++


    当考虑到它的语言是脚本式的时,主要的Matlab限制会上升:只要避免任何循环(使用arrayfun、cellfun或其他矩阵程序),性能就会很高,因为调用的子例程也是C/C++。Matlab在线性代数和数组/矩阵运算方面做得很好,因为他们似乎对底层操作做了一些额外的优化——如果你想在这方面击败Matlab,你需要一个类似优化的BLAS/LAPACK库

    作为一种解释语言,由于内部开销,无论何时调用Matlab函数,Matlab都会损失时间,这通常意味着Matlab循环速度较慢。近年来,由于JIT编译器的显著改进,这种情况有所缓解(例如,在Matlab上搜索“性能”问题)。由于函数调用开销,所有未在幕后用C/C++实现的Matlab函数(调用
    edit functionName
    查看是否用Matlab编写)都会
    B = A(:,2:end)-A(:,1:end-1)