Я работаю над проектом Python, где в настоящее время я пытаюсь ускорить работу с некоторыми ужасными способами: я настроил свои решатели Z3, затем я разблокировал процесс и выполнил Z3 решение в дочернем процессе и передать образцовое представление модели для родителя.Многопоточный Z3?
Это отлично работает и представляет собой первый этап того, что я пытаюсь сделать: родительский процесс теперь больше не связан с ЦП. Следующим шагом будет многопоточность родителя, так что мы сможем решить несколько решателей Z3 параллельно.
Я уверен, что у меня есть взаимный доступ к Z3 на этапе настройки, и только один поток должен касаться Z3 в любой момент времени. Однако, несмотря на это, я получаю случайные segfaults в libz3.so. Важно отметить, что на данный момент не всегда тот же самый поток, который касается Z3 - тот же объект (а не сами решатели, но выражения) могут обрабатываться разными потоками в разное время.
Мой вопрос: возможно ли многопоточное Z3? Здесь содержится краткая заметка (http://research.microsoft.com/en-us/um/redmond/projects/z3/z3.html): «Невозможно получить доступ к объектам Z3 из нескольких потоков», что, я думаю, ответит на мой вопрос, но я надеюсь, что это означает, чтобы сказать, что нужно 't получить доступ к Z3 из нескольких потоков одновременно. Другой ресурс (Again: Installing Z3 + Python on Windows) утверждает, что сам «Леонардо» «Z3 использует локальное хранилище потоков», которое, я думаю, опустило бы все это, но а) ответ с 2012 года, поэтому, возможно, все изменилось, и б) возможно он использует поточное локальное хранилище для некоторых несвязанных вещей?
В любом случае, возможно многопоточное Z3 (от Python)? Мне бы очень хотелось, чтобы вы надавили фазу установки на дочерние процессы ...
А, это имеет смысл. Спасибо за вашу помощь! Я просачивал контексты через потоки. – Zardus
Это обычный шаблон для работы с объектами в одном потоке за раз, но для совместного использования его между потоками. Это делает локальное хранилище потоков очень опасным. Пример: используйте общий контекст и вызовите только Z3 в заблокированной области. – usr
@ Chrisoph Wintersteiger: «Существует также известная ошибка, которая срабатывает, когда много объектов контекста создаются одновременно (в моем списке задач, хотя ...)» - Это решение? Я пытаюсь многопоточно создавать объекты z3 в моей программе, но всякий раз, когда я запускаю распараллеливание слишком большого числа формул, в то время, когда я получаю исключение WindowsError о нарушении прав доступа, которое не имеет для меня большого смысла, но может быть связано с вашим заявление. –