I have a large array that is shared between two processes. One process updates 
array elements randomly, the other process reads array elements randomly. Most 
of the time these writes and reads do not overlap.
The current version of the code uses Linux shared memory with NSEMS semaphores. 
When array element i has to be read or updated semaphore (i % NSEMS) is used. 
if NSEMS = 1 the entire array will be locked which leads to unnecessary waits 
because reads and writes do not overlap most of the time. Performance increases 
as NSEMS increases, and flattens out at NSEMS = 32, at which point the code 
runs twice as fast when compared to NSEMS = 1.
I want to change the code to use OpenMPI RMA, but MPI_Win_lock locks the entire 
array, which is similar to NSEMS = 1. Is there a way to have more granular 
locks?

Gijsbert


Reply via email to