Deployment Guide

This guide documents the procedures for the deployment and configuration of applications built using the Extreme Optimization Numerical Libraries for .NET .

Redistributable files

The following files may be distributed as part of your application: All binary files (extension .dll) in the

C#
<placeholder xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">installDir</placeholder>/bin
folder and its subfolders.

What to deploy

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.

Extreme Numerics.NET also contains 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

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 Extreme Numerics.NET from multiple threads, you should use the serial library.

  • If your application only calls the linear algebra or FFT functions of Extreme Numerics.NET from a single thread, you can safely use the parallel library.

P/Invoke based libraries

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

C#
Extreme.Numerics
assembly. It is called
C#
Extreme.Numerics.Mkl.dll
The correct version is found based on the platform.

The single-precision native code is in the

C#
Extreme.Numerics.Mkl.SinglePrecision.dll
library. It requires the
C#
Extreme.Numerics.SinglePrecision
assembly as well.