Recent

Author Topic: Distributed Reader-Writer Mutex 1.13 is here....  (Read 1785 times)

aminer

  • Hero Member
  • *****
  • Posts: 956
Distributed Reader-Writer Mutex 1.13 is here....
« on: January 19, 2013, 02:17:00 am »

Hello,


Distributed Reader-Writer Mutex 1.13 is here, i have
corrected some minor bugs...


Description:

Distributed Reader-Writer Mutex, based on the Dmitry Vyukov C++ Distributed Reader-Writer Mutex , that works across processe and threads, I have included the following Reader-Writer Mutexes inside this Distributed Reader-Writer mutex:

TMREW a light weight MREW lock (multiple-readers-exclusive-writer lock) that is very fast and that works across processes and threads and TMultiReadExclusiveWrite from JCL and now both of them can scale better, and i have modified the Dmitry Vyukov Distributed Reader-Writer Mutex, in the first version i have used GetCurrentProcessorNumber(), and i have also provided you with a second version that scales better, to be able to use the second version please use the version2 inside defines.inc, i have given you a test.pas example for the first version and test1.pas for the second version, but don't forget to use version2 inside defines.inc, to use the second version just uncomment the version2 inside defines.inc and comment version1. I have also done a cache line alignement in TOmniMREW, this has allowed Drwlock to scale better.

I have provided you with the source code, please take a look at the source code to understand better.The Object Pascal Distributed Reader-Writer Mutex  is based on the following C++ Distributed Reader-Writer Mutex by Dmitry Vyukov, read more here:

http://www.1024cores.net/home/lock-free-algorithms/reader-writer-problem/distributed-reader-writer-mutex

You have four methods:

procedure wlock; // same as EnterWriteLock of TOmniMREW
procedure wunlock; // same as ExitWriteLock
procedure rlock; // same as EnterReadLock
procedure runlock; // same as ExitReadLock

Here is some scalability numbers:

I have used TOmniMREW of the Omnithread library and used only EnterReadLock() and ExitReadLock() with four threads on a quad cores and TOmniMREW gave a negative scalability of -5.51x

And when i have used the second version of Distributed Reader-Writer Mutex using only rlock() and runlock() , it gave me +3.94x scalability with four threads on four cores. So now it's scaling.

And about the second version , don't forget to initialize the number  that you pass to rlock() and runlock()  to 0 before calling  rlock() and runlock() .

In the previous versions i have aligned the array elements on cache line bounderies like have done Dmitry Vyukov, and when i have tested the second version it didn't work correctly , so i have thought about that and after that i have decided to not align the array elements on cache line bounderied but just add a cache line padding to TOmniMREW and this time it has worked perfectly and now the second version is scaling perfectly..



You can download Distributed Reader-Writer Mutex 1.13 from:

http://pages.videotron.com/aminer/


Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freepascal.org/

Operating Systems: Win and Linux (x86).

Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal

-Sd for delphi mode....

Required Delphi switches: -DMSWINDOWS -$H+

For Delphi use -DDelphi

And inside defines.inc you can use the following defines:

{$DEFINE CPU32} for 32 bits systems

{$DEFINE CPU64} for 64 bits systems

{$DEFINE TOmniMREW} to use Omnithread MREW

{$DEFINE TMultiReadExclusiveWrite} to use the jcl TMultiReadExclusiveWrite




Thank you,
Amine Moulay Ramdane.



 

TinyPortal © 2005-2018