Performance Julia文件输入读取速度

Performance Julia文件输入读取速度,performance,optimization,input,julia,Performance,Optimization,Input,Julia,在解决代码阻塞问题时,我尝试一下Julia,在本例中,是2010年第1C轮() 解决方案基本上是: for tc = 1:int(readline()) n = int(readline()) a = [map(int, split(readline())) for _ = 1:n] ans = 0 for (i, x) in enumerate(a) for y in a[i + 1:end] ans += (x[1]

在解决代码阻塞问题时,我尝试一下Julia,在本例中,是2010年第1C轮()

解决方案基本上是:

for tc = 1:int(readline())
    n = int(readline())
    a = [map(int, split(readline())) for _ = 1:n]
    ans = 0

    for (i, x) in enumerate(a)
        for y in a[i + 1:end]
            ans += (x[1] - y[1]) * (x[2] - y[2]) < 0
        end
    end

    println("Case #", tc, ": ", ans)
end

情况发生变化,当我用随机数代替文件输入时(仍然比C++慢):


有没有什么方法可以优化Julia中的文件读取时间(我使用的是v0.3.7)?

因此我在大输入上的基线时间(
time cat A-large-practice.in | Julia original.jl
)是

在我的系统上,Julia大约需要0.2秒才能开始运行文件。将代码放入函数中可能是最重要的第一步-这意味着所有内容都不是全局的,这可能会由于类型推断困难而影响性能。这让我想到了
真正的2.044s

第二个问题实际上是朱莉娅类型推断的缺陷,原因不同。基本上,列表理解+映射=某种类型的不稳定性。由于必须检查类型,这会传播到整个系统,使算法稍后变得缓慢。修复方法是简单的
a=Vector{Int}[map(Int,split(readline()))for=1:n]
,这就给了我
real 0m0.474s


因此,大部分时间都花在Julia启动和
映射
行上,并实际打印
案例。如果我真的将
映射
行扩展到for循环,我可以将其细化到
real 0m0.411s
,但这似乎不值得。

谢谢,这让我将其细化到
real 0m1.116s
。但是我看不到在我的机器上把代码放在函数中有什么好处。另外,也许你会发现它很有用,
time cat a-large-practice.in | julia a.jl
time julia a.jl慢0.15毫秒左右
julia
real    0m6.196s
user    0m6.028s
sys     0m0.373s

c++
real    0m0.392s
user    0m0.338s
sys     0m0.053s


pypy
real    0m0.529s
user    0m0.507s
sys     0m0.016s
julia
real    0m3.065s
user    0m2.868s
sys     0m0.338s

c++
real    0m1.413s
user    0m1.348s
sys     0m0.055s

pypy
real    0m22.491s
user    0m22.257s
sys     0m0.160s
real    0m2.730s
user    0m2.683s
sys     0m0.351s