Тут я не знаю... Надо проверять. Думаете, со временем наберется зависших factor-ов, которые всё забьют?
Да я вообще не понимаю как Вы собрались обрывать другие итерации parfor, у меня они все отрабатывают до конца:
Код:
nth=4;\\Желаемое количество потоков
default(nbthreads,nth);
allocatemem(10^8);
t0=getwalltime();
parfor(d=0,19, my(nd); print1(nd=numdiv(909165008476014999590146574242966924037355637363444071390071+d),", "); if(nd<>192, break); ); print;
print(nth," threads, time: ",strtime(getwalltime()-t0));
quit;
>gpp -q zf.gp
*** Warning: new stack size = 100000000 (95.367 Mbytes).
4, 384, 16, 32, 48, 24, 16, 768, 32, 1024, 8, 16, 2, 96, 8, 512, 80, 256, 32, 64,
1 threads, time: 27,792 ms
>gpp -q zf.gp
*** Warning: new stack size = 100000000 (95.367 Mbytes).
32, 48, 16, 384, 768, 16, 32, 24, 1024, 2, 96, 8, 512, 80, 256, 32, 16, 64, 8, 4,
4 threads, time: 8,583 ms
>gpp -q zf.gp
*** Warning: new stack size = 100000000 (95.367 Mbytes).
32, 48, 8, 2, 80, 96, 768, 512, 16, 32, 256, 384, 32, 1024, 16, 24, 64, 16, 8, 4,
24 threads, time: 9,561 ms
Видите, даже в один поток parfor не обрывается.
Для сравнения тот же код с обычным for:
Код:
>gpp -q zf.gp
*** Warning: new stack size = 100000000 (95.367 Mbytes).
4,
1 threads, time: 7,482 ms
-- 10.03.2026, 20:48 --С другой стороны, в sequential части break вполне себе работает:
Код:
...
parfor(d=0,19, my(nd); nd=numdiv(909165008476014999590146574242966924037355637363444071390071+d); nd, t, print1(t,", "); if(t<>192, break); ); print;
...
>gpp -q zf.gp
*** Warning: new stack size = 100000000 (95.367 Mbytes).
32, 16, 384, 4,
24 threads, time: 9,554 ms
Оборвалось после 4-го так как у меня лишь 4 ядра процессора - и они все таки досчитались до конца и лишь новые не стали запускаться.
Т.е. запуск на многопотоковых процессорах выигрыша не даст, все итерации сумеют запуститься и досчитают до конца.
Да ещё и в конце большинство ядер будут простаивать ожидая завершения всего parfor, самой медленной итерации.
Так что для PARI это очень сомнительная идея, проблем больше выигрыша, имхо.