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

> Any comments on this?

Good luck?

  george.


>  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

George Bosilca
Research Assistant Professor
Innovative Computing Laboratory
Department of Electrical Engineering and Computer Science
University of Tennessee, Knoxville
http://web.eecs.utk.edu/~bosilca/


Reply via email to