From: Ole-Hjalmar Kristensen <ole-hjalmar.kristensen@substitute_employer_here.com>
Subject: Re: Robert Dewar's great article about the Strengths of Ada over other langauges in multiprocessing!
Date: 04 Apr 2008 08:36:50 +0200
Date: 2008-04-04T08:36:50+02:00 [thread overview]
Message-ID: <wvbry77uxh19.fsf@astra06.norway.sun.com> (raw)
In-Reply-To: C4195DF6.E2796%yaldnif.w@blueyonder.co.uk
Interesting. I had not thought of Ada.Synchronous_Task_Control. Apart
from that, I agree that a "best effort" implementation of standard
library like the membar_ops and atomic_ops which are part of the
Solaris C library would likely be sufficient.
>>>>> "(b" == (see below) <yaldnif.w@blueyonder.co.uk> writes:
(b> On 02/04/2008 08:22, in article wvbr4pakzpo1.fsf@astra06.norway.sun.com,
(b> "Ole-Hjalmar Kristensen"
(b> <ole-hjalmar.kristensen@substitute_employer_here.com> wrote:
>> Yes, I know. So pragma atomic does not help very much by itself in
>> implementing lock-free algorithms.
(b> Yes, it's only one essential aspect.
>>>> Agreed, but you may able to cheat and pack a pair of integers into
>>>> a 64-bit atomic, and a compare-and-swap is also much cheaper than a
>>>> protected object it seems.
>>
>> (b> Yes, but this is completely implementation-dependent.
>> (b> Not much above the semantic level of assembly.
>> (b> I would take a lot of convincing that the performance
>> (b> improvement was actually necessary.
>>
>> I agree that it rarely should be necessary. It would have been nice to
>> have a way of implementing lock-free algorithms in Ada efficiently,
>> but entryless protected objects seems to be the best solution if
>> you want a portable program.
(b> It would not take too much - perhaps just a standard library including
(b> read-barrier and write-barrier operations, and a selection of things like
(b> CAS, TAS, EXCH, etc; mapped to m/c codes where these are provided,
(b> and implemented using the architecture's native sync operations where not.
(b> Is this the basis for an AI?
(b> Following on my second post to the point, I was reminded of the package
(b> Ada.Synchronous_Task_Control, which must also impose memory barriers is it
(b> is to work reliably on a multiprocessor; so I tried that in my Simpson's
(b> algorithm test as well. Here is the code:
>> with Ada.Synchronous_Task_Control;
>> package body Wait_Free_Atomicity is
>>
>> procedure Sync is
>> use Ada.Synchronous_Task_Control;
>> Sema : Suspension_Object;
>> Bool : Boolean := Current_State(Sema); -- either this
>> begin
>> -- Set_True(Sema); -- or
>> -- Suspend_Until_True(Sema); -- this
>> end Sync;
>>
>> procedure Update (Atomic_Item : in out an_Atomic; Item : in an_Item) is
>> Row : constant a_Bistate := not Atomic_Item.Last_Row_Inspected;
>> Col : constant a_Bistate := not Atomic_Item.Last_Column_Updated(Row);
>> begin
>> Atomic_Item.Data_Slot_Matrix(Row, Col) := Item;
>> Atomic_Item.Last_Column_Updated(Row) := Col;
>> Atomic_Item.Last_Row_Updated := Row;
>> Sync;
>> end Update;
>>
>> procedure Inspect (Atomic_Item : in out an_Atomic; Item : out an_Item) is
>> Row : constant a_Bistate := Atomic_Item.Last_Row_Updated;
>> Col : a_Bistate;
>> pragma Atomic (Col);
>> begin
>> Atomic_Item.Last_Row_Inspected := Row;
>> Col := Atomic_Item.Last_Column_Updated(Row);
>> Item := Atomic_Item.Data_Slot_Matrix(Row, Col);
>> Sync;
>> end Inspect;
>>
>> end Wait_Free_Atomicity;
(b> It works nicely, and is an order of magnitude faster than a protected
(b> object:
(b> 20_000_000 updates
(b> with Suspend_Until_True sync:
(b> No consistency failures.
(b> 7.30 real 14.14 user 0.04 sys
(b> with Current_State sync:
(b> No consistency failures.
(b> 3.57 real 6.97 user 0.02 sys
(b> --
(b> Bill Findlay
(b> <surname><forename> chez blueyonder.co.uk
--
C++: The power, elegance and simplicity of a hand grenade.
next prev parent reply other threads:[~2008-04-04 6:36 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-08 6:04 Robert Dewar's great article about the Strengths of Ada over other langauges in multiprocessing! ME
2008-03-08 22:11 ` Maciej Sobczak
2008-03-09 1:09 ` Christopher Henrich
2008-03-09 13:52 ` Maciej Sobczak
2008-03-09 1:51 ` Phaedrus
2008-03-09 3:17 ` Jeffrey R. Carter
2008-03-09 13:59 ` Maciej Sobczak
2008-03-09 3:15 ` Jeffrey R. Carter
2008-03-09 13:32 ` Maciej Sobczak
2008-03-09 14:02 ` Dmitry A. Kazakov
2008-03-09 18:26 ` Phaedrus
2008-03-10 0:04 ` Ray Blaak
2008-03-10 7:49 ` Georg Bauhaus
2008-03-10 16:48 ` Ray Blaak
2008-03-10 7:53 ` Phaedrus
2008-03-09 22:31 ` Jeffrey R. Carter
2008-03-10 3:53 ` gpriv
2008-03-10 3:04 ` Robert Dewar's great article about the Strengths of Ada over Larry Kilgallen
2008-03-10 9:23 ` Maciej Sobczak
2008-03-10 19:01 ` Jeffrey R. Carter
2008-03-10 22:00 ` Maciej Sobczak
2008-03-11 0:48 ` Jeffrey R. Carter
2008-03-11 7:12 ` Pascal Obry
2008-03-11 8:59 ` Maciej Sobczak
2008-03-11 9:49 ` GNAT bug, Assert_Failure at atree.adb:2893 Ludovic Brenta
2008-03-14 20:03 ` Robert Dewar's great article about the Strengths of Ada over Ivan Levashew
2008-03-22 21:12 ` Florian Weimer
2008-03-09 8:20 ` Robert Dewar's great article about the Strengths of Ada over other langauges in multiprocessing! Pascal Obry
2008-03-09 9:39 ` Georg Bauhaus
2008-03-09 12:40 ` Vadim Godunko
2008-03-09 13:37 ` Dmitry A. Kazakov
2008-03-09 14:41 ` Vadim Godunko
2008-03-10 20:51 ` Randy Brukardt
2008-03-10 22:30 ` Niklas Holsti
2008-03-10 9:56 ` Ole-Hjalmar Kristensen
2008-03-11 13:58 ` george.priv
2008-03-11 15:41 ` Vadim Godunko
2008-03-12 0:32 ` gpriv
2008-03-12 13:33 ` Maciej Sobczak
2008-03-12 14:41 ` gpriv
2008-03-12 15:22 ` Vadim Godunko
2008-03-13 0:34 ` gpriv
2008-03-12 16:28 ` Maciej Sobczak
2008-03-12 17:24 ` Samuel Tardieu
2008-03-13 8:41 ` Maciej Sobczak
2008-03-13 15:20 ` Samuel Tardieu
2008-03-12 23:54 ` gpriv
2008-03-13 9:40 ` Maciej Sobczak
2008-03-13 10:49 ` Peter C. Chapin
2008-03-13 13:03 ` Alex R. Mosteo
2008-03-13 14:02 ` gpriv
2008-03-14 1:12 ` Randy Brukardt
2008-03-14 10:16 ` Alex R. Mosteo
2008-03-13 11:42 ` gpriv
2008-03-13 16:10 ` Maciej Sobczak
2008-03-13 16:16 ` gpriv
2008-03-13 22:01 ` Simon Wright
2008-03-13 22:25 ` Maciej Sobczak
2008-03-14 2:07 ` gpriv
2008-03-14 9:29 ` Maciej Sobczak
2008-03-14 21:54 ` Simon Wright
2008-03-15 2:29 ` gpriv
2008-03-15 13:29 ` Maciej Sobczak
2008-03-15 16:09 ` gpriv
2008-03-11 22:09 ` gpriv
2008-03-09 13:50 ` Maciej Sobczak
2008-03-09 14:54 ` Pascal Obry
2008-03-10 21:24 ` Randy Brukardt
2008-03-11 10:12 ` Alex R. Mosteo
2008-03-22 22:43 ` Florian Weimer
2008-03-26 13:49 ` Ole-Hjalmar Kristensen
2008-03-26 21:27 ` Florian Weimer
2008-03-27 9:31 ` Ole-Hjalmar Kristensen
2008-03-27 23:10 ` Florian Weimer
2008-03-28 9:51 ` Ole-Hjalmar Kristensen
2008-03-28 18:12 ` Florian Weimer
2008-03-28 21:45 ` Randy Brukardt
2008-03-31 7:59 ` Ole-Hjalmar Kristensen
2008-03-31 13:03 ` (see below)
2008-03-31 14:17 ` (see below)
2008-04-01 9:02 ` Ole-Hjalmar Kristensen
2008-04-01 14:12 ` (see below)
2008-04-02 7:22 ` Ole-Hjalmar Kristensen
2008-04-02 14:59 ` (see below)
2008-04-04 6:36 ` Ole-Hjalmar Kristensen [this message]
2008-04-04 13:56 ` (see below)
2008-04-04 17:36 ` Georg Bauhaus
2008-04-04 17:40 ` (see below)
2008-04-15 12:05 ` Ole-Hjalmar Kristensen
2008-04-17 4:46 ` Randy Brukardt
2008-03-28 6:34 ` Randy Brukardt
2008-04-29 7:15 ` Ivan Levashew
2008-05-01 2:03 ` Steve Whalen
2008-03-14 19:20 ` Mike Silva
2008-03-14 20:43 ` Ed Falis
2008-03-22 22:51 ` Florian Weimer
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox