LAM/MPI logo

LAM/MPI General User's Mailing List Archives

  |   Home   |   Download   |   Documentation   |   FAQ   |   all just in this list

From: Vinod Kannan (saranga2000_at_[hidden])
Date: 2004-11-08 04:57:31


Hi,
 Thanks for prompt replies for my prior posts to this
list.

 I am presently trying to create a threaded + MPI
application. I went through the previous postings
related to the subject. I have a few questions, could
someone please help answer them?

 1) I saw some "teasers" which lead me to believe that
LAM MPI might be thread safe in an immediate future
version. I haven't seen any further postings regarding
the same. Is there a thread safe LAM-MPI version?

 2) What would I need to be aware of with regards to
the portablity of a code ( using threads+ Lam/MPI) to
other Operating Systems?

 3) One of the postings had a sample code
("http://www.lam-mpi.org/MailArchives/lam/msg04037.php").
I tried running the code on my machine, requesting and
getting MPI_THREAD_SERIALIZE. It hangs ( the non MPI
thread comes out, the other one just hangs). Could
someone tell me what I need to do to make sure the
code executes correctly? SERIALIZE would take care of
the locking and unlocking for every MPI call - is that
correct? So it is not a deadlock issue, correct? Why
then does it hang? The configuration Im using is:

 OS:
Linux vkannan 2.4.21-4.EL #1 Fri Oct 3 18:13:58 EDT
2003 i686 i686 i386 GNU/Linux

GCC/THREADS:
[vkannan_at_vkannan lam-7.0.6]$ rpm -qa | egrep
'gcc|glib'
glibc-headers-2.3.2-95.3
gcc-ssa-3.5ssa-0.20030801.41
compat-gcc-c++-7.3-2.96.122
glibc-common-2.3.2-95.3
glib-1.2.10-11.1
glibc-profile-2.3.2-95.3
glibc-kernheaders-2.4-8.34
glibc-devel-2.3.2-95.3
gcc-c++-3.2.3-20
gcc-c++-ssa-3.5ssa-0.20030801.41
compat-glibc-7.x-2.2.4.32.5
compat-gcc-7.3-2.96.122
libgcc-3.2.3-20
glibc-2.3.2-95.3
glib2-2.2.3-2.0
libgcc-ssa-3.5ssa-0.20030801.41
glibc-utils-2.3.2-95.3
gcc-3.2.3-20

 LAM:
  LAM/MPI: 7.0.6
            Prefix: /home/vkannan/lam-7.0.6/
      Architecture: i686-pc-linux-gnu
     Configured by: vkannan
     Configured on: Tue Nov 2 09:23:23 CST 2004
    Configure host: fpdev
        C bindings: yes
      C++ bindings: yes
  Fortran bindings: yes
       C profiling: yes
     C++ profiling: yes
 Fortran profiling: yes
     ROMIO support: yes
      IMPI support: no
     Debug support: no
      Purify clean: no
          SSI boot: globus (Module v0.5)
          SSI boot: rsh (Module v1.0)
          SSI coll: lam_basic (Module v7.0)
          SSI coll: smp (Module v1.0)
           SSI rpi: crtcp (Module v1.0.1)
           SSI rpi: lamd (Module v7.0)
           SSI rpi: sysv (Module v7.0)
           SSI rpi: tcp (Module v7.0)
           SSI rpi: usysv (Module v7.0)

 4) Is reinstalling LinuxThreads with SIGUSR1 &
SIGUSR2 turned off mandatory? (The posts regarding the
same were mainly from the year 1998)

 5) I am using LAM 7.0.6. Do I still need to go in and
add the thread flags for compilation ( -D_REENTRANT
and -lpthreads )? It seems the flags for threads are
included by default in version 7.0.6. Also if I need
to reinstall linuxthreads with SIGUSR1&2 turned off,
then do I need to point to the different library
(-pthread vx -lpthread?

 6) I am wondering if the following design can be
implemented with the present version of LAM without
any ( little) impact of performance. What issues would
I have to be careful of in terms of performance?

 Why I need threads is I am creating is a framework
for application-level fault tolerance/ dynamic
addition( & removal) of nodes at the application
level. LAMs fault tolerant capabilities are
considerable ( especially with regards to node
failure) but I need additional functionality.

 Right now I have 2 MPI execs B, C launched via a
appschema file. To add ( robust) fault tolerance and
other capabilities I plan to redesign by adding a
daemon app A as follows.

 I will have 3 execs A,B,C. B & C's existing logic
will be forked off as their business-logic thread(
only MPI calls used in this thread will be Non
blocking sends and receives + test + wait) and a
control thread( for all dynamic MPI calls, fault
tolerance via regular messaging, communication of
new-node addition( /new instance creation on the added
node) via lamgrow etc). I want to launch B & C from
A's control thread using MPISpawn. The control threads
in B & C will MPIConnect to a name published by A's
control thread. B's control thread will publish and
accept a connect from C's control thread. B & C will
communicate with each other on the Businesslogic
thread, and communicate with A on the control thread.

 I plan to use MPI_THREAD_SERIALIZE. Can the above
design be accomplished with little or no performance
degradation? Could there be issues with scaling the
above design? What issues will I have to be aware of
considering Im using MPI_THREAD_SERIALIZE? Could
someone with knowledge/experience with using threads
with MPI point me in the right direction?

Thank you
New Lam User

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com