Поиск…


Вступление

Нестабильность типа возникает, когда тип переменной может меняться во время выполнения и, следовательно, не может быть выведен во время компиляции. Типичная нестабильность часто вызывает проблемы с производительностью, поэтому важно писать и идентифицировать стабилизирующий код код.

Создать стабильный код типа

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

Сроки выполнения вышеуказанных двух функций показывают значительные различия в распределении времени и памяти.

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