function juliaset(z0, c, maxiter)
z = z0
for i in 1:maxiter
abs2(z) > 4f0 && return (i - 1) % UInt8
z = z * z + c
end
return maxiter % UInt8 # % is used to convert without overflow check
end
function threaded(output, input, c)
Threads.@threads for i in eachindex(input)
@inbounds output[i] = juliaset(input[i], c, 255)
end
return output
end
# scale should change with picture size
scale = 200.0 # the greater the more details
width, height = 800, 700
x = -0.5; y = 1.2
c = x+y*im
xvalues = LinRange(-width/2, width/2, width) ./ scale
yvalues = LinRange(-height/2, height/2, height) ./ scale
inputmatrix = xvalues' .+ yvalues .* im
result = fill(UInt(8), height, width)
@time threaded(result, inputmatrix, c)
That should be faster… You could make it even faster with an inner loop, that can be SIMD accelerated