Five-argument mul! C

mul! on 1.3.1 does not update x[:,:,1] in

x = zeros(2,2,2)
mul!(x[:,:,1],[1,1],[1 2],1.0,1.0)

In contrast, it does update x[1] in

x = [zeros(2,2) for i=1:2]
mul!(x[1],[1,1],[1 2],1.0,1.0)

Is this difference obvious?

Julia slices make copies by default, not views. So the 5-argument mul in your first example is updating the copy.
Try

x = zeros(2,2,2)
@views mul!(x[:,:,1],[1,1],[1 2],1.0,1.0)
x # updated

Or

x = zeros(2,2,2)
xsubsetcopy = x[:,:,1]
mul!(xsubsetcopy,[1,1],[1 2],1.0,1.0)
x # all zeros
xsubsetcopy # updated
3 Likes

Thanks. The slices/copy thing caught me (again). I guess your first example could also be

mul!(view(x,:,:,1),[1,1],[1 2],1.0,1.0)
1 Like