This guide documents the procedures for the deployment and
configuration of applications built using the
Extreme Optimization Numerical
Libraries for .NET
.
The following files may be distributed as part of your
application:
All binary files (extension .dll) in the
<placeholder xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">installDir</placeholder>/bin
folder
and its subfolders.
Not all redistributable files need to be installed with your
application. In fact, most installations will require just the main assembly,
with optionally two or three more native assemblies.
All installations require the
Extreme.Numerics.dll
assembly.
If you use single-precision linear algebra, or any of the classes
that are specialized for single-precision floating-point numbers,
you also require
Extreme.Numerics.SinglePrecision.dll.
If you use linear algebra for elements other than single and double
precision numbers, or any of the generic classes, you also require
Extreme.Numerics.Generic.dll.
The Extreme Optimization Numerical Libraries for .NET
also contain several sets of highly optimized native libraries built on
Intel®’s Math Kernel Library. There is a total of 18 files, including 16 .NET
assemblies and 2 supporting dll’s that fall into this category.
You only need to deploy the assemblies you actually use. For
example, most applications will not use any of the single precision types, and
so won’t require the *.SinglePrecision.*
assemblies. The native libraries only give an advantage when working
with larger problems. If your problems are relatively small, the native
libraries may be of no benefit to you and there is no reason to deploy them
with your application.
There are two kinds of native assemblies. They differ in the method
used for calling into native code.
Mixed-mode assemblies are written in C++/CLI and provide
the best performance because of the minimal overhead when calling
native code. Mixed-mode assemblies are only supported on the
classic .NET Framework on Windows. Separate assemblies work with
version 3.5 of the .NET Framework, or version 4.0 or later.
The mixed-mode native assemblies follow this naming scheme:
Extreme.category.
.NET version
.platform.parallelization.dll
The meaning of the parts is the following:
- category
the type of computations performed by the
assembly. There are currently 4 possibilities:
- Extreme.Numerics:
vector and matrix functions, FFT and other DSP functions
for double-precision numbers.
- Extreme.Numerics.SinglePrecision:
vector and matrix functions, FFT and other DSP functions
for double-precision numbers.
- .NET version
-
currently, this is always Net40,
indicating that the library requires version 4.0 or later of the .NET runtime.
- Platform
-
indicates the processor architecture for which
the code was optimized. Possible values are x86 and x64.
- Parallelization
-
indicates whether the assembly uses parallelization.
Possible values are serial and parallel.
In addition, there are two supporting assemblies, one for each
platform, that contain the shared threading library for the Intel Math Kernel
Libraries. Both are called libiomp5md.dll. They can be found
in the x86 and x64 folders under
the bin folder. This file is needed by the parallel
version of the native libraries.
Finally, you need to decide on whether to deploy the sequential
or parallel version of the libraries. As a rule:
If your application is multi-threaded, and calls the
linear algebra or FFT functions of the
Extreme Optimization Numerical Libraries for .NET
from multiple threads, you should use the serial library.
If your application only calls the linear algebra or FFT functions of the
Extreme Optimization Numerical Libraries for .NET
from a single thread, you can safely use the parallel
library.
P/Invoke based libraries are written in native C++ and
are called from managed code using Platform Invoke (P/Invoke).
The name of the dynamic link library is hard-coded in the main
assembly.
It is called
The correct version is found based on the platform.
The single-precision native code is in the
Extreme.Numerics.Mkl.SinglePrecision.dll
library.
It requires the
Extreme.Numerics.SinglePrecision
assembly as well.