Tu peux essayer Julia. C'est assez proche de Python et a beaucoup de constructions MATLAB. La traduction est ici:
F = @parallel (vcat) for i in 1:10
my_function(randn(3))
end
Cela rend les nombres aléatoires en parallèle aussi, et concatène simplement les résultats à la fin de la réduction. Cela utilise le multitraitement (vous devez donc addprocs(N)
ajouter des processus avant de l'utiliser et cela fonctionne également sur plusieurs nœuds d'un HPC, comme indiqué dans cet article de blog ).
Vous pouvez également utiliser à la pmap
place:
F = pmap((i)->my_function(randn(3)),1:10)
Si vous voulez un parallélisme entre les threads, vous pouvez utiliser Threads.@threads
(assurez-vous toutefois de rendre l'algorithme thread-safe). Avant d'ouvrir Julia, définissez la variable d'environnement JULIA_NUM_THREADS, puis procédez comme suit:
Ftmp = [Float64[] for i in Threads.nthreads()]
Threads.@threads for i in 1:10
push!(Ftmp[Threads.threadid()],my_function(randn(3)))
end
F = vcat(Ftmp...)
Ici, je crée un tableau séparé pour chaque thread, afin qu’ils ne se contredisent pas lors de l’ajout au tableau, puis concaténent les tableaux par la suite. Les threads étant assez nouveaux, nous utilisons maintenant directement les threads, mais je suis sûr que des réductions et des maps threadées seront ajoutées comme dans le cas du multitraitement.