2016-10-05 3 views
1

Ich möchte ein System einrichten, das vollständig für Z3 gewidmet ist. Nehmen wir an es hat 4 Kerne und ich möchte die ganze Kraft der Maschine nutzen.Verwenden Sie Z3 in Multicore-Server

Ich werde große Formeln lösen, die ungefähr 1000 inkrementelle Behauptungen haben.

Ich möchte die Formeln in einer parallelen Weise lösen. Ich habe this question gelesen und ich sehe, dass eine eindeutige Context für jede Instanz erstellt werden sollte, die eine Formel löst.

Meine Frage ist dann, was ist der optimale Weg, um die vollen Systemressourcen (4 Kerne) zu nutzen und Formeln mit inkrementellen Behauptungen zu lösen? Sollte ich einen Kontext pro Kern erstellen und irgendwie den Push synchronisieren und mit ihnen zusammenkommen, um die Formeln inkrementell zu lösen?

Dank

+0

Ich glaube nicht, dass es einen "optimalen" Weg gibt, es hängt wirklich von den Problemen ab, die Sie versuchen zu lösen. Wenn Sie die API verwenden, müssen Sie für jeden Thread/Prozess separate Kontexte verwenden. Ich glaube nicht, dass es einen guten Grund dafür gibt, mehr als einen Kontext pro Thread/Prozess zu haben. –

+0

Also würden Sie einen Kontext pro Kern erstellen? Wird jeder Kontext einen anderen Kern verwenden? Da es 1000 Behauptungen geben wird, die inkrementell gelöst werden, wenn 4 Kontexte bedeutet, haben Sie Informationen viermal dupliziert (1 pro Kern). Ich richtig? Gibt es einen besseren Weg, es zu tun als nur jede Behauptung in jedem Kontext zu haben? Danke @ChristophWintersteiger – user1618465

Antwort

1

Ausdrücke über einen Kontext erstellt wurden, können nicht in einem anderen Kontext verwendet werden. Wenn also diese Kerne/Kontexte dieselben Ausdrücke benötigen, müssen sie kopiert und/oder übersetzt werden (siehe auch Z3_translate).