I have a specific use case that I want to describe, and I'm brand new to MPI. It's rather complex, so I want to be careful that I design it so that there are no race conditions.
Pool A is a buffer (of type 1) handle manager, that feeds buffer handles into thread set 1, and receives old handles from thread set 2. There is only one thread running pool A. Thread set 1 is a set of N threads that fill up buffers of type 1 with regular data. It pushes full buffers to thread set 2. Thread set 2 is a set of M threads that compress buffers of type 1 into data buffers of type 2. Once the buffer of type 1 has be used up, it is cleared and sent back to Pool A. It pulls fresh data buffers of type 2 from Pool B, and sends freshly filled compressed buffers to Pool C. Pool C does something with the buffer, clears it and hands it to Pool B. Can this be done safely using an implementation like what I see here: http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html ? Note 1: -= denotes a 1-to-N connect and =- a N-to-1 connect RR = Request reply relationship http://imgur.com/6tWZglJ Questions: does MPI work with intel PIN tools? If so, then how can I apply it to this? (I need specific modules and some examples, the OpenMPI manual just appears to be a bunch of references with no textual guides...).