По поводу сравнения ваших gp64 и gpp - правильно ли я понял, в gp64 многопоточность запрещена на этапе компиляции?
Ну в исходник я не смотрел, но похоже что да, на этапе компиляции:
Код:
GP/PARI CALCULATOR Version 2.13.4 (released)
amd64 running mingw (x86-64/GMP-6.1.2 kernel) 64-bit version
compiled: Mar 25 2022, gcc version 8.3-posix 20190406 (GCC)
threading engine: single
(readline v8.0 enabled, extended help enabled)
Т.е. у вас в принципе однопоточная версия gp работает быстрее многопоточной gp (безотносительно использования параллелизации)?
На параллельном коде - да, очень часто так и есть. Не всегда. Помню же что получал ускорение втрое (вместо вчетверо) на какой-то задаче.
Не параллельный же код выполняется параллельным PARI/GP в одном потоке вообще страшно медленно (18.7с против 4.4с, специально показал выше).
Вы видите ускорение при использовании nth=default(nbthreads); vs. nth=1; на одной и той версии (многопоточной) gp?
Вижу, но далеко не в 4 раза (при полной загрузке всех 4 потоков):
C:\TEMP>gp64 -q par.gp
n=3021418/99999988, nth=1, time: 2min, 40,742 ms
C:\TEMP>gpp -q par.gp
n=3021418/99999988, nth=1, time: 5min, 49,685 ms
C:\TEMP>gpp -q par.gp
n=3021418/99999988, nth=4, time: 2min, 39,603 ms
Здесь увеличил объём работы до

, плюс добавил вывод актуального значения nth, в остальном код последний показанный.
Вот только такое ускорение не имеет смысла: оно с загрузкой всех 4 потоков всего лишь достигает скорости однопоточного приложения. Которое можно запускать в 4 потока руками и будет ровно в 4 раза быстрее (запустил лишь одну th, но nth=4 для деления задачи на 4 части):
C:\TEMP>gp64 -q par.gp
n=756677/99999988, nth=4, time: 40,623 ms
Т.е. за 40с можно посчитать всю задачу если и поделить и запустить её руками каждую часть в однопоточном режиме. За 40с, не 160с как многопоточная версия на всех 4 ядрах.
Вот примерно это я и имел в виду когда говорил что parfor на наших задачах работает плохо (а внутренние вычисления бывают и ещё значительно проще!). Мало того что его ещё подшамань (и не всегда это получается! например может тупо не хватить памяти под общие таблицы для всех потоков хотя можно было бы их хранить в одном экземпляре в общей памяти, да, знаю что MPI такое не позволяет), так и выигрыша может вообще не быть, а то и сильный проигрыш.
-- 25.08.2025, 00:29 --Да, для справки: все 4 ядра физические, никакого гипертрейдинга, частоты ядер на время работы стабильные, проц тёплый (не перегревается). Причин тормозить многопоточному коду не вижу. При этом одновременно 4 однопоточных кода работают прекрасно. Как и мои многопоточные программы на С, Дельфи, Асме. Проблема считаю где-то в PARI/GP (gpp.exe). Наблюдалось и на нескольких предыдущих версиях, это не глюк конкретно этой. Более новые версии боюсь использовать, там у них постоянно глюки даже в forprime, а он мне нужен.