[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.programming

A very fast concurrent FIFO Queue and a very fast concurrent priority FIFO Queue version 1.2

Ramine

11/21/2014 8:51:00 PM



Hello,


A very fast concurrent FIFO Queue and a very fast concurrent priority
FIFO Queue version 1.2


Author: Amine Moulay Ramdane


Description:

A very fast concurrent FIFO queue and a very fast concurrent priority
FIFO queue that satisfy many requirements: they have more parallelism
than the two locks algorithm, they are starvation-free and FIFO fair on
the push() side and they are lockfree on the pop() side, and they
minimizes efficiently the cache-coherence traffic and they are energy
efficient on the pop() side when you set the wait parameter to true in
the construtor: when there is no items in the queue they will not
spin-wait , but they will block wait on my emaMonitor, and when the wait
parameter of the constructor is set to false they uses only an atomic
increment on the push() side and a CAS on the pop() side, so they are
very fast. This concurrent FIFO queue and concurrent priority FIFO queue
are limited to 1000 threads on the push() side, if you want to higher
that, just modify the "margin" constant in the source code.

You have 3 options for setting the kind of locks, just look inside
defines.inc , if you want to set it for my scalable lock called MLock
just uncomment the option MLock inside defines.inc, if you want to set
it for Ticket Spinlock just uncomment the option TicketSpinlock ,If you
want to set it for Spinlock just uncomment the option Spinlock, the
MLock option scored 12.0 millions of transactions per second on my 2.4
GHz Quadcore, the Spinlock scaled better even if the number of threads
are greater than the number of cores, the TicketSpinlock and MLock don't
scale well when the number of threads are greater than the number of
cores, the Ticket Spinlock and scalable MLock are optimal when the
number of threads are equal to the number of cores, and when the wait
parameter of the constructor is false it scales even if the number of
threads are greater than the number of cores.

The size of the queue must be passed to the constructor and it must be a
power of 2.


You can download them from:

https://sites.google.com/site/aminer68/concurrent-fi...



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

Operating Systems: Windows, Mac OSX , Linux...

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

-Sd for delphi mode....

Required Delphi switches: -$H+ -DDelphi

{$DEFINE CPU32} and {$DEFINE Windows32} for 32 bit systems

{$DEFINE CPU64} and {$DEFINE Windows64} for 64 bit systems




Thank you,
Amine Moulay Ramdane.


1 Answer

Ramine

11/21/2014 9:10:00 PM

0


Hello,


Those very fast concurrent FIFO queue and concurrent priority FIFO queue
are compatible with Delphi 7 to 2007 and with FreePascal and Lazarus and
with all the Delphi XE versions..


To compile them with the Delphi XE versions please download the
zipfile called "wqueue1_xe.zip"..

And to compile them for Delphi 7 to Delphi 2007 or with FreePascal
or Lazarus please download the zipfile called "wqueue1.zip".


Thank you,
Amine Moulay Ramdane.




On 11/21/2014 12:51 PM, Ramine wrote:
>
>
> Hello,
>
>
> A very fast concurrent FIFO Queue and a very fast concurrent priority
> FIFO Queue version 1.2
>
>
> Author: Amine Moulay Ramdane
>
>
> Description:
>
> A very fast concurrent FIFO queue and a very fast concurrent priority
> FIFO queue that satisfy many requirements: they have more parallelism
> than the two locks algorithm, they are starvation-free and FIFO fair on
> the push() side and they are lockfree on the pop() side, and they
> minimizes efficiently the cache-coherence traffic and they are energy
> efficient on the pop() side when you set the wait parameter to true in
> the construtor: when there is no items in the queue they will not
> spin-wait , but they will block wait on my emaMonitor, and when the wait
> parameter of the constructor is set to false they uses only an atomic
> increment on the push() side and a CAS on the pop() side, so they are
> very fast. This concurrent FIFO queue and concurrent priority FIFO queue
> are limited to 1000 threads on the push() side, if you want to higher
> that, just modify the "margin" constant in the source code.
>
> You have 3 options for setting the kind of locks, just look inside
> defines.inc , if you want to set it for my scalable lock called MLock
> just uncomment the option MLock inside defines.inc, if you want to set
> it for Ticket Spinlock just uncomment the option TicketSpinlock ,If you
> want to set it for Spinlock just uncomment the option Spinlock, the
> MLock option scored 12.0 millions of transactions per second on my 2.4
> GHz Quadcore, the Spinlock scaled better even if the number of threads
> are greater than the number of cores, the TicketSpinlock and MLock don't
> scale well when the number of threads are greater than the number of
> cores, the Ticket Spinlock and scalable MLock are optimal when the
> number of threads are equal to the number of cores, and when the wait
> parameter of the constructor is false it scales even if the number of
> threads are greater than the number of cores.
>
> The size of the queue must be passed to the constructor and it must be a
> power of 2.
>
>
> You can download them from:
>
> https://sites.google.com/site/aminer68/concurrent-fi...
>
>
>
> Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freep...
>
> Operating Systems: Windows, Mac OSX , Linux...
>
> Required FPC switches: -O3 -Sd -dFPC -dFreePascal
>
> -Sd for delphi mode....
>
> Required Delphi switches: -$H+ -DDelphi
>
> {$DEFINE CPU32} and {$DEFINE Windows32} for 32 bit systems
>
> {$DEFINE CPU64} and {$DEFINE Windows64} for 64 bit systems
>
>
>
>
> Thank you,
> Amine Moulay Ramdane.
>
>