Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
Performance 编译Simulink/Matlab x Fortran-性能_Performance_Matlab_Fortran_Simulink - Fatal编程技术网

Performance 编译Simulink/Matlab x Fortran-性能

Performance 编译Simulink/Matlab x Fortran-性能,performance,matlab,fortran,simulink,Performance,Matlab,Fortran,Simulink,我必须向我的客户证明Fortran比Matlab/Simulink快。他正在考虑将一段代码从fortran移植到Matlab。代码主要是逻辑和程序子程序。它不使用任何原生矩阵运算或数学函数特征值、非线性方程等 考虑到互联网上的一些参考资料和每种语言的固有特征,我认为谁更快的问题已经得到了回答,但我需要具体的数据 我找到的所有图表都比较了Matlab/Simulink x Fortran,但没有指定Matlab代码是否使用Matlab编码器工具箱编译。我认为这是一个关键问题 我并不是说编译代码会使

我必须向我的客户证明Fortran比Matlab/Simulink快。他正在考虑将一段代码从fortran移植到Matlab。代码主要是逻辑和程序子程序。它不使用任何原生矩阵运算或数学函数特征值、非线性方程等 考虑到互联网上的一些参考资料和每种语言的固有特征,我认为谁更快的问题已经得到了回答,但我需要具体的数据

我找到的所有图表都比较了Matlab/Simulink x Fortran,但没有指定Matlab代码是否使用Matlab编码器工具箱编译。我认为这是一个关键问题

我并不是说编译代码会使matlab比fortran更快,而是为了真正说服某人,我希望看到结果

一个良好的开端是:

性能-Matlab.m编译的Matlab编码器工具箱X Intel Fortran 性能-Simulink编译的实时工具箱X Intel Fortran 有人已经测试过这个场景吗?

MATLAB编译器不会让您的代码更快,它旨在将您的代码分发给没有MATLAB的第三方用户。您需要在编译代码的同时提供MCR或MATLAB组件运行时,它本质上是MATLAB的无头版本,如果您拥有MATLAB编译器的许可证,您可以自由分发

现在,如果您使用MATLAB编码器或Simulink的Simulink编码器从MATLAB代码生成C代码,那么与解释的MATLAB代码相比,您可能会获得一个更快的速度。即使如此,这也取决于所讨论的代码。此外,这只支持与C代码生成兼容的MATLAB语言的子集。

MATLAB编译器不会使您的代码更快,它旨在将您的代码分发给没有MATLAB的第三方用户。您需要在编译代码的同时提供MCR或MATLAB组件运行时,它本质上是MATLAB的无头版本,如果您拥有MATLAB编译器的许可证,您可以自由分发


现在,如果您使用MATLAB编码器或Simulink的Simulink编码器从MATLAB代码生成C代码,那么与解释的MATLAB代码相比,您可能会获得一个更快的速度。即使如此,这也取决于所讨论的代码。而且,它只支持与C代码生成兼容的MATLAB语言的一个子集。

我最近使用MATLAB编码器编译的MATLAB代码产生了x20!的加速!。实际预期的加速取决于许多因素。如果您的Matlab代码是高度矢量化的,并且主要使用线性代数例程,那么编码器不太可能产生太多的加速。但是如果你的算法中有多个循环和条件,那么你确实可以实现数量级的加速,就像我上面的例子一样

在后台,Matlab的线性代数通过使用高度优化的Fortran代码的MKL/ACML库使用BLAS/LAPACK。因此,除非您编写非常高效的Fortran,否则您不可能超越Matlab,尽管高度矢量化的Matlab线性代数/数学算法的函数调用开销很大。但是,如果您的代码使用条件/循环和类似的非数学编程结构,那么情况可能会改变。简而言之,没有简单的答案——这取决于您的特定算法/程序


暂且不考虑性能,与Fortran相比,Matlab还有许多其他优点,包括大量经过测试的内置函数,并实现了快速的开发周期。

我最近使用Matlab编码器编译的Matlab代码产生了x20!的加速!。实际预期的加速取决于许多因素。如果您的Matlab代码是高度矢量化的,并且主要使用线性代数例程,那么编码器不太可能产生太多的加速。但是如果你的算法中有多个循环和条件,那么你确实可以实现数量级的加速,就像我上面的例子一样

在后台,Matlab的线性代数通过使用高度优化的Fortran代码的MKL/ACML库使用BLAS/LAPACK。因此,除非您编写非常高效的Fortran,否则您不可能超越Matlab,尽管高度矢量化的Matlab线性代数/数学算法的函数调用开销很大。但是,如果您的代码使用条件/循环和类似的非数学编程结构,那么情况可能会改变。简而言之,没有简单的答案——这取决于您的特定算法/程序


暂时撇开性能不谈,与Fortran相比,Matlab还有许多其他优势,包括大量经过测试的内置函数和快速的开发周期。

您需要问一个定义更为严格的问题—Fortran是否比Matlab/Simulink快,没有单一的答案

