I have given some thought to the problem of distributing a single binary 
to all participants, as well as that of reducing build complexity (the 
number of different SDKs that has to be installed to build for various 
target hardware. (Nvidia+ATI+Cell) In private communications I have 
suggested that the A5 engine is delay loaded from a shared library (dll) 
- but perhaps it wasn't clear how I intended to do this.

So to illustrate, I have done exactly this to the ATI code. The new 
(even simpler) API now looks like:

bool A5BrookInit(int advance, int max_rounds, int condition, bool buggy, 
bool use_tables);
int  A5BrookSubmit(uint64_t start_value, unsigned int start_round);
bool A5BrookPopResult(uint64_t& start_value, uint64_t& stop_value, int& 
start_round); 
void A5BrookShutdown();

So this code would be safe to link into the standard executable, since 
it would only try to load the Brook/CAL shared libraries as a result of 
someone calling A5BrookInit (specify --brook on command line)

To make things even simpler, the same style API could be used for all 
hardware ( Cuda, Brook, OpenCL )

The code repository could then have code for all the various HW 
platform, but the make file decides what to build depending on which 
SDKs are installed. The binary distribution, would have a full set of 
shared libraries, and the user decides run-time which to use.
  
The full & updated sources for this "magic", can be found at the usual 
drop site:  http://traxme.net/a5/a5_linux.zip

This new version also has some experimental table driven code, but I can 
only get a 3% speed increase from my bit-for-bit implementation. I need 
to look into texture-cache-coherency etc.

PS! I hope i can soon use my new gfx card to do some actual work on the 
project. It is getting cold outside, and I wouldn't mind warming my 
house with some A5/1 :-)

cheers,

Frank
_______________________________________________
A51 mailing list
[email protected]
http://lists.lists.reflextor.com/cgi-bin/mailman/listinfo/a51

Reply via email to