4

В настоящее время я занимаюсь некоторыми исследованиями в области теоретической информатики, и одним из основных инструментов, которые я использую, является пролог. Я нашел его особенно удобным для написания очень быстрых тестов, чтобы опровергнуть догадки.Есть ли автоматическая параллельная реализация пролога?

Однако я дошел до того, что поиск грубой силы становится слишком медленным. Хотя я мог бы использовать другой язык, все мое использование пролога заключается в том, что очень быстро/просто написать код для проверки гипотезы.

Мне интересно, существует ли реализация Prolog, которая позволяет автоматически парализоваться? Это не должно быть бритвой быстро, но в идеале я ищу что-то, что я мог бы просто выбросить свой код и получить хотя бы небольшое ускорение.

Я не знаю, возможно ли это. Поиск Google показывает множество академических статей об автоматическом параллелизме в Prolog, но я не встречал никаких реализаций. Тем не менее, я действительно знаком с SWI-прологом, поэтому я определенно мог бы использовать советы от знакомых со многими реализациями.

В моем коде используются разрезы, но я уверен, что смогу их устранить. Что касается IO, то только IO печатает на консоли, что, вероятно, может быть перемещено за пределы любого параллельного кода.

+0

Я знаком с несколькими реализациями Prolog, и я сделал некоторые проекты, которые включают разделение поискового пространства на части, поэтому работа может быть распределена по нескольким машинам. Однако я не знаю каких-либо вариантов drop-and-go. Один из взглядов на неудачу компьютерных систем Японии Пятого поколения заключается в том, что параллелизм и логическое программирование плохо подходят. В статье [Wikipedia] (http://en.wikipedia.org/wiki/Fifth_generation_computer#Failure) упоминается об этом и ссылки на [этот документ arXiv.org] (http://arxiv.org/abs/0904.3036). – hardmath

+0

См. Также [Логическое программирование и параллелизм: личная перспектива] (http://dtai.cs.kuleuven.be/projects/ALP/newsletter/may06/nav/articles/ueda/article.html) Казунори Уэды, который кажется для меня довольно оптимистичный взгляд. – hardmath

+0

Я помню, как читал о «параллельных» и «параллельных» вариантах Prolog, но я не знаю, превратилось ли это в современные среды Prolog. –

ответ

3

С Прологом нетрудно найти параллелизм, трудно выбрать, какой из них использовать;).

Возможно, Parlog - logic based programming language, designed for parallel execution поможет вам. Существует implementation for windows, но я не уверен, что он использует несколько ядер. Однако вы можете связаться с авторами.

5

Вы уверены, что вам нужен параллелизм, чтобы «получить хотя бы небольшое ускорение»?

Вы говорите, что знакомы только с SWI-Prolog, поэтому попробуйте другие системы Prolog. Согласно результатам эталонного теста в http://www.probp.com/performance.htm (который может или не может быть релевантен вашей конкретной проблеме), вы должны попробовать B-Prolog, YAP и SICStus-Prolog (этот не является бесплатным). Если вам повезет, вы можете получить несколько раз быстрее, просто переключив свою систему Prolog.

Другой возможный недорогой способ ускорения - используйте систему с поддержкой табуляции (B-Prolog, XSB или YAP) и просто добавьте что-то вроде :- auto_table. в качестве первой строки вашей программы. В зависимости от вашей проблемы и вашей существующей программы вы можете получить значительное ускорение (или вообще не получить ускорение).

+0

+1 для поиска других компиляторов. Gnu-Prolog, в частности, компилируется в собственный код, что почти наверняка даст заметное ускорение над SWI-Prolog. – hardmath

Смежные вопросы