June 21, 2017

System.Numerics.Vector and the Hybridizer

System.Numerics.Vector is a library provided by .Net (as a nuget package), which tries to leverage SIMD instruction on target hardware. It exposes a few value types, such as Vector<T>, which are recognized by RyuJIT as intrinsics. Hybridizer however delivers full SIMD instructions potential without the burden of writing vector code.

Read more

June 19, 2017

Hybridize A Large Image Processing Library

AForge is a great Image Processing and Vision .Net library.
We developed a few example applications making use of AForge and Hybridizer. Those two examples are:

  • A kernel function in application code which triggers the hybridization of AForge itself. This shows that dependencies are pulled by the Hybridizer with no user intervention. On Perlin noise code, we reach peak compute performance on a 1080 Ti.
  • Adaptive smoothing. We had to change AForge code to enable parallel processing (addresses computation). We then call it from a plain C# application code. We have therefore an hybridized library used transparently from the application code. Kernel appears to be memory-latency bound on a 1080 Ti.

Read more

June 2, 2017

Mandelbrot with Hybridizer

We demonstrate here the usage of Hybridizer on an embarrassingly parallel problem : Mandelbrot fractal. We start with a very naïve C# implementation, and describe the full optimization process.
From Parallel.For to a CUDA 2D grid, we show how these optimization steps increase performance.

Read more