Prodded by the comment that "someone should look into implementing a channel abstraction for Epiphany" and tempted by Ben's offer of access to the Sundance Zedboard, well, here's something that might be a start.
It is provisionally called the x-lib, being eXperimental stuff that might become useful eXtensions to the Adapteva SDK.
The basic idea for pairwise synchronisation between cores comes from the e_barrier code in the SDK (i.e. write to peer's internal memory, and busy-wait on own internal memory). Thanks to Yaniv for that and the patient explanations along the way.
A test/demonstration application can be found here with the x-lib code: . It works on a Zedboard with Epiphany-III and esdk.5.13.07.10, other configurations are untested.
There is a rather work-in progress manual there too. Since we don't really know if the x-lib API will be useful, or how much it might change before it becomes useful, the manual does not contain a comprehensive listing of the function calls and the behaviour. However I've endeavoured to provide information on the purpose and behaviour of the x-lib functions within comments in the header and source files.
I think the basic synchronisation concept should be extensible to support one-message-in-transit scenarios, and the simultaneous data exchanges that usually feature in applications that have a grid-structured computational domain.
Feedback would be very much appreciated, even if it is "too slow", "too unwieldy", "can't I do it XYZ way?" etc.
*IMO the key conceptual difference between then and now is that cores are so cheap that there is no need for processes to share a core, thus techniques like busy-waiting become socially acceptable.Statistics: Posted by mhonman — Mon Oct 21, 2013 10:19 pm
]]>