What GPU should I buy for NMath Premium?

All NVIDIA GPU’s have their roots in processing graphical entities and therefore are heavily optimized for float ( single precision ) types. All modern NVIDIA GPU’s can run with double precision types but their performance will fall by more than a factor of 2X when moving from single to double precision types. For example, dropping from double precision to single precision will increase the computational through put by 32X on the GTX GPU architectures. The Tesla class of GPU’s suffer a less dramatic performance drop when moving from single to double precision. Therefore, if double precision computation is necessary and the best possible performance is needed the Tesla class GPU should be used. The Quattro series and GTX series GPU’s use the same Maxwell chip set, but for computational uses, as with the NMath library, the GTX series GPU is best. The Quattro doesn’t offer any computational advantages, is more costly, and are specifically designed for accelerating workstation graphics of CAD or similar applications. As of 2016 the following GPU’s will offer the best performance return for the cost: GeForce GTX980, GeForce GTX980 Ti, or a GeForce GTX980 Titian X or Z ( the latter has 2688 more cores and a higher memory bandwidth). See http://www.geforce.com/hardware for all of the GTX specifications.

How do I know NMath is correct & accurate?

All NMath libraries have extensive, automated unit test suites for all NMath types and methods. Basic math operations are performed by the native Intel Math Kernel Library (included with NMath). Higher level operations are tested against data from other commercial products and published sources. Each library must pass its associated tests prior to any release, protecting earlier code from being accidentally harmed during revisions. NMath is used and trusted by many industry leading companies.

Can I install my copy of NMath on more than one machine?

Yes. You can install a licensed copy of an NMath library on more than one machine. We understand that developers may need to use more than one machine for their work.

Does your licensing policy require runtime or distribution fees?

No. There are no runtime fees or royalties. Please see the license agreement for more information.

Do we need to buy a license for each developer working with NMath?

Yes. Licenses are sold per developer seat. Each developer writing code using an NMath library requires a license. For example, if 5 developers are writing an application, and only 3 are doing most of the intense math work, all 5 must have a license.

Which versions of the .NET Framework does NMath support?

The prebuilt NMath libraries support .NET Framework 4.0 Client Profile or higher. (The .NET Framework Client Profile is a subset of the .NET Framework that is optimized for client applications.) Prebuilt assemblies for .NET 3.5 are available upon request.

Is NMath “pure” .NET?

The answer depends somewhat on your definition of “pure .NET”. NMath is written entirely in C#. For better performance of basic linear algebra operations, however, NMath relies on the native Intel Math Kernel Library (included with NMath). All memory used by native code is allocated from the managed heap.

Does NMath include source code?

Source code can be purchased with team or site licenses.

When using NMath in a multithreaded environment, my application terminates with the following error message:

OMP Run-time library: currently configured to support a maximum of 32 threads. OMP abort: Please specify a larger value via the KMP_ALL_THREADS environment variable to raise this limit.

This occurs even though I never have more than 32 threads active at one time.

This problem only occurs in older versions of NMath. If you have annual maintenance contract, you can upgrade to the latest code at no additional charge.

Alternatively, raise the limit specified by KMP_ALL_THREADS appropriately–for example, “set KMP_ALL_THREADS = 100”–or design your application to use the System.Threading.ThreadPool class which maintains a pool of worker threads, and has a default limit of 25 threads per available processor.