Industrial Data Science
in C# and .NET:
Simple. Fast. Reliable.

ILNumerics - Technical Computing

Modern High Performance Tools for Technical

Computing and Visualization in Industry and Science

Current State, Limitations

This article lists the current implementation state and limitations currently found in the Accelerator compiler.

Current State of Development (March, 2024, Version 7.0.104)

  • The nuget package ILNumerics.Accelerator.Command must be manually included to the project as package reference.
  • Accelerator compiler is "always on". It handles unseen code and delivers the guarantee to not change the code semantics and to be at least as fast as the un-optimized source code. You may define regions to be explicitly excluded from processing in your source code files.
  • The list of supported array functions is still growing. Eventually, all array functions will be supported, which will allow the Accelerator to expose its full potential. 
  • The .NET CLR (Host) is the main target for optimized execution of array expressions. But array data may live on many devices simultaneously. Switching between devices is made autonomously and transparently to the user. While the CLR and CPU-OpenCL devices are well tested, GPU support is still work in progress. Most functions do work on the GPU already. But driver support often lacks stability. So, GPUs are not targeted in version 7.0, yet. Enable them manually if you want to have certain expressions execute on the GPU.
  • High-level functions, as linear algebra, FFT and toolboxes functionality, is not yet accelerated and will execute as legacy versions. We are working to improve support here.  
  • JIT times may slow things down during program start-up. We went through a lot of effort to hide such latencies ( and to meet the "dont become slower than before" guarantee). Later releases will bring the ability to perform efficient caching of segments and kernels. Most JIT compilation overhead will be eliminated this way. 
  • The nuget package ILNumerics.Accelerator.Command must be manually included as a project package reference.
  • C# projects are supported. Support for F# / Visual Basic is not planned. 
  • ILMath.min() / ILMath.max() do not yet handle NaN values
  • Reduction nodes (sum(), prod(), min(), max()) require the dim/axis argument and it must be a compile time constant. 
  • Reduction nodes may use the keepdims argument, but it must be set to the 'true' compile time constant. 
  • Generator nodes, as ones(), arange() etc. must not use the (storage) order argument. Manual storage order management should be limited to a few very special cases.