gpt4 book ai didi

matlab - FOR 循环最快的语言

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:24 26 4
gpt4 key购买 nike

我正在尝试找出最适合我正在构建的分析模型的编程语言。首要考虑的是它运行 FOR 循环的速度。

一些细节:

  • 该模型需要对数组中的一组元素执行大量(每个条目约 30 次,超过 12 个循环)操作——数组中有约 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% 的改进,但这是成本过高的。开始时的最初计划是用这个实际运行 Monte Carlo,但在运行 55 小时时,这是完全不切实际的。
  • 此版本的下一个版本将是从头开始的完整重建(出于 IP 原因,如果没有其他原因我不会参与),因此我对任何编程语言都完全开放。我最熟悉 Octave/Matlab,但也涉足过 R、C、C++、Java。如果解决方案涉及将数据存储在数据库中,我也精通 SQL。我会为此学习任何语言——这些不是我们要寻找的复杂功能,没有与其他程序的接口(interface)等,所以不要太在意学习曲线。

综上所述,专用于 FOR 循环的最快编程语言是什么?通过搜索 SO 和 Google、Fortran 和 C 泡泡到顶部,但在深入之前寻找更多建议一个或另一个。

谢谢!

最佳答案

当它到达 CPU 时,这个 for 循环看起来并不比这个更复杂:

for(int i = 0; i != 1024; i++) 转换为

mov r0, 0           ;;start the counter    
top:

;;some processing

add r0, r0, 1 ;;increment the counter by 1
jne top: r0, 1024 ;;jump to the loop top if we havn't hit the top of the for loop (1024 elements)

;;continue on

如您所知,这非常简单,您无法真正很好地优化它[1]...重新关注算法级别。

解决该问题的第一步是查看缓存位置。查看矩阵乘法和交换 ij 索引的经典示例。

编辑:作为第二个切入点,我建议评估算法以了解迭代之间的数据依赖性和数据“矩阵”中各位置之间的数据依赖性。它可能是一个很好的并行化候选者。

[1] 有一些优化是可能的,但这些不会产生您正在寻找的加速。

关于matlab - FOR 循环最快的语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3191065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com