fortran还是python_python与c/fortran的比较

我最近用了一个更真实的现实世界算法。它涉及到numpy、Matlab、FORTRAN和C(通过ILNumerics)。如果没有特定的优化,numpy生成的代码似乎要比其他代码效率低得多。当然,和往常一样,这只能说明一个大趋势。您将能够编写FORTRAN代码,它在最后的运行速度比相应的numpy实现慢。但大多数时候,numpy会慢得多。这里是我测试的(平均)结果:

QapnL.png

为了给像您的示例中这样简单的浮点操作计时,所有这些都取决于编译器生成“最优”机器指令的能力。在这里,有多少编译步骤并不重要。NET和numpy通过首先编译字节码来利用多个步骤,然后在虚拟机中执行。但在理论上,优化结果的选择同样存在。在实际应用中,现代FORTRAN和C编译器在优化执行速度方面更为优越。例如,它们利用浮点扩展(SSE,AVX)并更好地展开循环。numpy(或者更好的CPython,主要由numpy使用)在这一点上的性能似乎更差。如果要确保哪个框架最适合您的任务,可以附加到调试器并研究可执行文件的最终计算机指令。

但是,请记住,在更现实的情况下,浮点性能仅在大型优化链的最末端才重要。这种差异常常被一种更强烈的效果所掩盖:记忆带。一旦开始处理数组(wich在大多数科学应用中很常见),就必须考虑内存管理的成本。框架在支持算法作者编写内存高效算法方面存在偏差。在我看来,numpy比FORTRAN或C更难编写内存高效的算法,但在任何一种方法语言中都不容易。(ILNumerics大大改进了这一点。)

另一个重要点是并行化。框架是否支持并行执行计算?它的效率如何?我个人的观点是:C、FORTRAN和numpy都不容易并行化你的算法。但是FORTRAN和C至少给了您这样做的机会,即使有时它需要使用特殊的编译器。其他框架(ILNumerics,Matlab)会自动并行化。

如果你需要“最高性能”来实现非常小但代价高昂的算法,你最好使用FORTRAN或C语言,因为它们最终会产生更好的机器代码(在单处理器系统上)。然而,用C或FORTRAN编写更大的算法时,考虑到内存效率和并行性往往会变得很麻烦。在这里,高级语言(如numpy、ILNumerics或Matlab)比低级语言要好。如果做得好,执行速度的差异通常可以忽略不计。不幸的是,对于努比来说,这通常不是真的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值