If you're trying to make THREAD_MULTIPLE support better, I think that would be 
great.  If your simple test seems to fail over TCP with THREAD_MULTIPLE, then I 
think it's pretty clear that it's broken / needs debugging.

Specifically: if we could have higher confidence in at least a few BTLs' 
support of THREAD_MULTIPLE, that would be great.


On Mar 10, 2011, at 11:23 AM, Eugene Loh wrote:

> Any comments on this?  We wanted to clean up MPI_THREAD_MULTIPLE support in 
> the trunk and port these changes back to 1.5.x, but it's unclear to me what 
> our expectations should be about any MPI_THREAD_MULTIPLE test succeeding.  
> How do we assess (test) our changes?  Or, should we just hardwire thread 
> support to be off, as we have done with progress threads?
> 
> -------- Original Message --------
> Subject:      [OMPI devel] multi-threaded test
> Date: Tue, 08 Mar 2011 11:24:20 -0800
> From: Eugene Loh <eugene....@oracle.com>
> To:   Open MPI Developers <de...@open-mpi.org>
> 
> I've been assigned CMR 2728, which is to apply some thread-support 
> changes to 1.5.x.  The trac ticket has amusing language about "needs 
> testing".  I'm not sure what that means.  We rather consistently say 
> that we don't promise anything with regards to true thread support.  We 
> specifically say certain BTLs are off limits and we say things are 
> poorly tested and can be expected to break.  Given all that, what does 
> it mean to test thread support in OMPI?
> 
> One option, specifically in the context of this CMR, is to test only 
> configuration options and so on.  I've done this.
> 
> Another possibility is to confirm that simple run-time tests of 
> multi-threaded message passing succeed.  I'm having trouble with this.
> 
> Attached is a simple test.  It passes over sm but fails over TCP.  (One 
> or both of the initial messages is not received.)
> 
> How high should I set my sights on this?
> 
> 
> #include <stdio.h>
> #include <omp.h>
> #include <mpi.h>
> #include <string.h>  /* memset */
> 
> 
> #define N 10000
> int main(int argc, char **argv) {
>  int np, me, buf[2][N], provided;
> 
>  /* init some stuff */
>  MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided);
>  MPI_Comm_size(MPI_COMM_WORLD,&np);
>  MPI_Comm_rank(MPI_COMM_WORLD,&me);
>  if ( provided < MPI_THREAD_MULTIPLE ) MPI_Abort(MPI_COMM_WORLD,-1);
> 
>  /* initialize the buffers */
>  memset(buf[0], 0, N * sizeof(int));
>  memset(buf[1], 0, N * sizeof(int));
> 
>  /* test */
>  #pragma omp parallel num_threads(2)
>  {
>    int id = omp_get_thread_num();
>    MPI_Status st;
>    printf("%d %d in parallel region\n", me, id); fflush(stdout);
> 
>    /* pingpong */
>    if ( me == 0 ) {
>      MPI_Send(buf[id],N,MPI_INT,1,7+id,MPI_COMM_WORLD    ); printf("%d %d 
> sent\n",me,id); fflush(stdout);
>      MPI_Recv(buf[id],N,MPI_INT,1,7+id,MPI_COMM_WORLD,&st); printf("%d %d 
> recd\n",me,id); fflush(stdout);
>    } else {
>      MPI_Recv(buf[id],N,MPI_INT,0,7+id,MPI_COMM_WORLD,&st); printf("%d %d 
> recd\n",me,id); fflush(stdout);
>      MPI_Send(buf[id],N,MPI_INT,0,7+id,MPI_COMM_WORLD    ); printf("%d %d 
> sent\n",me,id); fflush(stdout);
>    }
>  }
> 
>  MPI_Finalize();
> 
>  return 0;
> }
> 
> 
> #!/bin/csh
> 
> mpicc -xopenmp -m64 -O5 main.c
> 
> mpirun -np 2 --mca btl self,sm  ./a.out
> mpirun -np 2 --mca btl self,tcp ./a.out
> 
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel


-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to