サーチ…


前書き

型の不安定性は、変数のが実行時に変更され、コンパイル時に推測できないときに発生します。タイプ不安定性はパフォーマンス上の問題を引き起こすことが多いため、タイプ安定コードを記述して識別することが重要です。

型安定コードを書く

function sumofsins1(n::Integer)  
    r = 0  
    for i in 1:n  
        r += sin(3.4)  
    end  
    return r  
end  

function sumofsins2(n::Integer)  
    r = 0.0  
    for i in 1:n  
        r += sin(3.4)  
    end  
    return r  
end

上記の2つの機能のタイミングは、時間とメモリ割り当ての点で大きな違いがあります。

julia> @time [sumofsins1(100_000) for i in 1:100];
0.638923 seconds (30.12 M allocations: 463.094 MB, 10.22% gc time)

julia> @time [sumofsins2(100_000) for i in 1:100];
0.163931 seconds (13.60 k allocations: 611.350 KB)

これは、 sumofsins1のタイプが不安定なコードのため、 rのタイプが繰り返しごとにチェックされる必要があるためです。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow