What is MtxVec for Visual Studio .NET?
MtxVec is a real High Performance object-oriented numerical library covering linear algebra, optimization, statistics, expression evaluators and many other frequently used math functions. MtxVec can deliver very high single and double precision floating point performance. It takes advantage of SSE2/SSE3/SSE4 vectorized instruction sets of Intels latest CPU's, supports multi-core CPU's and symmetric multiprocessing for many of its functions. All the performance sensitive processing of the MtxVec is performed in the unmanaged code. All the unmanaged code interfaces have been very carefully designed and the library is able to deliver nearly the same performance .NET in compare to its C++ version. The final result is the top notch performance of unmanaged code available within a managed environment in a way safe for the programmer. MtxVec features extensive test database, explicit range checking and and is very suitable for applications requiring a lot of memory for keeping large matrices and vectors in memory. When required it uses the unmanaged memory and all the load of data structures for which the default .NET garbage collector was not optimized for, is routed directly to the operating system.
Why use MtxVec Library for .NET when Visual Studio already has math functions?
There are two main reasons. Speed and functionality. If your application needs to deliver real time mathematical results, you need speed. If your application needs to implement special, less known mathematical algorithms, not covered in standard math libraries, you need functionality. In either case MtxVec is a good choice.
Who uses these libraries?
Users include scientists from research labs at Universities, corporate development teams for process control applications and other commercial application designers. We use these libraries ourselfs on each project we work on. This helps improve and further develope the library. The fact that we use the product that we make, ensures that the concept and user interface really does suit the actual programmer.
How does it work?
From the users point of view it's as easy as possible. After adding the assembly to the toolbox and adding the "using Dew.Math;" command to the C# source file, the library is ready to be used. We have included a large number of examples in the help files and also as executables.
Wont the use of unmanaged code slow down the application?
The interface to unmanaged code is made in a very effective way. For applications working with vectors and matrices, the performance of the memory management and consequently the performance of the .NET application as a whole will improve substantially.
Are MtxVec object still garbage collected?
Yes. GC is fully supported for fast application development, but where a need arises, MtxVec can bypass the GC to deliver higher performance and lower usage of memory.
What is the advantage of MtxVec against managed code math libraries?
There are several advantages. Well tested code which did not have to be translated in to a new language possibly introducing new bugs is one. Another advantage is performance, this includes both the direct execution performance and reduced memory usage when solving the same kind of problems. The performance differences is really by "orders of magnitude". The main aim of MtxVec so to leave .NET developers the productivity, without paying with the performance.
Do I need to buy Intel MKL for MtxVec to work?
No. MtxVec uses some functions from MKL library and an additional license is not required.
Will MtxVec run on Linux?
The support for Linux is still an open option and can happen if there will be enough demand.
What about support for 64 bits?
Which .NET framework versions are supported?
All versions from .NET v2.0.
Which compilers does MtxVec support?
Will there be a C# source version of MtxVec available?
Large parts of MtxVec are written in C#. This includes all the UI classes. Future versions will use even more C# code.
Do MtxVec assemblies pass PEVerify test?
Yes. They use unmanaged code though, because it is not possible to write assembler in .NET.
Wont MtxVec become obsolete once .NET compilers are improved?
Even the best x86 native compilers today still use specialy optimized libraries. And there are two things that make MtxVec special: high quality code of a vast array of different numerical algorithms and speed. While in theory everything is possible, the reality of today shows astounding performance gains (10-30x) for numerical applications which use MtxVec against custom code. The only way to expirience those gains, is to try the library.