python和c哪个有用_比较python与c / fortran

我最近做了一个更逼真的现实世界算法

a similar test.它涉及numpy,Matlab,FORTRAN和C#(通过

ILNumerics).没有具体的优化,numpy似乎生成的代码效率比其他代码低得多.当然,一如以往,这只能表明一般趋势.您将能够编写FORTRAN代码,其运行速度比相应的numpy实现慢.但是大多数时候,麻木将慢得多.这里我的测试结果(平均):

为了时间这样简单的浮点运算,所有这一切都归结于编译器生成“最佳”机器指令的能力.在这里,并不重要,涉及多少编译步骤. .NET和numpy通过首先编译到虚拟机中执行的字节码来利用多个步骤.但是,优化结果的选择在理论上同样存在.在实践中,现代FORTRAN和C编译器在优化执行速度方面更好.作为一个例子,他们利用浮点扩展(SSE,AVX),并做更好的循环展开.在这一点上,numpy(或更好的CPython,大多数被numpy使用)似乎表现较差.如果要确保哪个框架最适合您的任务,您可以附加到调试器并调查可执行文件的最终机器指令.

然而,请记住,在更现实的情况下,浮点性能只能在大型优化链的最后才是重要的.差异往往被更强大的效果掩盖:内存带宽.一旦你开始处理数组(这在大多数科学应用程序中是常见的),你将不得不考虑内存管理的成本.框架在编写内存高效算法时偏离了算法作者的支持.在我看来,numpy使得更难编写高效的算法,然后FORTRAN或C.但是这些语言并不容易. (ILNumerics大大改善了这一点.)

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

如果您需要非常小而昂贵的算法“最佳性能”,那么您最好不要使用FORTRAN或C.只是因为它们最终会生成更好的机器代码(在单处理器系统上).然而,在C或FORTRAN中编写更大的算法并将记忆效率和并行性纳入考量通常会变得麻烦.在这里,较高级别的语言(如numpy,ILNumerics或Matlab)超出了较低级别的语言.如果做到正确 – 执行速度的差异通常是可以忽略不计的.不幸的是,对于numpy的情况,这通常是不正确的.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值