Я написал несколько предикатов для решения большой задачи планирования, и они работают хорошо, но я бы хотел, чтобы у них была лучшая производительность.Я запускаю profile/1
и вижу, что предикаты, связанные с CLPFD, занимают 99% времени.Особенно garbage_collect
- это занимает 37% времени выполнения.
Теперь, что я могу сделать?Мой код не особенно сложен, он использует много cumulative/2
и немного global_cardinality/2
, ничего особенного сверх этого.Я пробовал несколько разных вариантов для labeling/1
(ff, ffc, bisect), но нет никакой разницы (на самом деле bisect ухудшает ситуацию).Я пытался увеличить лимиты памяти с помощью set_prolog_stack/2
(глобальный лимит, локальный лимит, глобальный min_free, локальный min_free).
Есть ли что-нибудь еще, что я могу сделать?
Есть ли альтернативные имплементацииcumulative/2
или global_cardinality/2
, которые могут иметь лучшую производительность?