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, Known Issues

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

Current State of Development (Sept, 2024, Version 7.0.223)

  • The nuget package ILNumerics.Accelerator.Command must be manually included to the project as package reference.
  • Accelerator compiler is "always on". It handles all valid C# code involving Array<T> and Logical, where T is a numeric, elementary system value type. It delivers the guarantee to not change the code semantics and to produce 'equally correct' results. Accelerated code should be at least as fast as the un-optimized original. 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 automatically 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.  
  • All static array functions of ILMath.* and ILNumerics.numpy.* are subject of array pipelining (asynchronous array instruction level parallelism).
  • JIT times may slow things down a little 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). During jitting the accelerator will fall back to legacy function implementation. Later releases will bring the ability to perform efficient caching of segments and kernels. Most JIT compilation overhead will be eliminated this way. 
  • 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()) are only accelerated, when the following is met: 
    • the dim/axis argument must be provided as a compile time constant. 
    • the keepdims argument can only be used with the value 'true' as compile time constant.
  • Generator nodes, (ones(), arange(), ...) must omit the storage order argument. It is recommended to leave storage order management to the Accelerator.