allow the user to configure a maximum number of threads.

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1792 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2007-01-29 10:18:15 +00:00
parent 2ffa06931e
commit 7239e45ec3
6 changed files with 80 additions and 14 deletions

View File

@ -568,6 +568,12 @@ p_nof_threads(void)
return Yap_unify(ARG1,MkIntegerTerm(i));
}
static Int
p_max_threads(void)
{ /* '$max_threads'(+P) */
return Yap_unify(ARG1,MkIntegerTerm(MAX_WORKERS));
}
static Int
p_nof_threads_created(void)
{ /* '$nof_threads'(+P) */
@ -583,6 +589,7 @@ p_thread_runtime(void)
void Yap_InitThreadPreds(void)
{
Yap_InitCPred("$no_threads", 0, p_no_threads, HiddenPredFlag);
Yap_InitCPred("$max_threads", 1, p_max_threads, HiddenPredFlag);
Yap_InitCPred("$thread_new_tid", 1, p_thread_new_tid, HiddenPredFlag);
Yap_InitCPred("$create_thread", 6, p_create_thread, HiddenPredFlag);
Yap_InitCPred("$thread_self", 1, p_thread_self, SafePredFlag|HiddenPredFlag);
@ -625,6 +632,12 @@ p_nof_threads(void)
return Yap_unify(ARG1,MkIntTerm(1));
}
static Int
p_max_threads(void)
{ /* '$nof_threads'(+P) */
return Yap_unify(ARG1,MkIntTerm(1));
}
static Int
p_nof_threads_created(void)
{ /* '$nof_threads'(+P) */
@ -640,6 +653,7 @@ p_thread_runtime(void)
void Yap_InitThreadPreds(void)
{
Yap_InitCPred("$no_threads", 0, p_no_threads, SafePredFlag|HiddenPredFlag);
Yap_InitCPred("$max_threads", 1, p_max_threads, SafePredFlag|HiddenPredFlag);
Yap_InitCPred("$nof_threads", 1, p_nof_threads, SafePredFlag|HiddenPredFlag);
Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag|HiddenPredFlag);
Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag|HiddenPredFlag);

View File

@ -10,7 +10,7 @@
* File: Yap.h.m4 *
* mods: *
* comments: main header file for YAP *
* version: $Id: Yap.h,v 1.18 2006-12-13 16:10:25 vsc Exp $ *
* version: $Id: Yap.h,v 1.19 2007-01-29 10:18:15 vsc Exp $ *
*************************************************************************/
#include "config.h"
@ -141,12 +141,6 @@
#include <pthread.h>
#endif
#if defined(YAPOR) || defined(THREADS)
#define MAX_WORKERS (sizeof(unsigned long) * 8)
#else
#define MAX_WORKERS 1
#endif /* YAPOR */
#if SIZEOF_INT_P==4
#if SIZEOF_INT==4

View File

@ -16,6 +16,7 @@
<h2>Yap-5.1.2:</h2>
<ul>
<li> NEW: --with-max-workers tells us how many threads we can have (request from Paulo Moura).</li>
<li> FIXED: wchar_t in the WIN32 is unsigned and 16 bits.</li>
<li> FIXED: stack overflow when growing the delay stack.</li>
<li> FIXED: overflows with MIN_INT (obs from Marius Filip).</li>

View File

@ -297,3 +297,5 @@
#undef GC_NO_TAGS
#undef MAX_WORKERS

42
configure vendored
View File

@ -698,6 +698,7 @@ INSTALLCLP
JAVALIBPATH
JAVAINCPATH
LAMOBJS
MAX_WORKERS
M4GENABSMI
LIBOBJS
LTLIBOBJS'
@ -1319,6 +1320,7 @@ Optional Packages:
--with-heap-space=space default heap size in Kbytes
--with-stack-space=space default stack size in Kbytes
--with-trail-space=space default trail size in Kbytes
--with-max-workers=integer maximum number of threads or parallel processes
Some influential environment variables:
CC C compiler command
@ -3093,6 +3095,22 @@ else
fi
# Check whether --with-max-workers was given.
if test "${with_max_workers+set}" = set; then
withval=$with_max_workers; if test "$withval" = yes; then
yap_cv_max_workers="(8*SIZEOF_INT_P)"
elif test "$withval" = no; then
yap_cv_max_workers="1"
else
yap_cv_max_workers=$withval
fi
else
yap_cv_max_workers="(8*SIZEOF_INT_P)"
fi
if test "$tabling" = yes -o "$orparallelism" = yes -o "$threads" = yes
then
cat >>confdefs.h <<\_ACEOF
@ -3108,15 +3126,15 @@ _ACEOF
_ACEOF
else
cat >>confdefs.h <<\_ACEOF
cat >>confdefs.h <<\_ACEOF
#define MinHeapSpace (200*SIZEOF_INT_P)
_ACEOF
cat >>confdefs.h <<\_ACEOF
cat >>confdefs.h <<\_ACEOF
#define MinStackSpace (200*SIZEOF_INT_P)
_ACEOF
cat >>confdefs.h <<\_ACEOF
cat >>confdefs.h <<\_ACEOF
#define MinTrailSpace ( 32*SIZEOF_INT_P)
_ACEOF
@ -3298,6 +3316,20 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
if test "$or-parallelism" = no -a "$threads" = no
then
cat >>confdefs.h <<\_ACEOF
#define MAX_WORKERS 1
_ACEOF
else
eval "cat >>confdefs.h <<\_ACEOF
#define MAX_WORKERS ($yap_cv_max_workers)
_ACEOF
"
fi
if test "$use_condor" = yes
then
use_malloc="yes"
@ -14862,6 +14894,7 @@ EXEC_SUFFIX=""
{ echo "$as_me:$LINENO: checking for gcc threaded code" >&5
@ -18590,12 +18623,13 @@ for ac_last_try in false false false false false :; do
JAVALIBPATH!$JAVALIBPATH$ac_delim
JAVAINCPATH!$JAVAINCPATH$ac_delim
LAMOBJS!$LAMOBJS$ac_delim
MAX_WORKERS!$MAX_WORKERS$ac_delim
M4GENABSMI!$M4GENABSMI$ac_delim
LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 6; then
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 7; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5

View File

@ -223,15 +223,27 @@ AC_ARG_WITH(trail-space,
fi,
[yap_cv_trail_space=0])
AC_ARG_WITH(max-workers,
[ --with-max-workers[=integer] maximum number of threads or parallel processes],
if test "$withval" = yes; then
yap_cv_max_workers="(8*SIZEOF_INT_P)"
elif test "$withval" = no; then
yap_cv_max_workers="1"
else
yap_cv_max_workers=$withval
fi,
[yap_cv_max_workers="(8*SIZEOF_INT_P)"])
if test "$tabling" = yes -o "$orparallelism" = yes -o "$threads" = yes
then
AC_DEFINE(MinHeapSpace, (400*SIZEOF_INT_P))
AC_DEFINE(MinStackSpace,(300*SIZEOF_INT_P))
AC_DEFINE(MinTrailSpace,( 48*SIZEOF_INT_P))
else
AC_DEFINE(MinHeapSpace, (200*SIZEOF_INT_P))
AC_DEFINE(MinStackSpace,(200*SIZEOF_INT_P))
AC_DEFINE(MinTrailSpace,( 32*SIZEOF_INT_P))
AC_DEFINE(MinHeapSpace, (200*SIZEOF_INT_P))
AC_DEFINE(MinStackSpace,(200*SIZEOF_INT_P))
AC_DEFINE(MinTrailSpace,( 32*SIZEOF_INT_P))
fi
eval "AC_DEFINE(DefHeapSpace,($yap_cv_heap_space))"
@ -242,6 +254,14 @@ AC_CANONICAL_SYSTEM
AC_DEFINE_UNQUOTED(HOST_ALIAS,"${target}")
if test "$or-parallelism" = no -a "$threads" = no
then
AC_DEFINE(MAX_WORKERS,1)
else
eval "AC_DEFINE(MAX_WORKERS,$yap_cv_max_workers)"
fi
dnl condor does not like dynamic linking on Linux, DEC, and HP-UX platforms.
if test "$use_condor" = yes
then
@ -1013,6 +1033,7 @@ AC_SUBST(INSTALLCLP)
AC_SUBST(JAVALIBPATH)
AC_SUBST(JAVAINCPATH)
AC_SUBST(LAMOBJS)
AC_SUBST(MAX_WORKERS)
dnl check for threaded code