PRESENTATION of TABLES_Indeterminacy

Each experimented solution is registered in a folder which contains the .adb file of the code and a .txt file with Quasar results data.
Examples:
xs_agoraserverada3 is the experiment with the shared agora Ada protected object solution with N = 3 cooperating processes
The  experiment with N = 3 contains also the sliced version of the Ada program.

The results are collected in tables 3, 4 and 5 which are available in the file Table3_4_5_Data.pdf

last update 2007-11-10

The different implementations of anonymous non-deterministic pairing
with various interaction after pairing
(adding a shared object or rendezvous call)

We experiment slightly different programs with two implementations of the pairing component.

 Shared agora using an Ada protected object

In this first solution for the pairing component, a meeting place called an Agora is known and used by all seeking processes as a pairing data container. This implementation uses shared data and shared procedures controlled by  a monitor.
The  monitor structure implemented (agoraserverada) uses implicit self-blocking and signalling as provided by Ada protected objects [1] with entry barriers and automatic entry re-evaluation. The strong fairness semantics results from the so-called Ada “eggshell model” for protected objects which gives precedence to awaken calls over new calls. A “requeue” statement to a private entry enables the first request to be postponed.

Dummy component

The aim of this implementation (dummy) is to provide a low bound model with only a shared procedure call which returns a predefined partner which is the same for all candidates (since this call is unuseful for concurrency, it is normally sliced. However Quasar provides a mean for signalling that a statement should not be sliced). All transactions are performed with the fixed predefined partner and are no longer peer-to-peer transactions. This choice preserves a reliable solution.

Set of main programs

The main program declares and creates N concurrent processes and calls each of them for allocating unique Ids. Thus each process starts accepting a call for grasping its unique Id and then loops forever. Each cycle consists  of a call to the pairing component for getting a current partner. Then we compare programs with  several possible interactions with this partner.
xx_context
: this is the program with an empty sequence of interactions.
s1_context: this program adds a protected object to the former. All cooperating processes call a parameterless shared protected procedure.
s2_context: this program adds a rendezvous to the program of xx_context. All cooperating processes use it in a simple peer-to-peer interaction.
s3_context: this program adds a protected object and a rendezvous to the program of xx_context. All cooperating processes perform a simple peer-to-peer interaction followed by a parameterless shared protected procedure call.
original_context or t0_context: Full peer to peer transaction between the cooperating processes is expressed by two calls (start and finish) between the peers.
t1_context: this program adds a protected object to the former program. The peer-to-peer transaction is followed by a parameterless shared protected procedure call.
t2_context: this program adds a rendezvous to the original context. The cooperating processes  perform a peer-to-peer large transaction expressed by three calls between the peers.

The set of data collected by Quasar are displayed in Tables 3, 4 and 5. The latter presents the results when Quasar is used without setting the usual static or dynamic reductions.



About QUASAR

Quasar current constraints

-- package names and file names in low case
-- no embedded package in a compilation unit
-- only one declaration at a time; no identifier list (for with and use also)
-- no implicit type for task, protected object or array
-- no explicit cast such as Integer(I)
-- when using "requeue", when possible, always assign a value to out parameter in the last step
-- if out parameter assigned before requeueing use rather an "in out" parameter

Quasar residual delicacy constraints!!

-- "if (First_Call) then" causes error; "if First_Call then"  works correctly!!
-- "Max : constant := 6;" causes error; Max : constant Integer := 6; is correct!!
-- Score : Integer; case Score(C) is
--            when 0 =>    .................;
--            when 1 => ....................;
--            when 2 =>  null;
--                   end case;
-- causes error since when 2 =>  null; is sliced
-- correct solution (and also better Ada programming)
-- case Score(C) is
--            when 0 =>    ................
--            when 1 => ....................
--            when others =>  null;
--         end case;

Quasar annotation

-- Quasar provides a mean for signalling that a statement should not be sliced
-- this is done by an annotation appearing as a special comment: " --#Y"