Hybridizer is a productivity tool for software developers who want to enable accelerators for their calculations. Using dot net or java binary as input, it can generate source code for multi-core and many-core platforms.
Using parallelization patterns, such as Parallel.For or distributing parallel work by hand, the user can benefit from the compute power of the accelerators without entering the learning curve of the internal architecture jargon.
While providing automated default behavior, Hybridizer leaves full control to the developer at each phase, allowing the reuse of existing device-specific code, use of existing external libraries or custom handmade code snippets.
If debug information is available, the debugging can be performed from within the development environment, while running the optimized code on the target hardware; for example, a program written in C#, with a breakpoint in the cs file within Visual Studio can have that breakpoint hit and its local variables and object data explored while execution occurs on an NVIDIA GPU (see snapshot).
Source code is generated allowing review and audit, as well as customized integration within more complex projects. From a single version of the source code, several versions can be generated without any change in the input source. Libraries for which code is not available and/or is obfuscated can also be used as the hybridizer operates on MSIL byte-code or java byte-code; also allowing support for a variety of languages built on top of dot net virtual machine or java virtual machine.
All of this flexibility does not come at the expense of performances loss. As our benchmark illustrate, code generated by the Hybridizer can perform as well as hand-written code, achieving up to 93% of hardware peak performance. Performance profilers such as Intel VTUNE Amplifier or NSIGHT Visual Profiler can be used to measure performances of the generated binary, where the performance indicators will refer to original source code (C# or Java for instance).