朱莉娅:比Fortran更快,比Numpy更清洁

2021-06-21 01:26:43

在运行Julia VS Numpy和Fortran的比较后,切换到Julia的朱莉娅,用于性能和代码简单。

朱莉娅是一种漂亮的新语言,其中,除了其他事情,旨在将所谓的“双语问题”在科学计算中。

也就是说,我们通常在快速原型语言语中测试Matlab或Python的想法,但是当测试完成后,它的时间级进行了一些严重的计算,我们需要依赖于不同(编译)的编程语言。

存在许多工具来缓解过渡,并包装Fortran Libriesinto Python到目前为止一直是我的偏好。例如,使用F2PY的一些FORTRAN似乎是一种非常方便的方法(和分发)有效的FORTRAN代码,任何人都可以运行。我还可以跟踪此帖子中Python中使用Fortran的各种方式。

现在,朱莉娅旨在以激进的方式解决这个问题。该想法是USEA单个编程语言,它具有交互式模式,适合快速原型设计,但也可以在C / FortRanperFormance中编译和执行。

numpy在许多情况下仅限于单线线,很难编写和读取,并且可以比两个替代方案慢得多。

FORTRAN提供了具有很简单的代码的性能,但需要一些包装来从Python等高级语言调用Fortran。

朱莉娅比Numpy更快,更容易写,甚至能够击败Gfortran的表现。

老实说,我在我的表现比较中发现了我发现的震惊.Julia是惊人的。我没想到朱莉娅会在我的测试中用编译器优化击败Gfortran。它目前通过崇高的保证金进行。

关于代码可读性的意见当然是主观的,但我想解释一下我认为Numpy提供最糟糕的质量体验。

到目前为止,解释的语言都需要手动重新写入循环作为矢量操作。在某些情况下,这变成了易于任务,但在许多年份进行了如此广泛的情况下(首先在Matlab,那么在Python中),我来了结论我讨厌手动向量化代码。我更愿意为循环编写并让编译器向我括起来!

一见钟情,你能告诉它是什么,一见钟情吗?你能推理代码的表现吗?你甚至可以猜出输出m的尺寸吗?

现在,这里是一个嵌套的循环,它与上述代码相同。

难怪他们为什么首先命名为fortran“配方翻译”。朱莉娅语法在这方面完全相似。

所以即使我同意这个想法,而不是Python是一种美丽的语言,我认为numpy也不认为同样的持有。是的,Numpy允许我们留在一个Python框架内,并获得简单的单行(无论如何非常整洁),但是后方产生的NumpyCode难以读取。

我相信没有明确的基准。运行一系列完全无关的玩具问题的无关测试,并声称一定的诱惑是最好的,因为在大多数测试中都有很好的测试,如果我们对某些特定和更多的真实组织感兴趣,这是毫无意义的。

而不是试图依靠大型的,有用的基准,我认为优选不时运行一些适合我们自己项目的微基准。

如果我们可以预测我们的代码的主要性能瓶颈,我们的代码我们的主要性能瓶颈可以提出一个简单但可以享受的实例,并创建适合我们需求的特定表演。

例如,在我的数字项目中,我做了很多阵列操作,我评估了很多复杂的幂级。所以这就是此测试的原因。我的基准测试已经上面描述了,它只是:给定矢量a,形成矩阵

所有测试都在英特尔I7-4700MQ CPU(3.40 GHz,高速缓存)中运行,其中8 GB的DDR3 RAM

函数eval_emp(n)a =范围(0,stop = 2 * pi,length = n)a =矩阵{compledf64} @inbounds for j中的[电子邮件保护]为1:n为1 :na [i,j] = exp((100 + im)* im * sqrt(a [i] ^ 2 + a [j] ^ 2))结束返回aendeval_exp(5)打印(字符串("运行循环",threads.nthreads(),"线程\ n")),对于1000:1000:10000 @time begin a = eval_exp(n)endend

注意:ST和MT分别用于单线程和多线程。请注意,在所有情况下,使用快速数学优化标志,允许编译器重新排序数学表达式以获得准确性,但以可能打破IEEE合规性的方式。

有趣的是,从上表中,我们可以计算线程效率,即从单个到多线程移动时的加速因子。

在四核CPU中,Julia的多线程效率约为4.9,而依靠Gfortran和OpenMp,我们得到了大约3.6。因此,Julia有效地利用超线程,在OpenMP中很少见到这一点。

事实证明,Julia有更多的工具来提高性能。其中一个opeoris loopvectorization.jl

正如梅森在这个主题中所建议的julialang论坛,至少单线程版本可以通过诉诸该图书馆来非常显着。

我将继续深入挖掘如何通过诉诸朱莉娅来衡量计算机硬件的最后一点。敬请关注!

为什么福特兰仍然使用。我对Fortran进行了公平的经验,我相信今天使用Fortran的稳妥原因。

朱莉娅将在HPC中取代Fortran吗? 然而,移徙者与朱莉娅对各种场地进行了比较,我倾向于认为,随着时间的推移,Julia似乎是在HPC利基的超越福特兰。 我' m martin d. maas ph.d,以及Inthis网站我分享教程,软件审查,评论等,关于更多,关于Mathematics,Compony和Software开发。