为什么Julia代码性能比Fortran低很多?

我在几个地方读到 Julia 代码的性能可以(在某些条件下)与 Fortran 相比较。我在 Julia 中编写了以下代码:

Pi = 3.141592653589793238462643
n = 100000 
function integration_2d(n,Pi,sum)
       h = Pi/n
       for i=1:n
           x = h*(i-0.5)
           for j=1:n
               y = h*(j-0.5)
               sum = sum + cos(x + y)
           end
       end
       sum*h*h
end

平均执行时间为 180 秒。与使用-O3选项编译的 Fortran 代码相比,结构非常接近的 Fortran 代码的执行时间为 0.013 秒。我想知道 Julia 代码在哪里失去了性能,任何评论都值得赞赏。谢谢。

回答

由于您没有提供 Fortran 代码,我假设您的代码与 Fortran 的实现方式不同。您的 O(N^2) 算法需要 CPU 每秒执行 > ~10^12 次操作(即使使用汇编程序),我猜您没有使用超级计算机进行此测试:)。我们可以以需要 O(N) 性能的方式实现您的算法。Julia 代码如下所示:

function integration_2d(n, sum=0.0)
    h = ? / n
    multiplier = 1
    for i = 2:2n
        z = h * (i - 0.5)
        sum = sum + multiplier * cos(z)
        if i <= n
            multiplier += 1
        else
            multiplier -= 1
        end
    end
    sum * h * h
end

julia> @time integration_2d(100000)
  0.002846 seconds

在我的笔记本电脑上是 0.002846 秒(比您要求的 Fortran 时间快 4 倍以上)(因为您没有提供 Fortran 代码,我无法正确比较同一台机器上的性能)


以上是为什么Julia代码性能比Fortran低很多?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>