я бегу
julia --threads 4
Затем команды
using Distributed
@time pmap(x->begin println(x); sleep(1); println(x); x end, 1:10);
Я получаю результат
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
10.766960 seconds (2.50 M allocations: 140.642 MiB, 0.20% gc time, 6.88% compilation time)
Это ясно указывает на то, что это выполняется серийно. Почему код не выполняется параллельно?
Для количества одновременных задач установлено значение nworkers() , что на единицу меньше, чем nprocs(), которое основано не на количестве потоков, а на количестве процессов, с которых запущена Julia, что может быть установите с помощью -p
или --procs
.
$ julia --procs auto # set to num logical cores; can also be an explicit number
julia> using Distributed
julia> nworkers()
4
julia> @time pmap(x->begin println(x); sleep(1); println(x); x end, 1:10);
From worker 5: 2
From worker 2: 3
From worker 3: 1
From worker 4: 4
From worker 3: 1
From worker 5: 2
From worker 4: 4
From worker 2: 3
From worker 4: 7
From worker 5: 5
From worker 3: 6
From worker 2: 8
From worker 5: 5
From worker 4: 7
From worker 5: 9
From worker 3: 6
From worker 2: 8
From worker 4: 10
From worker 5: 9
From worker 4: 10
3.047513 seconds (61.13 k allocations: 4.138 MiB, 1.12% compilation time)
Спасибо! знание того, что мне нужно измениться
procs
, а неthreads
, было тем, что мне было нужно. Другой способ сделать это — бежатьaddprocs(4)