I would love to see a comprehensive SIMD library similar to those on game consoles.
namespace boost::sys_info::cpu {
enum class feature_tag { // Arch-specific values sse, sse2... _count };
Do not forget the CPUID support for lzcnt and popcnt, the two most important instruction classes in searching - especially genetics. It is worth noting that there is some good idiom support and generic vector support in Clang, GCC and SNC (playstation) which makes it easy to write SSE and NEON code without using intrinsics. eg. vector float a, b, c; float d; // lane based ops. c = a + b; // permutes a = (vector float){ a[0], a[1], b[2], b[3] }; // scalar ops c = a * d; // vector/scalar combinations c = a * b[0]; Loop vectorisation is another method of writing vector code provided __restrict is used liberally. // should resolve to one instruction. for (int i = 0; i != 4; ++i) { c[i] = a[i] * b[i]; } Andy. --- This email has been checked for viruses by Avast antivirus software. http://www.avast.com