« All posts

ILNumerics Lets .NET Array Code Parallelize Itself

ILNumerics Accelerator replaces global static dependency analysis with local runtime checks to auto-parallelize .NET array code, claiming 3x-100x speedups.

ILNumerics Accelerator proposes a way to parallelize numerical .NET array code without requiring developers to manually write threads, tasks, or device kernels. Instead of relying on global static dependency analysis to find safe parallelization points, it treats every array instruction as an autonomous unit that decides at runtime when, where, and how to execute based on its direct dependencies. The main thread no longer walks through the full workload sequentially; it only extracts the minimal dependency structure needed and releases instructions for independent execution.

This runs through an 'execution net' — a moving window that can hold hundreds or thousands of active instructions at once, letting independent work run concurrently while dependent instructions preserve only the local ordering actually required. Array pipelining lets downstream work start from partial input information (like shapes) before full data is ready, and each instruction is further tuned via micro-JIT optimizations such as SIMD, cache-aware execution, and loop unrolling — combining program-level parallelism with low-level kernel efficiency.

The approach specifically targets code that doesn't fit clean loop-parallel patterns like Parallel.For(), such as loops with sequential dependencies or shared state, where manual parallelization is often unsafe or infeasible. By dissolving unnecessary source-order sequencing, ILNumerics turns large program regions into concurrent, pipelined runtime execution, reportedly delivering 3x to over 100x speedups and making parallelization worthwhile even for mid-sized workloads. Experimental heterogeneous (non-CPU) execution is included in version 7 but defaults to whole-CPU computing.

» SourceHashnode #9