Jump to content

ILNumerics: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Codename Lisa (talk | contribs)
Reworked article acc. to critizism, removed all commercial soundings etc., now better focussing on historical and technical facts. Added references to external, reliable sources.
Line 11: Line 11:
{{Refimprove|date=May 2012}}
{{Refimprove|date=May 2012}}


'''ILNumerics''' is a mathematical [[Library (computing)|class library]] for [[Common Language Infrastructure]] (CLI) developers. It simplifies the [[implementation]] of an array of [[numerical analysis|numerical]] [[algorithm]]s. ILNumerics was designed to help developers create distribution-ready [[Application software|applications]]. [[Graphical user interface|Interface]]s of existing [[computer algebra system|algebra systems]] were often found to be less effective, when it comes to distribution/integration into existing projects; therefore, ILNumerics does not come with an [[Interpreter (computing)|interpreter]] but directly utilizes features of modern [[Integrated development environment|development environments]] and [[programming language]]s like [[C Sharp (programming language)|C#]].
'''ILNumerics''' is a mathematical [[Library (computing)|class library]] for [[Common Language Infrastructure]] (CLI) developers and a [[Domain-specific language|domain specific language (DSL)]] for the [[implementation]] of [[numerical analysis|numerical]] [[algorithm]]s on the [[Dotnet framework|.NET platform]]. While [[computer algebra system|algebra systems]] with [[Graphical user interface|graphical user interface]]s focus on [[Prototyping (computer science)|prototyping]] of algorithms, implementation of such algorithms into distribution-ready [[Application software|applications]] is done using
[[Integrated development environment|development environments]] and [[General-purpose programming language|general purpose programming languages (GPL)]]. ILNumerics is an extension to [[Visual Studio Debugger|Visual Studio]] and aims at supporting the creation of technical applications based on .NET.


{{Infobox software
{{Infobox software
Line 17: Line 18:
| screenshot =
| screenshot =
| caption =
| caption =
| developer = ILNumerics GmbH
| developer = ILNumerics
| latest_release_version = v4.6
| latest_release_version = v4.8
| latest_release_date = {{release date|2015|01|08}}
| latest_release_date = {{release date|2015|06|11}}
| operating_system = [[.NET Framework]]/ [[Mono (software)|Mono]], [[Microsoft Windows|Windows]]
| operating_system = [[.NET Framework]]/ [[Mono (software)|Mono]], [[Microsoft Windows|Windows]]
| genre = [[List of numerical analysis software|Technical computing]], [[Mathematical software]]
| genre = [[List of numerical analysis software|Technical computing]], [[Mathematical software]]
| license = [[Proprietary software|proprietary]]
| license = [[Proprietary software|proprietary]],[[GPLv3]]
| website = {{URL|http://ilnumerics.net/}}
| website = {{URL|http://ilnumerics.net/}}
| platform = [[IA-32]], [[x86-64]]
| programming language = [[C-Sharp|C#]], [[Visual_Basic_.NET|Visual Basic]]
}}
}}


[[File:ILPanel graphical plots in a Windows application.png|thumb|Shows the use of ILNumerics ILPanel for 2D plot creation directly inside Windows Forms applications.]]
[[File:ILPanel graphical plots in a Windows application.png|thumb|Shows the use of ILNumerics ILPanel for 2D plot creation inside Windows Forms applications.]]
[[File:Optimization application finding the minimium of the camel 3 function.png|thumb|Shows the use of ILNumerics Optimization Toolbox for minimization in a Windows Forms application.]]
[[File:Optimization application finding the minimium of the camel 3 function.png|thumb|Image created with ILNumerics Optimization Toolbox in a Windows Forms application.]]
==Features==
==History==
ILNumerics started in 2006 as an open source project, originating from the Technical University of Berlin. In 2007 ILNumerics won the [[BASTA! Innovation Awards 2007]]<ref>[http://basta-award.de BASTA! Innovation Award 2007]</ref> as most innovative .NET project in [[Germany]], [[Switzerland]] and [[Austria]]. After 6 years of open source development, the project added a closed source, proprietary license in 2011, aiming business and academic developers at the same time. The project quickly gained popularity<ref>https://www.nuget.org/packages/ILNumerics/</ref><ref>http://stackoverflow.com/questions/tagged/ilnumerics</ref><ref>https://visualstudiogallery.msdn.microsoft.com/9a67b49d-b0b2-4073-97fd-3f18ba08cc61</ref>.
N-dimensional arrays, [[complex number]]s, [[linear algebra]], [[Fast Fourier transform|FFT]] and [[Chart|plotting]] [[GUI widget|controls]] (2D and [[3D computer graphics|3D]]) help developing algorithms on every [[Computing platform|platform]] the CLI runs on. Developers formulate computational algorithms directly in their favorite [[List of CLI languages|CLI language]] - avoiding the need for interfacing 3rd party mathematical frameworks. The syntax is vastly compatible to well known and established mathematical programs like [[MATLAB]] and [[GNU Octave]]. Due to its strong [[type safety]] algorithms developed that way are more stable and robust at [[run time (program lifecycle phase)|run time]]. The library is the only math library so far, which takes the characteristics of the CLI into account and therefore achievers better execution performance than its competitors.
The [[.NET Framework version history|.NET framework]] was selected as a [[Managed code|managed]] foundation, since earlier attempts on the [[Java Platform|Java platform]] had been abandoned<ref>http://www.javagrande.org/</ref> due to technical limitations<ref>http://math.nist.gov/javanumerics/reports/issues.html</ref>. Similarly, the .NET framework has not been designed with the focus on requirements of technical application development. ILNumerics added interfaces to popular codes ([[LAPACK]], [[FFTW]]), [[Complex number|complex numbers]] and [[Parametric_polymorphism|generic]] [[Array_data_structure#Multidimensional_arrays|mult-dimensional array]] classes. In 2010 graphical capabilities have been added. Efforts to increase the performance of the technology were introduced in 2011. At the same time, a company was founded to continue the development. The technological goal is to establish the .NET framework as a feasible alternative to unmanaged [[Programming language C|languages]] for [[Mathematics and Computing Engineering|numeric computing]].


==Syntax==
Based on the foundation of efficient n-dimensional arrays, an optimization toolbox, high level HDF5 APIs and a number of high level statistics and machine learning algorithms are provided. ILNumerics allows the rapid development of interactive, production ready 2D and 3D dynamic visualizations, based on [[scene graph|scene graphs]] and rendered on Windows Forms, OpenGL, GDI+ and SVG.
ILNumerics implements base functionality frequently needed for application development in technical areas: N-dimensional arrays, [[complex number]]s, [[linear algebra]], [[Fast Fourier transform|FFT]] and [[Chart|plotting]] [[GUI widget|controls]] (2D and [[3D computer graphics|3D]]). Higher level functionality is provided by toolboxes for interpolation, optimization, statistics, HDF5 and machine learning. The ILNumerics DSL is embedded into .NET. Computational algorithms are formulated using any [[List of CLI languages|CLI language]]. However, only [[C-Sharp|C#]] and [[Visual_Basic_.NET|Visual Basic]] are officially supported. Due to the [[type safety|strong type system]] of the .NET framework algorithms created with ILNumerics are strongly typed. This deviates from the syntax of [[Matlab|alternatives]], which are often weakly typed and therefore easier to adopt.


==Graphics==
ILNumerics features several convenient debug options. The ILNumerics Array Visualizer is integrated into [[Visual Studio]] and allows the graphical inspection of mathematical objects while stepping through the code. Due to its developer efficiency, ILNumerics is known as [[Rapid application development|RAD]] tool for technical application development.
A [[scene graph|scene graph]] is used in ILNumerics to realize graphical output. Interactive 2D and 3D plots are used in Windows Forms applications. Hardware accelerated drawing is available via [[OpenGL]]. A software renderer is provided for legacy hardware, based on GDI+ and SVG.

==IDE Integration==
ILNumerics is distributed as an extension to [[Visual Studio]]. It adds a tool window to the IDE for the graphical inspection of mathematical objects while stepping through user code.


==Performance==
==Performance==
Since ILNumerics comes as a [[Assembly (CLI)|CLI assembly]], it targets [[Common Language Infrastructure]] (CLI) applications. Just like [[Java (programming language)|Java]] - those frameworks are often criticized for not being suitable for numerical computations. Reasons are the [[Random access memory|memory]] management by a [[Garbage collection (computer science)|garbage collector]] and the [[Common Intermediate Language|intermediate language]] execution. Nevertheless, due to efficient memory management (pooling), the performance of ILNumerics algorithms beat the speed of many competing [[Matlab|frameworks]] by factors.<ref>http://ilnumerics.net/blog/fast-faster-performance-comparison-c-ilnumerics-fortran-matlab-and-numpy-part-i/</ref> Linear algebra routines rely on processor specific optimized versions of [[LAPACK]] and [[BLAS]], which further increases performance and reliability of computational results. All internal functions are parallelized. The efficiency allows the use for '[[High-performance computing|numbercrunching]]' applications, which would otherwise only be suitable for [[Fortran]] - yet providing much higher implementational convenience.
Since ILNumerics comes as a [[Assembly (CLI)|CLI assembly]], it targets [[Common Language Infrastructure]] (CLI) applications. Just like [[Java (programming language)|Java]] - those frameworks are often criticized for not being suitable for numerical computations. Reasons are the [[Random access memory|memory]] management by a [[Garbage collection (computer science)|garbage collector]] and the [[Common Intermediate Language|intermediate language]] execution. ILNumerics approaches these limitations by optimizing the memory management via pooling of large array objects. Furthermore, it parallelizes numerical operations on [[Multicore programming|multicore]] machines and performs [[Loop unrolling|loop unrolling]] and [[Cache-oblivious algorithm|cache optimizations]]. Further speed-up is gained by the [[Bounds-checking elimination|removal of bound checks]] on array accesses. In the sum these methods allow ILNumerics algorithms to compete with unmanaged languages [[Fortran|compilers]] in terms of execution speed<ref>http://ilnumerics.net/blog/fast-faster-performance-comparison-c-ilnumerics-fortran-matlab-and-numpy-part-i/</ref>. Linear algebra routines rely on processor specific optimized versions of [[LAPACK]] and [[BLAS]].


==History==
== Alternatives ==
{{See also|list of numerical analysis software|comparison of numerical analysis software}}
ILNumerics started in 2006 and serves its community with high performance fundamental math classes since. In 2007 ILNumerics won the [[BASTA! Innovation Awards 2007]]<ref>[http://basta-award.de BASTA! Innovation Award 2007]</ref> as most innovative .NET project in [[Germany]], [[Switzerland]] and [[Austria]]. After 6 years of open source development, the project added a closed source, proprietary license in 2011, aiming business and academic developers at the same time.

Some algebraic systems come with compiler extensions for native code/C code generation. One example here is Matlab's Compiler. In conjunction with the .NET Builder of the same vendor it is possible to interface .NET applications. Other projects aim the .NET platform, namely: dnanalytics, NMath, NAG and Visual Numerics' IMSL.
A list of alternatives on other platforms include [[NumPy]]/[[SciPy]], [[R (programming language)|R]] and the [[Julia (programming language)|Julia]], all of which require their own compiler infrastructure to be installed and distributed. Library extensions exist for [[C++]] and [[JavaScript]] with [[IT++]], [[Boost]] and [http://www.numericjs.com/ Numeric.js].


==See also==
==See also==
Line 49: Line 61:


==External links==
==External links==
*[http://ilnumerics.net ILNumerics website] (proprietary software)
*[http://ilnumerics.net ILNumerics website]


{{DEFAULTSORT:Ilnumerics.Net}}
{{DEFAULTSORT:Ilnumerics.Net}}

Revision as of 14:25, 24 November 2015

ILNumerics is a mathematical class library for Common Language Infrastructure (CLI) developers and a domain specific language (DSL) for the implementation of numerical algorithms on the .NET platform. While algebra systems with graphical user interfaces focus on prototyping of algorithms, implementation of such algorithms into distribution-ready applications is done using development environments and general purpose programming languages (GPL). ILNumerics is an extension to Visual Studio and aims at supporting the creation of technical applications based on .NET.

ILNumerics
Developer(s)ILNumerics
Stable release
v4.8 / June 11, 2015 (2015-06-11)
Written inC#, Visual Basic
Operating system.NET Framework/ Mono, Windows
PlatformIA-32, x86-64
TypeTechnical computing, Mathematical software
Licenseproprietary,GPLv3
Websiteilnumerics.net
File:ILPanel graphical plots in a Windows application.png
Shows the use of ILNumerics ILPanel for 2D plot creation inside Windows Forms applications.
File:Optimization application finding the minimium of the camel 3 function.png
Image created with ILNumerics Optimization Toolbox in a Windows Forms application.

History

ILNumerics started in 2006 as an open source project, originating from the Technical University of Berlin. In 2007 ILNumerics won the BASTA! Innovation Awards 2007[1] as most innovative .NET project in Germany, Switzerland and Austria. After 6 years of open source development, the project added a closed source, proprietary license in 2011, aiming business and academic developers at the same time. The project quickly gained popularity[2][3][4]. The .NET framework was selected as a managed foundation, since earlier attempts on the Java platform had been abandoned[5] due to technical limitations[6]. Similarly, the .NET framework has not been designed with the focus on requirements of technical application development. ILNumerics added interfaces to popular codes (LAPACK, FFTW), complex numbers and generic mult-dimensional array classes. In 2010 graphical capabilities have been added. Efforts to increase the performance of the technology were introduced in 2011. At the same time, a company was founded to continue the development. The technological goal is to establish the .NET framework as a feasible alternative to unmanaged languages for numeric computing.

Syntax

ILNumerics implements base functionality frequently needed for application development in technical areas: N-dimensional arrays, complex numbers, linear algebra, FFT and plotting controls (2D and 3D). Higher level functionality is provided by toolboxes for interpolation, optimization, statistics, HDF5 and machine learning. The ILNumerics DSL is embedded into .NET. Computational algorithms are formulated using any CLI language. However, only C# and Visual Basic are officially supported. Due to the strong type system of the .NET framework algorithms created with ILNumerics are strongly typed. This deviates from the syntax of alternatives, which are often weakly typed and therefore easier to adopt.

Graphics

A scene graph is used in ILNumerics to realize graphical output. Interactive 2D and 3D plots are used in Windows Forms applications. Hardware accelerated drawing is available via OpenGL. A software renderer is provided for legacy hardware, based on GDI+ and SVG.

IDE Integration

ILNumerics is distributed as an extension to Visual Studio. It adds a tool window to the IDE for the graphical inspection of mathematical objects while stepping through user code.

Performance

Since ILNumerics comes as a CLI assembly, it targets Common Language Infrastructure (CLI) applications. Just like Java - those frameworks are often criticized for not being suitable for numerical computations. Reasons are the memory management by a garbage collector and the intermediate language execution. ILNumerics approaches these limitations by optimizing the memory management via pooling of large array objects. Furthermore, it parallelizes numerical operations on multicore machines and performs loop unrolling and cache optimizations. Further speed-up is gained by the removal of bound checks on array accesses. In the sum these methods allow ILNumerics algorithms to compete with unmanaged languages compilers in terms of execution speed[7]. Linear algebra routines rely on processor specific optimized versions of LAPACK and BLAS.

Alternatives

Some algebraic systems come with compiler extensions for native code/C code generation. One example here is Matlab's Compiler. In conjunction with the .NET Builder of the same vendor it is possible to interface .NET applications. Other projects aim the .NET platform, namely: dnanalytics, NMath, NAG and Visual Numerics' IMSL. A list of alternatives on other platforms include NumPy/SciPy, R and the Julia, all of which require their own compiler infrastructure to be installed and distributed. Library extensions exist for C++ and JavaScript with IT++, Boost and Numeric.js.

See also

References