/************************************************************************ ** ** ** The YapTab/YapOr/OPTYap systems ** ** ** ** YapTab extends the Yap Prolog engine to support sequential tabling ** ** YapOr extends the Yap Prolog engine to support or-parallelism ** ** OPTYap extends the Yap Prolog engine to support or-parallel tabling ** ** ** ** ** ** Yap Prolog was developed at University of Porto, Portugal ** ** ** ************************************************************************/ /************************************************************************ ** General Configuration Parameters ** ************************************************************************/ /****************************************************************************************** ** use shared pages memory alloc scheme for OPTYap data structures? (optional) ** ******************************************************************************************/ /* #define USE_PAGES_MALLOC 1 */ /************************************************************************ ** TABLING Configuration Parameters ** ************************************************************************/ /**************************** ** default sizes ** ****************************/ #define MAX_TABLE_VARS 1000 /********************************************************** ** trail freeze scheme (mandatory, define one) ** **********************************************************/ #define BFZ_TRAIL_SCHEME 1 /* #define BBREG_TRAIL_SCHEME 1 */ /********************************************************* ** support mode directed tabling ? (optional) ** *********************************************************/ /* #define MODE_DIRECTED_TABLING 1 */ /**************************************************** ** support early completion ? (optional) ** ****************************************************/ #define TABLING_EARLY_COMPLETION 1 /****************************************************** ** support trie compact pairs ? (optional) ** ******************************************************/ #define TRIE_COMPACT_PAIRS 1 /************************************************************ ** support global trie for subterms ? (optional) ** ************************************************************/ /* #define GLOBAL_TRIE_FOR_SUBTERMS 1 */ /****************************************************** ** support incomplete tabling ? (optional) ** ******************************************************/ /* #define INCOMPLETE_TABLING 1 */ /****************************************************** ** limit the table space size ? (optional) ** ******************************************************/ /* #define LIMIT_TABLING 1 */ /********************************************************* ** support deterministic tabling ? (optional) ** *********************************************************/ /* #define DETERMINISTIC_TABLING 1 */ /************************************************* ** enable error checking ? (optional) ** *************************************************/ /* #define DEBUG_TABLING 1 */ /************************************************************************ ** YAPOR Configuration Parameters ** ************************************************************************/ /**************************** ** default sizes ** ****************************/ #define MAX_LENGTH_ANSWER 1000 #define MAX_BRANCH_DEPTH 1000 #define MAX_BEST_TIMES 21 /************************************************************ ** memory mapping scheme (mandatory, define one) ** ************************************************************/ #define MMAP_MEMORY_MAPPING_SCHEME 1 /* #define SHM_MEMORY_MAPPING_SCHEME 1 */ /************************************************* ** enable error checking ? (optional) ** *************************************************/ /* #define DEBUG_YAPOR 1 */ /************************************************************************ ** OPTYAP Configuration Parameters ** ************************************************************************/ /**************************** ** default sizes ** ****************************/ #define LOCK_AT_WRITE_LEVEL_BUCKETS 512 #define TG_ANSWER_SLOTS 20 /************************************************************************* ** tries locking scheme (mandatory, define one per trie type) ** ************************************************************************** ** The (TRIE_TYPE)_LOCK_AT_ENTRY_LEVEL scheme locks the access to the ** ** table space in the entry data structure. It restricts the number of ** ** lock operations needed to go through the table data structures. ** ** ** ** The (TRIE_TYPE)_LOCK_AT_NODE_LEVEL scheme locks each data structure ** ** before accessing it. It decreases concurrrency for workers accessing ** ** commom parts of the table space. ** ** ** ** The (TRIE_TYPE)_LOCK_AT_WRITE_LEVEL scheme is an hibrid scheme, it ** ** only locks a table data structure when it is going to update it. You ** ** can use (TRIE_TYPE)_ALLOC_BEFORE_CHECK with this scheme to allocate ** ** a node before checking if it will be necessary. ** *************************************************************************/ /* #define SUBGOAL_TRIE_LOCK_AT_ENTRY_LEVEL 1 */ #define SUBGOAL_TRIE_LOCK_AT_NODE_LEVEL 1 /* #define SUBGOAL_TRIE_LOCK_AT_WRITE_LEVEL 1 */ /* #define SUBGOAL_TRIE_ALLOC_BEFORE_CHECK 1 */ /* #define ANSWER_TRIE_LOCK_AT_ENTRY_LEVEL 1 */ #define ANSWER_TRIE_LOCK_AT_NODE_LEVEL 1 /* #define ANSWER_TRIE_LOCK_AT_WRITE_LEVEL 1 */ /* #define ANSWER_TRIE_ALLOC_BEFORE_CHECK 1 */ #define GLOBAL_TRIE_LOCK_AT_NODE_LEVEL 1 /* #define GLOBAL_TRIE_LOCK_AT_WRITE_LEVEL 1 */ /* #define GLOBAL_TRIE_ALLOC_BEFORE_CHECK 1 */ /********************************************** ** support inner cuts ? (optional) ** **********************************************/ #define TABLING_INNER_CUTS 1 /********************************************************* ** use timestamps for suspension ? (optional) ** *********************************************************/ #define TIMESTAMP_CHECK 1 /************************************************************************ ** Parameter Checks ** ************************************************************************/ #ifndef USE_PAGES_MALLOC #undef LIMIT_TABLING #endif /* !USE_PAGES_MALLOC */ #ifdef YAPOR #ifdef i386 /* For i386 machines we use shared memory segments */ #undef MMAP_MEMORY_MAPPING_SCHEME #define SHM_MEMORY_MAPPING_SCHEME #endif /* i386 */ #if !defined(MMAP_MEMORY_MAPPING_SCHEME) && !defined(SHM_MEMORY_MAPPING_SCHEME) #error Define a memory mapping scheme #endif /* !MMAP_MEMORY_MAPPING_SCHEME && !SHM_MEMORY_MAPPING_SCHEME */ #if defined(MMAP_MEMORY_MAPPING_SCHEME) && defined(SHM_MEMORY_MAPPING_SCHEME) #error Do not define multiple memory mapping schemes #endif /* MMAP_MEMORY_MAPPING_SCHEME && SHM_MEMORY_MAPPING_SCHEME */ #undef LIMIT_TABLING #endif /* YAPOR */ #ifdef TABLING #if !defined(BFZ_TRAIL_SCHEME) && !defined(BBREG_TRAIL_SCHEME) #error Define a trail scheme #endif /* !BFZ_TRAIL_SCHEME && !BBREG_TRAIL_SCHEME */ #if defined(BFZ_TRAIL_SCHEME) && defined(BBREG_TRAIL_SCHEME) #error Do not define multiple trail schemes #endif /* BFZ_TRAIL_SCHEME && BBREG_TRAIL_SCHEME */ #endif /* TABLING */ #if defined(YAPOR) && defined(TABLING) /* SUBGOAL_TRIE_LOCK_LEVEL */ #if !defined(SUBGOAL_TRIE_LOCK_AT_ENTRY_LEVEL) && !defined(SUBGOAL_TRIE_LOCK_AT_NODE_LEVEL) && !defined(SUBGOAL_TRIE_LOCK_AT_WRITE_LEVEL) #error Define a subgoal trie lock scheme #endif #if defined(SUBGOAL_TRIE_LOCK_AT_ENTRY_LEVEL) && defined(SUBGOAL_TRIE_LOCK_AT_NODE_LEVEL) #error Do not define multiple subgoal trie lock schemes #endif #if defined(SUBGOAL_TRIE_LOCK_AT_ENTRY_LEVEL) && defined(SUBGOAL_TRIE_LOCK_AT_WRITE_LEVEL) #error Do not define multiple subgoal trie lock schemes #endif #if defined(SUBGOAL_TRIE_LOCK_AT_NODE_LEVEL) && defined(SUBGOAL_TRIE_LOCK_AT_WRITE_LEVEL) #error Do not define multiple subgoal trie lock schemes #endif #ifndef SUBGOAL_TRIE_LOCK_AT_WRITE_LEVEL #undef SUBGOAL_TRIE_ALLOC_BEFORE_CHECK #endif /* ANSWER_TRIE_LOCK_LEVEL */ #if !defined(ANSWER_TRIE_LOCK_AT_ENTRY_LEVEL) && !defined(ANSWER_TRIE_LOCK_AT_NODE_LEVEL) && !defined(ANSWER_TRIE_LOCK_AT_WRITE_LEVEL) #error Define a answer trie lock scheme #endif #if defined(ANSWER_TRIE_LOCK_AT_ENTRY_LEVEL) && defined(ANSWER_TRIE_LOCK_AT_NODE_LEVEL) #error Do not define multiple answer trie lock schemes #endif #if defined(ANSWER_TRIE_LOCK_AT_ENTRY_LEVEL) && defined(ANSWER_TRIE_LOCK_AT_WRITE_LEVEL) #error Do not define multiple answer trie lock schemes #endif #if defined(ANSWER_TRIE_LOCK_AT_NODE_LEVEL) && defined(ANSWER_TRIE_LOCK_AT_WRITE_LEVEL) #error Do not define multiple answer trie lock schemes #endif #ifndef ANSWER_TRIE_LOCK_AT_WRITE_LEVEL #undef ANSWER_TRIE_ALLOC_BEFORE_CHECK #endif /* GLOBAL_TRIE_LOCK_LEVEL */ #if !defined(GLOBAL_TRIE_LOCK_AT_NODE_LEVEL) && !defined(GLOBAL_TRIE_LOCK_AT_WRITE_LEVEL) #error Define a global trie lock scheme #endif #if defined(GLOBAL_TRIE_LOCK_AT_NODE_LEVEL) && defined(GLOBAL_TRIE_LOCK_AT_WRITE_LEVEL) #error Do not define multiple global trie lock schemes #endif #ifndef GLOBAL_TRIE_LOCK_AT_WRITE_LEVEL #undef GLOBAL_TRIE_ALLOC_BEFORE_CHECK #endif #else #undef SUBGOAL_TRIE_LOCK_AT_ENTRY_LEVEL #undef SUBGOAL_TRIE_LOCK_AT_NODE_LEVEL #undef SUBGOAL_TRIE_LOCK_AT_WRITE_LEVEL #undef SUBGOAL_TRIE_ALLOC_BEFORE_CHECK #undef ANSWER_TRIE_LOCK_AT_ENTRY_LEVEL #undef ANSWER_TRIE_LOCK_AT_NODE_LEVEL #undef ANSWER_TRIE_LOCK_AT_WRITE_LEVEL #undef ANSWER_TRIE_ALLOC_BEFORE_CHECK #undef GLOBAL_TRIE_LOCK_AT_NODE_LEVEL #undef GLOBAL_TRIE_LOCK_AT_WRITE_LEVEL #undef GLOBAL_TRIE_ALLOC_BEFORE_CHECK #endif /* YAPOR && TABLING */ #if !defined(TABLING) || !defined(YAPOR) #undef TABLING_INNER_CUTS #undef TIMESTAMP_CHECK #endif /* !TABLING || !YAPOR */ #ifndef YAPOR #undef DEBUG_YAPOR #endif /* !YAPOR */ #ifndef TABLING #undef BFZ_TRAIL_SCHEME #undef BBREG_TRAIL_SCHEME #undef TABLING_EARLY_COMPLETION #undef TRIE_COMPACT_PAIRS #undef GLOBAL_TRIE_FOR_SUBTERMS #undef DETERMINISTIC_TABLING #undef LIMIT_TABLING #undef INCOMPLETE_TABLING #undef DEBUG_TABLING #endif /* !TABLING */ #if defined(DEBUG_YAPOR) && defined(DEBUG_TABLING) #define DEBUG_OPTYAP #endif /* DEBUG_YAPOR && DEBUG_TABLING */