[mpich-discuss] Multithread server using MPICH-2

Gisele Machado de Souza giselemachad at gmail.com
Mon Sep 22 15:49:29 CDT 2008


People, help me.
Like I said in my previous message, my application worked when I compile the
library with the options:

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


I did a safe copy of the version that is working.

But when I test remove all .o  and executable files, and  compile again, the
application stops working.
(and my safe copy is working)

In my makefile I put:

CFLAGS = -g
CLIBS = -lpthread -lm

I need to compile with more options to make it work?

2008/9/19 Gisele Machado de Souza <giselemachad at gmail.com>

> 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/20080922/d1d1125d/attachment.htm>


More information about the mpich-discuss mailing list