我正在尝试为正在构建的分析模型找出最佳的编程语言。主要考虑因素是运行FOR循环的速度。
一些细节:
- 该模型需要对数组中的一组元素执行大量操作(每个条目约30个,每个周期约30个)-数组中有约30万行,约150列。这些操作大多数都是逻辑上的,例如,如果place(i)= 1,则j(i)= 2。
- 我已经使用Octave构建了该模型的早期版本-在Amazon EC2 m2.xlarge实例上运行它大约需要55个小时(它使用了大约10 GB的内存,但是我非常乐意在它)。 Octave / Matlab不会执行元素逻辑运算,因此需要大量的for循环-我相对确定我已尽可能向量化-剩下的循环是必要的。我已经使用了octave-multicore来处理此代码,这进行了一些改进(当我在8个EC2内核上运行时,速度降低了约30%),但最终由于文件锁定等原因而变得不稳定。寻找运行时的逐步变化-我知道实际上使用Matlab可以使我从某些基准测试中获得多达50%的改善,但这是高成本的。开始时的最初计划是实际运行此操作,但是每运行55小时,这是完全不切实际的。
- 此版本的下一个版本将是从头开始的完整重建(出于IP的原因,我不会介入),因此我完全可以使用任何编程语言。我最熟悉Octave / Matlab,但是涉猎R,C,C ++,Java。如果解决方案涉及将数据存储在数据库中,那么我也会精通SQL。我将为此学习任何语言-这些不是我们正在寻找的复杂功能,也不是与其他程序的接口,等等,因此不必太在意学习曲线。
综上所述,专门针对FOR循环的最快编程语言是什么?从对SO和Google的搜索来看,Fortran和C泡沫到了顶峰,但是在深入研究彼此之前,正在寻找更多建议。
谢谢!
回答:
就绝对速度而言,可能是Fortran,然后是C,然后是C ++。在实际应用中,使用下降式编译器编译的三种代码中任何一种的编写良好的代码都应该足够快。
编辑-通常,与已解释的语言相比,使用已编译语言的任何类型的循环或分叉(例如if语句)代码,您都会看到更好的性能。
举个例子,在我最近从事的一个项目中,数据大小和操作大约是您在此谈论的大小的3/4,但是像您的代码一样,矢量化的空间很小,并且需要大量循环播放。将代码从matlab转换为C ++之后,运行时间从16-18小时减少到大约25分钟。
更多&回答...