Recherche…


Introduction

L'instabilité de type se produit lorsque le type d' une variable peut changer à l'exécution et ne peut donc pas être déduit à la compilation. L'instabilité de type entraîne souvent des problèmes de performances. Il est donc important de pouvoir écrire et identifier un code de type stable.

Ecrire un code de type stable

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

La synchronisation des deux fonctions ci-dessus montre des différences majeures en termes d'allocations de temps et de mémoire.

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)

Cela est dû au code de type instable dans sumofsins1 où le type de r doit être vérifié pour chaque itération.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow