#python #multithreading #pysat
#python #многопоточность #pysat
Вопрос:
Я использую PySAT. Есть ли где-нибудь параметр threads number? Или упакованный решатель, который можно распараллелить таким образом?
(В настоящее время я использую решатель Glucose4.)
Комментарии:
1. Связано, но не то, о чем вы просите: github.com/pysathq/pysat/issues/49
2. Я открыл свою проблему здесь , и есть способ сделать это, но он не совсем универсален. Хитрость заключается в разделении регистра по
n
переменным, таким образом, вы можете использовать2^n
ядра. Вы решаете одну и ту же формулу в каждом потоке, но сTrue/False
заменой этих переменных, и, надеюсь, это быстрее
Ответ №1:
Я покопался в исходном коде, и ответ, похоже, отрицательный.
Единственная ссылка на потоковую обработку в кодовой базе PySAT — это некоторый код, который проверяет, является ли текущий поток «основным», и настраивает логику обработки сигналов на основе этого. Ничто в библиотеке не позволяет пользователю контролировать уровень параллелизма, используемый фактическим решателем.
Лучший обходной путь был упомянут спрашивающим в комментариях: вручную разделить проблемное пространство на подзадачи, которые могут быть независимо решены параллельно. К счастью, SAT особенно легко поддается этому подходу.
Комментарий к публикации:
Хитрость заключается в разделении регистра по
n
переменным, таким образом, вы можете использовать2^n
ядра. Вы решаете одну и ту же формулу в каждом потоке, но сTrue
False
заменой / для этих переменных, и, надеюсь, это быстрее
Комментарии:
1. Я отредактировал свой комментарий, чтобы его было легче найти, потому что он немного более конкретен в отношении того, что вам на самом деле нужно делать