[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