Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Shared data space: How to manage Ancient keys?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2010-03-18 (18:33)
From: Hugo Ferreira <hmf@i...>
Subject: Shared data space: How to manage Ancient keys?

I am trying to implement a parallel algorithm and have opted to use
the Ancient module to share data across processes because it dynamically
reallocates memory when mapping data (I don't know the size of the
objects before hand). However I am having trouble managing its use of

Maybe someone here has a solution to my problem.

To make things clear - a little background. I have a set of worker
processes that cooperate to analyse a set of sequences. I assume
all sequences are in a global blackboard-type /LINDA-like data space.
Each worker removes a single sequence. It then scans all other existing
sequences and selects another one. It then a) removes the selected
sequence b) merges the 2 sequences at hand and generates 0, 1 or more
new sequences. The process repeats itself until no more sequences exist
in the global data space.

In the above scenario all sequences would be assigned a unique id which
increases sequentially. If I used a common data structure such as a
binary tree I could simply increment a counter and use that as a key
for the insertion/deletion of sequences into/from the binary tree.
However I cannot do this here because I can only share linear memory
via mapped files in Ocaml.

So far I have made a small experiment that allows me to insert data
into a shared memory space. Ancient allows one to copy various objects
into the memory space via an integer index. From the code it seems that
the indexing table is an array like structure. So when I add and object
I must identify an index (slot) that is empty (unused) and reuse that
otherwise memory will grow unchecked.

My question is how can I generate and share keys for Ancient's use
without exceeding memory usage?

Hugo F.