[mpich-discuss] Multithread server using MPICH-2

Gisele Machado de Souza giselemachad at gmail.com
Fri Sep 19 16:17:20 CDT 2008


People, thank you all!!!
I find a solution. I used mpich2-1.0.7 and compiled with this options:

> ./configure  --enable-romio --without-mpe --with-pm=mpd
--with-device=ch3:sock --enable-threads=multiple
--with-thread-package=posix

and I included this instructions from phtreads:

> pthread_attr_init(&attr);
   pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
   rc = pthread_create(&threads[t], &attr, threadfunc, (void *) listParam);

It works!!!

I hope not have more problems and I hope that the library is really stable
for this type of situation.

If I have any other problem I turn to send messages.
Thank you for helping!!!!






2008/9/19 Rajeev Thakur <thakur at mcs.anl.gov>

>  Can you send us a small test case to reproduce the problem?
>
> Rajeev
>
>  ------------------------------
> *From:* owner-mpich-discuss at mcs.anl.gov [mailto:
> owner-mpich-discuss at mcs.anl.gov] *On Behalf Of *Gisele Machado de Souza
> *Sent:* Thursday, September 18, 2008 11:04 PM
> *To:* mpich-discuss at mcs.anl.gov
> *Subject:* [mpich-discuss] Multithread server using MPICH-2
>
>  Hello,
>
> I'm implementing a server in MPI that accepts more than one connection from
> clients at the same time.
> For do that I used MPI(mpich2-1.1.0a1.tar.gz) and pthreads.
>
> What I want to do is a server that stays in a infinity loop waiting for
> connections (MPI_Comm_accept(portMD, MPI_INFO_NULL, 0, MPI_COMM_WORLD,
> newCommClient);). When a connection is established, he creates a new thread
> and return to wait more connections.  That means, the server and the thread
> will work in parallel.
>
> The function that the thread will execute calls mpi functions, like
> MPI_probe, MPI_Get_count, MPI_Recv, MPI_Send,  MPI_Pack and  MPI_Unpack.
>
> The problem I'm having is that the server and the thread are not working in
> parallel successfully. Sometimes, the program hangs, do nothing, and in
> another times a fatal error appears (Assertion failed in file sock_wait.i at
> line 236: (pollfd->events & (0x001 | 0x004)) || pollfd->fd == -1).
>
> When I put the server to sleep for a moment, before he will wait another
> connection, during the time he was sleeping the created thread works fine.
> Once the server wakes up and starts to wait for a connection, things stop
> working.
>
> A peace of my code (Server):
>
> -----------------------------------------------------------------------------------------------------------------------------
> // arguments passed to a thread
> typedef struct
> { MPI_Comm communicator;
>   char * path1;
>   char * path2;
>   char * port;
> } ThreadParam;
>
>  pthread_t threads[10];
>  int t =0;
>  int rc;
>
>
>  ThreadParam * listParam = NULL;
>  MPI_Comm * newCommClient;
>
>
>   /* server  infinity loop */
>  while (time_out > 10)
>  {
>
>      newCommClient = malloc(sizeof(MPI_Comm));
>
>
>      /* waiting for a connection */
>      MPI_Comm_accept(portMD, MPI_INFO_NULL, 0, MPI_COMM_WORLD,
> newCommClient);
>
>      listParam = malloc(sizeof(ThreadParam));
>      listParam->communicator = *newCommClient; //with this communicator the
> thread will talk with
> the
> /
> //client
>      listParam->path1 = argv[2];
>      listParam->path2 = argv[4];
>      listParam->port = portMD;
>
>      rc = pthread_create(&threads[t], NULL, threadfunc, (void *)
> listParam);
>
>      if (rc){
>          printf("ERROR; return code from pthread_create() is %d\n", rc);
>          exit(-1);
>      }
>      //sleep(1);
>      t++;
>   }
>
>
> -----------------------------------------------------------------------------------------------------------------------------
> Please, I need help to solve this problem!!
>
> Thanks very mych!
>
> Gisele
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/mpich-discuss/attachments/20080919/dbfac9c1/attachment.htm>


More information about the mpich-discuss mailing list