20110323

GSOC 2011: I Recommend Mono.SIMD

If anyone is looking for a good GSOC 2011 project, I would suggest Mono.SIMD. If you don't already know what SIMD is, then this project probably isn't for you, but you might find it interesting nonetheless. Although the Microsoft .NET version of C# does not explicitly support SIMD, once Mono has it for x86, ARM, and others, Microsoft likely will want it as well. The ARM port is just as important (if not more) important than the x86 port, so please don't ignore it. Buy a BeagleBoard or a PandaBoard to tackle NEON SIMD, (or even buy a Plug Computer or Verdex Pro for iwMMXt) . Although some people may think that iwMMXt is old news, it still lives on with Marvell's Sheeva and ARMADA product lines. You can still do blazingly fast multimedia with iwMMXt (h264, for example) but its limited to integer operations rather than floating-point (which is more efficient for multimedia in any case). 

Chances are you already have a PC with several flavours of SSE, so you should be all set to do add x86 SIMD and at least one flavour of ARM SIMD to the Mono JIT. Read this article to see why it makes sense.

PS: Good luck to all volunteering organizations and students this year!

3 comments:

Christopher Friedt said...

Wouldn't it be nice to have a Java SIMD API ;-)

Christopher Friedt said...

Some interesting links for Java SIMD API

Christopher Friedt said...

Some people seem to think that introducing a SIMD API to Java would undermine its usefulness as a WORA language. Specifically, some feel that a JIT compiler should dynamically rewrite for-loops to perform common operations using vectors matching the vector length of the underlying SIMD hardware. However, for JIT compilers that do not implement the feature, code will run significantly slower on platform A than on platform B, which undermines the WORA principle anyway.

In either case, whether the SIMD API is implemented or not, it's not gauranteed that code will execute in SIMD mode for managed code that runs with a JIT. At least if the API exists, then programmers don't have to rewrite it every time for every archictecture using JNI or COM Interop.

So in short, yes - a common SIMD API is A GOOD THING!!