Hello everybody.
I’m very new to Julia. I read documents and many topics in the discourse still I’m not sure I’m doing right.
I want to implement the 2 sets of equations in multi-threads.
my equations something like that
#------First Set------
1.ex = ex + aE1 + aX
2.ey = ey + bE2 + bX
3.ey = ey + cE3 + cX
#------Second Set------
4.E1 = ex + E1
5.E1 = ey + E1
6.E1 = ez + E1
I want to run 1,2,3 (at the same time), then 4,5,6, simultaneously.
what I do in Julia:
function calculate_E(fields)
Threads.@threads for i in 1:(c_x)
for j in 2:(c_y)
for k in 2:(c_z-1)
k_x[i,j,k] = k_x[i,j,k]+ a[i,j,k]*E1[i,j,k] + a[i,j,k]*X[i,j,k]
end
end
end
Threads.@threads for i in 2:(c_x-1)
for j in 1:(c_y)
for k in 2:(c_z)
k_y[i,j,k] = k_y[i,j,k]+ a[i,j,k]*E2[i,j,k] + a[i,j,k]*X[i,j,k]
end
end
end
Threads.@threads for i in 2:(c_x)
for j in 2:(c_y-1)
for k in 1:(c_z)
k_z[i,j,k] = k_z[i,j,k]+ a[i,j,k]*E3[i,j,k] + a[i,j,k]*X[i,j,k]
end
end
end
end
function aux_field(fields)
Threads.@threads for i in 1:(c_x)
for j in 2:(c_y)
for k in 2:(c_z)
E1[i,j,k] = k_x[i,j,k] + E1[i,j,k]
end
end
end
Threads.@threads for i in 2:(c_x)
for j in 1:(c_y)
for k in 2:(c_z)
E2[i,j,k] = k_y[i,j,k] + E2[i,j,k]
end
end
end
Threads.@threads for i in 2:(c_x)
for j in 2:(c_y)
for k in 1:(c_z)
E1[i,j,k] = k_z[i,j,k] + E1[i,j,k]
end
end
end
end
@time for time in 1:t
k_x, k_y, k_z=calculate_ex(k_x, k_y, k_z, E1, E2, E3)
E1, E2, E3=aux_field(k_x, k_y, k_z, E1, E2, E3)
end
am I do it right? When I use Threads.@threads in those functions?
and another question in the function “aux_field” in single threads I can simply write:
E1 = ex + E1
E1 = ey + E1
E1 = ez + E1
Is there a way to make them multithreading without for loops, and it’s even feasible?
P.S. my code’s answers are correct.
Thanks