Julia 的良好绩效实践

0 optimization julia

作为物理系的学生,我们主要使用 Fortran 进行计算,但我想尝试一些新的东西,发现了 Julia 以及它解决了其他语言的一些问题的事实,我还发现理论上它和 C 一样快,并且想学习它,但是当我尝试将一些代码从 Fortran 移植到 Julia,但发现速度慢得多。作为初学者,我知道可以进行很多优化。所以我想找出并学习良好的实践和优化来应用代码。

is = zeros(64,64)
kp = zeros(Int8, 1,64)
km = zeros(Int8, 1,64)

for i in 1:64
    for j in 1:64
        is[i,j] = 1
    end
end

for i in 1:63
    kp[i] = i+1
end
for i in 2:64
    km[i] = i-1
end
kp[64]=1
km[1]=64
for T in 1:500
    tr::Float32 = T*0.01
    for k in 1:1000
        for i in 1:64
            for j in 1:64
                en :: Float64=-1*is[i,j]*(is[kp[i],j]+is[km[i],j]+is[i,kp[j]]+is[i,km[j]])
                den:: Float64=-2*en
                if (den<0) 
                    is[i,j]=-1*is[i,j]
                end
                x:: Float64=rand()
                p:: Float64=exp(-den/tr)
                if (den >=0)
                    if (p>x)
                        is[i,j]=-1*is[i,j]
                    else
                        is[i,j]=is[i,j]
                    end
                end
            end
        end
    end
    m:: Float64=0.
    for i in 1:64
        for j in 1:64
            m=m+is[i,j]
        end
    end
    m=m/(64*64)
    e:: Float64=0.
    for i in 1:64
        for j in 1:64
            ei=-1*is[i,j]*(is[kp[i],j]+is[km[i],j]+is[i,kp[j]]+is[i,km[j]])
            e=e+ei
        end
    end
    e=e/2
    println(tr, " ", abs(m)," ", e)
end
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助

sun*_*ica 5

Julia手册的性能提示页面是编写高性能代码的一个很好的参考。如何优化 Julia 代码:实用指南涵盖了手册页中没有的一些内容,包括现在可用于性能监控和调优的更新、更高级的工具。

该文章的脚注还链接到其他有用的博客文章和视频,其中Julia for Data Science 的性能提示页面可能是初学者最容易访问的页面您可以将其视为 Julia 手册性能提示页面的简化版本,其中涵盖了 Julia 性能方面最重要的、容易实现的成果。这可能是对初学者 Julia 代码中最常见的性能问题以及解决方法进行简洁、可读的概述的最佳起点。

至于这个特定的代码,全局范围内的所有内容可能是问题的一个重要部分,并且很容易解决 - 通过将其包含在函数中然后调用它。
您还可以通过完全避免循环来避免早期循环中的一些边界检查 - is = fill(1, 64, 64), kp = [2:63; 1], km = [64; 1:63]; 尽管这可能不会对这些小数组的性能产生太大影响。迭代列而不是行,即切换嵌套循环中和的
顺序也可能会有所帮助(这一点也适用于 Fortran,因为 Julia 和 Fortran 在存储矩阵时都是以列为主)。for i in 1:64for j in 1:64

为了面向未来,上述脚注中的其他链接是:

和 YouTube 视频