首先,写te很容易 任何一种语言的错误、缓慢算法。因此,您需要指定特定的、编写良好的算法

第二,在很多事情上,MATLAB甚至比写得非常好的Fortran或C都要快。例如,如果你想把两个大矩阵相乘,或者计算一些特征值,或者其他MATLAB最擅长的线性代数,你是无法打败它的。另一方面,如果你正在做一些逻辑性很强的事情,而这些逻辑性又无法矢量化,那么Fortran可能会更快,只要它写得好

当你将MATLAB Coder引入到图片中时,后面这些东西是最有可能通过转换为C代码而从加速中获益的东西,主要是因为前面的东西真的不能加速很多,这就是为什么你不能打败它们。但加速比是可变的——我见过超过10-15倍的加速比,但有时也只有1-2倍

你没有提到你在哪里找到了将MATLAB与Fortran进行比较的图表,但是如果你在互联网上找到它们,我认为这是一个相当安全的假设,它们不涉及MATLAB编码器的C代码生成,只代表MATLAB的性能


最后-另一种加速MATLAB的方法是使用并行计算工具箱对其进行并行化,该工具箱使您能够在本地计算机的内核上并行化,还可能使用集群上的分布式计算服务器并行化。用MATLAB代码做这件事通常比用MATLAB编码器加速产生C代码要容易得多——所以如果你认为在比较中考虑MATLAB编码器是很重要的,你也应该考虑这个问题。

你需要问一个更严格定义的问题——没有关于FORTRAN是否比Matlab/Simulink更快的答案。

首先,用这两种语言编写糟糕、缓慢的算法很容易。因此,您需要指定特定的、编写良好的算法

第二,在很多事情上,MATLAB甚至比写得非常好的Fortran或C都要快。例如,如果你想把两个大矩阵相乘,或者计算一些特征值,或者其他MATLAB最擅长的线性代数,你是无法打败它的。另一方面,如果你正在做一些逻辑性很强的事情,而这些逻辑性又无法矢量化,那么Fortran可能会更快,只要它写得好

当你将MATLAB Coder引入到图片中时,后面这些东西是最有可能通过转换为C代码而从加速中获益的东西,主要是因为前面的东西真的不能加速很多,这就是为什么你不能打败它们。但加速比是可变的——我见过超过10-15倍的加速比,但有时也只有1-2倍

你没有提到你在哪里找到了将MATLAB与Fortran进行比较的图表,但是如果你在互联网上找到它们,我认为这是一个相当安全的假设,它们不涉及MATLAB编码器的C代码生成,只代表MATLAB的性能


最后-另一种加速MATLAB的方法是使用并行计算工具箱对其进行并行化,该工具箱使您能够在本地计算机的内核上并行化,还可能使用集群上的分布式计算服务器并行化。用MATLAB代码做这件事通常比用Matlab编码器加速产生C代码要容易得多。因此,如果你认为在比较中考虑MATLAB编码器是至关重要的,那么你也应该考虑这个问题。

PS:不能评论FORTRAN位,因为我从来没有使用过它。然而,MATLAB在后台使用FORTRAN例程。FORTRAN已经22年没有成为FORTRAN了。请更新你的字典。PS:不能评论FORTRAN位,因为我从未使用过它。然而,MATLAB在后台使用FORTRAN例程。FORTRAN已经22年没有成为FORTRAN了。请更新您的字典。@edited->Matlab编译器已更改为Matlabcoder@edited->Matlab编译器更改为Matlab代码谢谢您的回答。我有一个已经用fortran编写的代码,由于其他原因,我的客户希望将其迁移到Matlab。因此,conde很有可能包含无法矢量化的大部分逻辑,我同意这是一个相关信息,应该在问题中提及。2我获得的来源是。3并行计算工具箱确实是一个很好的解决方案,但由于我已经有一个运行良好的计算网格,我将生成一个独立的可执行文件,稍后将使用该网格并行运行多个案例。它不是并行的,但它将提高总体速度。根据客户希望从Fortran迁移到MATLAB的原因,以及代码的特殊性质,您可能会发现一个有用的中间点是将主要应用程序迁移到MATLAB,从而提高开发的易用性,但是保持性能密集型部件在
Fortran-通过MATLAB MEX接口从MATLAB调用它们。感谢您的回答。我有一个已经用fortran编写的代码,由于其他原因,我的客户希望将其迁移到Matlab。因此,conde很有可能包含无法矢量化的大部分逻辑,我同意这是一个相关信息,应该在问题中提及。2我获得的来源是。3并行计算工具箱确实是一个很好的解决方案,但由于我已经有一个运行良好的计算网格,我将生成一个独立的可执行文件,稍后将使用该网格并行运行多个案例。它不是并行的,但它将提高总体速度。根据客户希望从Fortran迁移到MATLAB的原因,以及代码的特殊性质,您可能会发现一个有用的中间点是将主要应用程序迁移到MATLAB,从而提高开发的易用性,但是将性能密集型部分保留在Fortran中—通过MATLAB MEX接口从MATLAB调用它们。