最快的数学编程语言是什么?

9
我有一个需要进行数百万次减法和取余的应用程序,最初我在C#.Net中编写了这个算法,但它需要五分钟才能处理完这些信息,我需要更快的速度。
我已经考虑过Perl,现在看起来是最好的替代方案。在测试中,VB.Net比较慢。C++可能会更好。非常感谢您提供任何建议。

C#通常在小数据集上获得不错的数学速度。对于更大的数据集,使用C或C++。Perl几乎从来没有更快。Haskell或Mathlab或类似的语言可能会带来显著的收益,但需要进行大量的转换。我建议先对C(++)进行基准测试。 - ssube
7
“过早的优化是万恶之源。” - 也许你应该发布你的问题和/或算法。通常调整算法比更换编程语言(尤其是你已经在使用C#.Net - 它并不是最慢的)带来的效果要好得多。如果你想切换到一种常用于数值计算的编程语言,可以选择老牌的FORTRAN(但不要说我们没有提醒过你)。由于语言的某些特性,通常可以进行一些无法通过标准的C/C++代码实现的优化。 - flolo
3
好主意,将其从至少部分编译语言转换为解释语言。这应该会极大地提高性能! - Christian Rau
6
通常讽刺之后会有一个有益的建议,特别是在问答网站上? - Rich
7个回答

8
  1. 您需要一种编译语言,如Fortran、C或C++。其他语言旨在为您提供灵活性、面向对象或其他优势,并假设绝对最快的性能不是您的最高优先级。

  2. 了解如何从单个线程中获得最大的性能,然后在您完成这项工作后,可以通过MPI等方式将工作分配到多个核心上。要在单个线程中获得最大的性能,我通常会在机器指令级别上进行单步调试,以确保它不会在可能被删除的内容中闲逛。


当我从事科学计算时,FORTRAN比C和C++都要快得多。自那以后,他们已经大幅改变了语言,所以我不知道现在是否仍然如此。 - duffymo
@duffymo:我实际上可以质疑这一点,因为我已经与它们所有语言都有很多的工作经验(并且现在仍然如此)。最终取决于哪种语言生成的汇编代码最好。当然,Fortran有一个很大的先发优势。我的主要同事非常相信Fortran,而我不得不不断向他展示,重要的不是语言本身,而是程序实际执行的内容,即关键时刻。 - Mike Dunlavey
@duffymo: LAPACK例程DGEMM是我经典的例子。已经优化到极致了,对吧?如果你在不是很大的矩阵上使用它,你会发现它花费了大量时间(一半或更多)调用LSAME。当我看到这个问题时,我编写了一个专门的程序,节省了所有那些时间。 - Mike Dunlavey

7

一些计算过程足够规则,可以利用GPGPUs的优势:最近的图形卡基本上是专门的大规模并行数值协处理器。例如,您可以使用OpenCL编写数值核心。否则,学习C++11(而不是C++标准的早期版本)或C语言。在许多情况下,Ocaml几乎可以与C ++一样快,但编码更容易。

也许您的问题可以通过scilabR来处理,我没有足够的理解来提供更多帮助。

您还可以利用您的多核处理器,例如使用PthreadsMPI

最后,Linux操作系统或许更适合处理大规模计算。值得注意的是,如今大多数超级计算机都在使用它。

4

如果执行速度是最高优先级,通常意味着使用Fortran。


2
尝试使用Julia:它的杀手锏是以高级简洁的方式进行编码,同时保持与Fortran/C相同数量级的性能。

关于与C语言的比较,请参见:https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/julia-gcc.html。Julia语言最好的一点是它易于优化,并且由于它利用了多重分派的能力,在第一次运行时就对代码进行了优化,这使得它在第一次运行后看起来像C语言。 - R. W. Prado

0

试着看看DMelt数学程序。该程序调用Java库。Java虚拟机可以为您优化长时间的数学计算。


0

PARI/GP 是我迄今为止使用过的最好的编程工具。它是用 C 语言编写的。


-1

在工程中进行数值运算的标准工具通常是Matlab(或免费替代品Octave或已提到的Scilab)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接