lam support.

This commit is contained in:
Vítor Santos Costa 2012-02-02 09:58:05 +00:00
parent dddf5bce80
commit 4e6cc28cd3
9 changed files with 14417 additions and 4140 deletions

View File

@ -554,8 +554,8 @@ X_API int STD_PROTO(YAP_NewOpaqueType,(void *));
X_API Term STD_PROTO(YAP_NewOpaqueObject,(int, size_t)); X_API Term STD_PROTO(YAP_NewOpaqueObject,(int, size_t));
X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term)); X_API void *STD_PROTO(YAP_OpaqueObjectFromTerm,(Term));
X_API int STD_PROTO(YAP_Argv,(char *** argvp)); X_API int STD_PROTO(YAP_Argv,(char *** argvp));
X_API YAP_tag_t STD_PROTO(YAP_TagOfTerm,(Term)); X_API YAP_tag_t STD_PROTO(YAP_TagOfTerm,(Term));
X_API int STD_PROTO(YAP_ExportTerm,(Term, char *, size_t)); X_API size_t STD_PROTO(YAP_ExportTerm,(Term, char *, size_t));
X_API Term STD_PROTO(YAP_ImportTerm,(char *)); X_API Term STD_PROTO(YAP_ImportTerm,(char *));
static int static int
@ -3006,9 +3006,6 @@ YAP_Init(YAP_init_args *yap_init)
{ BACKUP_MACHINE_REGS(); { BACKUP_MACHINE_REGS();
Yap_InitYaamRegs(); Yap_InitYaamRegs();
#if HAVE_MPI
Yap_InitMPI ();
#endif
#if HAVE_MPE #if HAVE_MPE
Yap_InitMPE (); Yap_InitMPE ();
#endif #endif
@ -3989,8 +3986,10 @@ YAP_IsNumberedVariable(Term t) {
IsIntegerTerm(ArgOfTerm(1,t)); IsIntegerTerm(ArgOfTerm(1,t));
} }
X_API int X_API size_t
YAP_ExportTerm(Term inp, char * buf, size_t len) { YAP_ExportTerm(Term inp, char * buf, size_t len) {
if (!len)
return 0;
return Yap_ExportTerm(inp, buf, len); return Yap_ExportTerm(inp, buf, len);
} }

View File

@ -1239,15 +1239,14 @@ export_term_to_buffer(Term inpt, char *buf, char *bptr, CELL *t0 , CELL *tf, siz
} }
static int static size_t
export_complex_term(Term tf, CELL *pt0, CELL *pt0_end, char * buf, size_t len0, int newattvs, CELL *ptf, CELL *HLow USES_REGS) export_complex_term(Term tf, CELL *pt0, CELL *pt0_end, char * buf, size_t len0, int newattvs, CELL *ptf, CELL *HLow USES_REGS)
{ {
struct cp_frame *to_visit0, *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace(); struct cp_frame *to_visit0, *to_visit = (struct cp_frame *)Yap_PreAllocCodeSpace();
CELL *HB0 = HB; CELL *HB0 = HB;
tr_fr_ptr TR0 = TR; tr_fr_ptr TR0 = TR;
int ground = TRUE; int ground = TRUE;
char *bptr = buf+ 3*sizeof(CELL); char *bptr = buf+ 3*sizeof(CELL), *bptr_end;
size_t len = len0; size_t len = len0;
HB = HLow; HB = HLow;
@ -1505,11 +1504,11 @@ trail_overflow:
return -3; return -3;
} }
static int static size_t
ExportTerm(Term inp, char * buf, size_t len, UInt arity, int newattvs USES_REGS) { ExportTerm(Term inp, char * buf, size_t len, UInt arity, int newattvs USES_REGS) {
Term t = Deref(inp); Term t = Deref(inp);
tr_fr_ptr TR0 = TR; tr_fr_ptr TR0 = TR;
int res; size_t res;
CELL *Hi; CELL *Hi;
restart: restart:
@ -1523,7 +1522,7 @@ ExportTerm(Term inp, char * buf, size_t len, UInt arity, int newattvs USES_REGS)
return res; return res;
} }
int size_t
Yap_ExportTerm(Term inp, char * buf, size_t len) { Yap_ExportTerm(Term inp, char * buf, size_t len) {
CACHE_REGS CACHE_REGS
return ExportTerm(inp, buf, len, 0, TRUE PASS_REGS); return ExportTerm(inp, buf, len, 0, TRUE PASS_REGS);
@ -1571,17 +1570,20 @@ static CELL *
import_arg(CELL *hp, char *abase, CELL *amax) import_arg(CELL *hp, char *abase, CELL *amax)
{ {
Term t = *hp; Term t = *hp;
fprintf(stderr,"t = %lx\n", t);
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
hp[0] = (CELL)ShiftPtr(t, abase); hp[0] = (CELL)ShiftPtr(t, abase);
} else if (IsAtomTerm(t)) { } else if (IsAtomTerm(t)) {
hp[0] = MkAtomTerm(AddAtom(AtomOfTerm(t))); hp[0] = MkAtomTerm(AddAtom(AtomOfTerm(t)));
} else if (IsPairTerm(t)) { } else if (IsPairTerm(t)) {
fprintf(stderr,"amax = %p newp=%p\n", amax, RepPair(t));
CELL *newp = ShiftPtr((CELL)RepPair(t), abase); CELL *newp = ShiftPtr((CELL)RepPair(t), abase);
hp[0] = AbsPair(newp); hp[0] = AbsPair(newp);
if (newp > amax) { if (newp > amax) {
amax = import_pair(newp, abase, newp); amax = import_pair(newp, abase, newp);
} }
} else { } else if (IsApplTerm(t)) {
fprintf(stderr,"amax = %p newp=%p\n", amax, RepAppl(t));
CELL *newp = ShiftPtr((CELL)RepAppl(t), abase); CELL *newp = ShiftPtr((CELL)RepAppl(t), abase);
hp[0] = AbsAppl(newp); hp[0] = AbsAppl(newp);
if (newp > amax) { if (newp > amax) {
@ -3472,7 +3474,6 @@ hash_complex_term(register CELL *pt0,
deref_body(d0, ptd0, hash_complex_unk, hash_complex_nvar); deref_body(d0, ptd0, hash_complex_unk, hash_complex_nvar);
fprintf(stderr,"found variable\n");
if (!variant) if (!variant)
return NULL; return NULL;
else else

View File

@ -389,7 +389,7 @@ void STD_PROTO(Yap_InitUserBacks,(void));
/* utilpreds.c */ /* utilpreds.c */
Term STD_PROTO(Yap_CopyTerm,(Term)); Term STD_PROTO(Yap_CopyTerm,(Term));
int STD_PROTO(Yap_Variant,(Term, Term)); int STD_PROTO(Yap_Variant,(Term, Term));
int STD_PROTO(Yap_ExportTerm,(Term, char *, size_t)); size_t STD_PROTO(Yap_ExportTerm,(Term, char *, size_t));
Term STD_PROTO(Yap_ImportTerm,(char *)); Term STD_PROTO(Yap_ImportTerm,(char *));
int STD_PROTO(Yap_IsListTerm,(Term)); int STD_PROTO(Yap_IsListTerm,(Term));
Term STD_PROTO(Yap_CopyTermNoShare,(Term)); Term STD_PROTO(Yap_CopyTermNoShare,(Term));

18395
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -389,7 +389,7 @@ AC_ARG_WITH(lam,
yap_cv_lam=no yap_cv_lam=no
else else
yap_cv_lam=$with_lam yap_cv_lam=$with_lam
LDFLAGS="$LDFLAGS -L${yap_cv_lam}/lib/lam" LDFLAGS="$LDFLAGS -L${yap_cv_lam}/lib"
CPPFLAGS="$CPPFLAGS -I${yap_cv_lam}/include" CPPFLAGS="$CPPFLAGS -I${yap_cv_lam}/include"
fi, fi,
[yap_cv_lam=yes]) [yap_cv_lam=yes])
@ -1457,73 +1457,76 @@ if test "$tabling" = "yes"
fi fi
dnl LAM/MPI interface dnl LAM/MPI interface
MPI_OBJS=
LAM_MPI_CC=${MPI_CC} LAM_MPI_CC=${MPI_CC}
if test "$yap_cv_lam" = "yes" ; then if test "$yap_cv_lam" != "no" ; then
if test -e /usr/lib/openmpi; then if test "$yap_cv_lam" = "yes" ; then
if test -e /usr/lib/openmpi; then
CPPFLAGS="$CPPFLAGS -I/usr/lib/openmpi/include" CPPFLAGS="$CPPFLAGS -I/usr/lib/openmpi/include"
LDFLAGS="$LDFLAGS -L/usr/lib/openmpi/lib" LDFLAGS="$LDFLAGS -L/usr/lib/openmpi/lib"
fi fi
fi else
if test "$yap_cv_lam" != "no" ; then LAM_MPI_CC="$yap_cv_lam"/bin/mpicc
MPI_CC="$yap_cv_lam"/bin/mpicc
CPPFLAGS="$CPPFLAGS -I ${yap_cv_lam}/include"
LDFLAGS="$LDFLAGS -L${yap_cv_lam}/lib"
fi
OLD_CC=${CC} OLD_CC=${CC}
CC=${LAM_MPI_CC} CC=${LAM_MPI_CC}
AC_CHECK_HEADER(mpi.h, LAMOBJS=yap_mpi."$SO", LAMOBJS="") AC_CHECK_HEADERS(mpi.h)
AC_CHECK_HEADER(mpi.h)
CC=${OLD_CC}
fi
MPI_OBJS=
if test "$yap_cv_mpi" != "no"
then
OLD_CC=${CC}
CC=${MPI_CC}
AC_CHECK_LIB(mpi,MPI_Init, AC_CHECK_LIB(mpi,MPI_Init,
[LAMOBJS=yap_mpi."$SO"
AC_DEFINE(HAVE_LIBMPI, 1)],
[LAMOBJS=""
AC_DEFINE(HAVE_LIBMPI, 0)])
CC=${OLD_CC}
dnl use mpich library
elif test "$yap_cv_mpi" != "no"; then
OLD_CC=${CC}
CC=${MPI_CC}
AC_CHECK_LIB(mpi,MPI_Init,
[AC_DEFINE(HAVE_LIBMPI, 1)], [AC_DEFINE(HAVE_LIBMPI, 1)],
[AC_DEFINE(HAVE_LIBMPI, 0)]) [AC_DEFINE(HAVE_LIBMPI, 0)])
if test "$ac_cv_lib_mpi_MPI_Init" = yes if test "$ac_cv_lib_mpi_MPI_Init" = yes
then
#YAPMPILIB=YapMPI.a
MPI_OBJS=mpi.o
else
AC_CHECK_LIB(mpich,MPI_Init,
[AC_DEFINE(HAVE_LIBMPICH, 1)],
[AC_DEFINE(HAVE_LIBMPICH, 0)])
if test "$ac_cv_lib_mpich_MPI_Init" = yes
then then
#YAPMPILIB=YapMPI.a #YAPMPILIB=YapMPI.a
MPI_OBJS=mpi.o MPI_OBJS=mpi.o
else else
AC_CHECK_LIB(mpich,MPI_Init,
[AC_DEFINE(HAVE_LIBMPICH, 1)],
[AC_DEFINE(HAVE_LIBMPICH, 0)])
if test "$ac_cv_lib_mpich_MPI_Init" = yes
then
#YAPMPILIB=YapMPI.a
MPI_OBJS=mpi.o
else
#YAPMPILIB= #YAPMPILIB=
MPI_CC=${CC} MPI_CC=${CC}
fi
fi fi
fi AC_CHECK_HEADERS(mpi.h)
AC_CHECK_HEADERS(mpi.h) CC=${OLD_CC}
CC=${OLD_CC} MPI_LIBS=
else if test "$yap_cv_mpe" != "no"
# MPI_CC=${MPI_CC} then
MPI_CC=${CC} OLD_CC=${CC}
fi CC=${MPI_CC}
AC_CHECK_LIB(mpe,MPE_Init_log,
MPI_LIBS=
if test "$yap_cv_mpi" != "no" -a "$yap_cv_mpe" != "no"
then
OLD_CC=${CC}
CC=${MPI_CC}
AC_CHECK_LIB(mpe,MPE_Init_log,
[AC_DEFINE(HAVE_LIBMPE, 1)], [AC_DEFINE(HAVE_LIBMPE, 1)],
[AC_DEFINE(HAVE_LIBMPE, 0)]) [AC_DEFINE(HAVE_LIBMPE, 0)])
if test "$ac_cv_lib_mpe_MPE_Init_log" = yes if test "$ac_cv_lib_mpe_MPE_Init_log" = yes
then then
MPI_LIBS="-lmpe" MPI_LIBS="-lmpe"
MPI_OBJS="$MPI_OBJS mpe.o" MPI_OBJS="$MPI_OBJS mpe.o"
fi fi
AC_CHECK_HEADERS(mpe.h) AC_CHECK_HEADERS(mpe.h)
CC=${OLD_CC} CC=${OLD_CC}
fi
else
MPI_CC=${CC}
fi fi
if test ! "$yap_cv_cplint" = "no" if test ! "$yap_cv_cplint" = "no"
then then
if test ! "$yap_cv_cplint" = "yes" if test ! "$yap_cv_cplint" = "yes"

View File

@ -589,7 +589,7 @@ extern X_API int *PROTO(YAP_Argv,(char ***));
extern X_API YAP_tag_t PROTO(YAP_TagOfTerm,(YAP_Term)); extern X_API YAP_tag_t PROTO(YAP_TagOfTerm,(YAP_Term));
extern X_API int PROTO(YAP_ExportTerm,(YAP_Term, char *, size_t)); extern X_API size_t PROTO(YAP_ExportTerm,(YAP_Term, char *, size_t));
extern X_API YAP_Term PROTO(YAP_ImportTerm,(char *)); extern X_API YAP_Term PROTO(YAP_ImportTerm,(char *));

View File

@ -23,7 +23,7 @@ YAPLIBDIR=@libdir@/Yap
# #
# #
CC=@CC@ CC=@CC@
MPI_CC=mpicc MPI_CC=@LAM_MPI_CC@
CFLAGS= @SHLIB_CFLAGS@ $(YAP_EXTRAS) $(DEFS) -I$(srcdir) -I../.. -I$(srcdir)/../../include CFLAGS= @SHLIB_CFLAGS@ $(YAP_EXTRAS) $(DEFS) -I$(srcdir) -I../.. -I$(srcdir)/../../include
# #
# #

View File

@ -187,23 +187,25 @@ read_term_from_stream(const int fd) {
* copied to ptr if it occupies less than size. * copied to ptr if it occupies less than size.
*/ */
char* char*
term2string(char *const ptr,size_t *size, const YAP_Term t) { term2string(char *const ptr, size_t *size, const YAP_Term t) {
char *ret; char *ret;
size_t needed_bytes = 0;
RESET_BUFFER; RESET_BUFFER;
do {
BUFFER_LEN = YAP_ExportTerm( t, ptr, *size );// canonical if (*size <= needed_bytes) {
if (needed_bytes >= BUFFER_SIZE) {
if (BUFFER_LEN<=*size) { // user allocated buffer size is ok expand_buffer(BLOCK_SIZE);
memcpy(ptr,BUFFER_PTR,BUFFER_LEN); // copy data to user block }
ret=ptr; BUFFER_LEN = YAP_ExportTerm( t, BUFFER_PTR, BUFFER_SIZE );// canonical
*size=BUFFER_LEN; ret=BUFFER_PTR;
} else { // user buffer is too small } else {
ret=BUFFER_PTR; BUFFER_LEN = YAP_ExportTerm( t, ptr, BUFFER_SIZE );// canonical
*size=BUFFER_LEN; ret=ptr;
//DEL_BUFFER; }
} } while (BUFFER_LEN <= 0);
*size = BUFFER_LEN;
fprintf(stderr,"<< ptr=%p size=%ld\n", ret, BUFFER_LEN);
return ret; return ret;
} }
/* /*
@ -228,6 +230,7 @@ string2term(char *const ptr,const size_t *size) {
} }
BUFFER_POS=0; BUFFER_POS=0;
t = YAP_ImportTerm( BUFFER_PTR ); t = YAP_ImportTerm( BUFFER_PTR );
fprintf(stderr,">> ptr=%p size=%ld\n", ptr, *size);
if ( t==FALSE ) { if ( t==FALSE ) {
write_msg(__FUNCTION__,__FILE__,__LINE__,"FAILED string2term>>>>size:%d %d %s\n",BUFFER_SIZE,strlen(BUFFER_PTR),NULL); write_msg(__FUNCTION__,__FILE__,__LINE__,"FAILED string2term>>>>size:%d %d %s\n",BUFFER_SIZE,strlen(BUFFER_PTR),NULL);
exit(1); exit(1);

@ -1 +1 @@
Subproject commit 2ed717695e1d71e864f943516473cacd3021f1f0 Subproject commit 06baa8a9663d092266b174cb9a4628dbc937d253