For the StaticArrays aficionados here: is it possible to choose dynamically in a type stable way whether an operation is carried out with static arrays or with regular arrays?
No, but as long as you have a function barrier to isolate the type instability, that should be fine.
So in pseudo code
struct MyProblem{T}
myarray::T
end
function generate_problem(x::Int)
if x > 100
problem = MyProblem(DynamicArray)
else
problem = MyProblem(StaticArray)
end
do_computation(problem)
end
I think one of the important skills to learn with Julia is to be able to exploit that it is dynamic, while still getting the performance benefits of a static language by using function barriers.
6 Likes
But if one of them can be the default output, then 2 variable names can be used and the result can be copied over at the end. I am assuming do_computation
is expensive and returns the output as a MyProblem
instance when given a static array wrapper but works inplace when passed normal array wrapper. I think this should be type stable if I understand correctly.
function generate_problem(x::Int)
problem1 = MyProblem(DynamicArray)
if x > 100
do_computation(problem1)
else
problem2 = MyProblem(StaticArray)
problem1.myarray .= do_computation(problem2).myarray
end
problem1
end