Optimized swi-prolog for intel architecture


I just noticed this article that describes how swi-prolog can be compiled to be specifically optimized for intel architecture cpu capabilities.

Has someone tried this out?

It sounds like a great additional way to get further performance – perhaps its worth to have such a precompiled version as well for a specific family of CPUs.




Has someone tried this out? No, but added to my to-do list, all be it near the bottom.

I only glanced at the document. Are all of the tools mentioned free?

With some of these types of tools you need to send in an e-mail and explain why you need it. Had to do this to get the drivers to use TensorFlow on laptop, took a few days.

Hi Eric,

I didn’t check, but as far as i know intel, these tools are typically free --, its the processor that intel sells, not the intel optimized compilers.

There could be some registration, to get on a mailing list.

I plan to try it out once i get back to optimising my code …


The paper seems to test on only one program (Towers of Hanoi), which doesn’t exercise many parts of Prolog.
Something like the Aquarius benchmark suite or the Mercury benchmarks would give more useful results.

Did some more reading to see if the tools are free. Apparently not.

In the document is

The most convenient way to install Intel tools is downloading and installing Intel® Parallel Studio XE 2017.

The prices are $699, $1599 and $2949.

Not something I plan to put in my budget for now.

Glad you noted Mercury, that is my preferred choice if I need an app that I will use a lot and need performance.

We really need a new benchmark suite dealing with all the stuff that is hardly or not covered by these: constraints, garbage collection, dynamic code, indexing, tabling, etc. For one thing we could use that for profile guided optimization.

1 Like


I think a benchmark would be great.

Also, i noticed that Mercury has some libraries that seem to specifically designed for lower level manipulations and performance, such as store [1] – which enables (native?) linked-lists and performant bit arrays [2] – which i guess is translated to native c bit manipulations of unsigned int (32?/64?)

Perhaps such items could also add value for swi-prolog.



[1] https://www.mercurylang.org/information/doc-release/mercury_library/store.html#store
[2] https://www.mercurylang.org/information/doc-release/mercury_library/bt_005farray.html#bt_005farray