Xref: utzoo comp.sys.isis:224 comp.sys.encore:504 Path: utzoo!attcan!uunet!samsung!aplcen!unmvax!pprg.unm.edu!topgun.agps.lanl.gov!kurt From: kurt@AGPS.LANL.GOV (Kurt Zeilenga) Newsgroups: comp.sys.isis,comp.sys.encore Subject: ISIS v1.3.1 on Encore Multimax Message-ID: <5255@topgun.agps.lanl.gov> Date: 12 Feb 90 17:32:24 GMT Reply-To: kurt@AGPS.LANL.GOV (Kurt Zeilenga) Distribution: na Organization: Los Alamos National Laboratory Lines: 121 Below are the changes needed to make ISIS v1.3.1 work on the MULTIMAX running either MACH or UMAX 4.2. I run the MACH version on our beasts most of the time, so haven't been able to really test the UMAX 4.2 version.... (so, it might have problems). -- Kurt PS: for those comp.sys.encore readers, ISIS is a distributed programming environment. MACH: 1) fix /usr/include/setjmp.h so it only defines jmp_buf once 2) use MACH subdirectory, but change makefile to look like: MCHDEP = MCHTYPE=MACH MCHDEPCFLAGS="-I/usr/mach/include -w" \ OPLIBS="-L/usr/mach/lib -lthreads -lmach" OPTIM=-O PARALLEL=10 PARALLEL=1 3) make change 2) below UMAX 4.2: 1) start with a copy of SUN3 directory, modify makefile MCHDEP = MCHTYPE=UMAX MCHDEPCFLAGS="-w" OPLIBS="-lept" \ OPTIM=-O PARALLEL=10 PARALLEL = 1 2) modify isis.h (add to builtin defines) #if (SUN || SUN3 || SUN4 || APOLLO || VAX || MACH || HPUX || GOULD || UMAX) #else ... # ifdef MULTIMAX # ifdef CMU # define MACH # else # define UMAX # endif # endif ... #endif ... #ifdef UMAX #define EPT 1 #define UNIX_DOM 1 #endif ... 3) add EPT defines to cl_task.h /*** Encore Parallel Threads (ept) implementation ***/ #ifdef EPT #define THREADS 1 #include #define EPT_NPROCS 4 #define MUTEX_T SEMAPHORE #define MUTEX_ALLOC(m) m = TREADseminit(1) #define MUTEX_LOCK(m) TREADpsem(m) #define MUTEX_UNLOCK(m) TREADvsem(m) #define THREAD_YIELD(m) { MUTEX_UNLOCK(m); THREADreschedule() ; MUTEX_LOCK(m); } #define THREAD_T THREAD #define THREAD_SELF(t) t = THREADcurrent #define THREAD_FORK(f,a,s) THREAD_create(f,a,0,DETACHED) #define THREAD_COND_T SEMAPHORE #define THREAD_ALLOC(tp) { MUTEX_ALLOC((tp)->task_runme); \ MUTEX_LOCK((tp)->task_runme); } #define THREAD_WAIT(tp) { MUTEX_UNLOCK(isis_mutex); \ MUTEX_LOCK((tp)->task_runme); \ MUTEX_LOCK(isis_mutex); } #define THREAD_SIGNAL(tp) MUTEX_UNLOCK((tp)->task_runme) #define THREAD_FREE(tp) THREADfree(tp) #endif EPT 4) add EPT defines to pr_task.h /*** Encore Parallel Threads (ept) implementation ***/ #ifdef EPT #define THREADS 1 #include #define MUTEX_T SEMAPHORE #define MUTEX_ALLOC(m) m = THREADseminit(1) #define MUTEX_LOCK(m) THREADpsem(m) #define MUTEX_UNLOCK(m) THREADvsem(m) #define CONDITION_T SEMAPHORE #define CONDITION_ALLOC(c) c = THREADseminit(1) #define CONDITION_FREE(c) MUTEX_UNLOCK(c) #define CONDITION_WAIT(c) { MUTEX_UNLOCK(isis_mutex); \ MUTEX_LOCK(c); \ MUTEX_LOCK(isis_mutex) } #define CONDITION_SIGNAL(c) MUTEX_UNLOCK(c); #define THREAD_T THREAD #define THREAD_SELF(t) t = THREADcurrent #define THREAD_FORK(f,a,s) THREAD_create(f,a,0,DETACHED) #endif EPT 5) modify cl_task.c, line 126 #ifndef EPT --isis_main_task.task_threadid; #else isis_main_task.task_threadid = (THREAD) -1; #endif