Automatic parallelization/ multithreading

#1

Does Julia do automatic multithreading or parallelization if it is possible? For example, I have code in Fortran and in Julia. For a smaller problem, I get faster performance in Fortran. But as I increase the problem size, Julia gives me much better performance than Fortran. Both codes are same and a lot of “for loops” can be parallelized. As of now, I am just having a serial version in both Julia and Fortran.

Thank you.

1 Like
#2

No - all multithreading in pure Julia is single threaded by default. Called libraries may be using multithreading themselves though (like LAPACK and BLAS/MKL, as far as I know).

You may be experiencing good performance because of vectorization though. We can’t tell you why exactly without the source code though.

1 Like
#3

Below is the portion of the code where calculation is done.
‘’’
for iteration_count = 1:maximum_iterations

    # calculate ∇^2(residual)
    for j = 2:ny for i = 2:nx
        del_residual[i,j] = (residual[i+1,j] - 2*residual[i,j] +
                        residual[i-1,j])/dx^2 +
                        (residual[i,j+1] - 2*residual[i,j] +
                        residual[i,j-1])/dy^2
    end end

    aa = 0.0
    bb = 0.0
    # calculate aa, bb, cc. cc is the distance parameter(α_n)
    for j = 2:ny for i = 2:nx
        aa = aa + residual[i,j]*residual[i,j]
        bb = bb + del_residual[i,j]*residual[i,j]
    end end
    cc = aa/(bb + tiny)

    # update the numerical solution by adding some component of residual
    for j = 1:ny for i = 1:nx
        u_numerical[i,j] = u_numerical[i,j] + cc * residual[i,j]
    end end

    # update the residual by removiing some component of previous residual
    for j = 1:ny for i = 1:nx
        residual[i,j] = residual[i,j] - cc * del_residual[i,j]
    end end

    # compute the l2norm of residual
    rms = compute_l2norm(nx, ny, residual)

    println(iteration_count, " ", rms/initial_rms)

    if (rms/initial_rms) <= tolerance
        break
    end
end
#4

Does the Julia compiler do vectorization automatically? Are there any tutorials for parallelization in Julia? Thank you.