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
