Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Programming Threads > Multithread ser...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 4033 of 4146
Post > Topic >>

Multithread server using MPI

by "giselemachad@[EMAIL PROTECTED] " <giselemachad@[EMAIL PROTECTED] > Sep 18, 2008 at 02:15 PM

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 and pthreads.

What I want to do is a server that stays in a infinity loop waiting
for connections (MPI_Comm_accept(****tMD, 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.

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 * ****t;
} 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(****tMD, MPI_INFO_NULL, 0, MPI_COMM_WORLD,
newCommClient);

     listParam = malloc(sizeof(ThreadParam));

//with this communicator the thread will talk with
the                                                                       
                                                                           
                //
client
     listParam->communicator = *newCommClient;
     listParam->path1 = argv[2];
     listParam->path2 = argv[4];
     listParam->****t = ****tMD;

     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
 




 1 Posts in Topic:
Multithread server using MPI
"giselemachad@[EMAIL  2008-09-18 14:15:40 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat Nov 22 9:43:07 CST 2008.