[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