Announcing MXLib Version 0.6.0 - A C++ Wrapper for NPP (and IPP)

Download it at:

NOTE: The subversion repository won’t be up-to-date until 09/06/14. Use the file on the Files page until then.

MXLib is a C++ wrapper around the Intel® Integrated Performance Primitives (IPP) library and NVidia NPP CUDA library. You can use either IPP code (or a subset of functions that do not require IPP) on the CPU side, or use NPP/CUDA on the GPU side, or use both together. The function syntax is similar to that found in MatLab and the library is designed to make it easy to port your code from MatLab to C++. The idea is to provide Scientists, Engineers, Researchers and other non full-time programmers an easy to use, high performance library of functions.

  • Most functions can be accessed with either C++ style call or a MatLab® like call. The MatLab® like function calls make it easy to port research code from a MatLab® to C++. In fact, for many projects, you can copy your MatLab® code, paste it into your C++ editor, make a few changes (adding object instantiations, work around certain MatLab® syntax structures that aren’t supported by C++, etc.) and you’re done!
  • Functions that use both CPU-based and GPU-based optimizations. The functions for the two sides use almost identical syntax, although for this release the GPU functions are limited to basic functionality; Constructors, Destructors, Copying, Setters, Getters, Arithmetic functions, etc.
  • Automatically handles memory allocation/de-allocation and ensures that the NPP/IPP functions are called properly. Memory problems and calling NPP/IPP functions with data sets with mismatched sizes are common ways that problems occur when using NPP or IPP.
  • Greatly extends the functionality of IPP and NPP. Adds support for 64-bit data types Ipp64s, Ipp64sc, Ipp64f, Ipp64fc, Npp64s, Npp64sc, Npp64f, Npp64fc ) for matrices/images and also adds functionality found in a MatLab®, but not found in NPP or IPP.
  • Nearly seamless integration of complex and real data types into the same template objects greatly decreasing the complexity of the code.
  • Two basic object types; Vectors and Matrices. For some projects, most of your calculations are done using vectors (signal processing), others require more work with matrices. Functions for moving data between the two object types are included.
  • Functions for moving data between your C++ project and MatLab® are included.
  • Formatted console Print() functions to make it easier to examine your data.
  • Makes it easy to access IPP and NPP functions that have not yet been integrated into MXLib. Let MXLib handle the memory allocation/de-allocation for you then access the data inside the MXLib objects when you need to make your own call to an IPP or NPP function.
  • Makes it much easier to work with complex data types in IPP and NPP by adding arithmetic operators, abs(), angle(), set to zero, etc. functions.
  • Uses exception handling that automatically types to the console where the exception or IPP/NPP error occurred and the chain of functions that led to the error similar to how errors are displayed in MatLab®.
  • IPP is now optional!!! Most of the CPU side code will now run without IPP. Mostly what is FFT/CONV/CORR/FILTER/ImResize.

And MXLib is not done. There will be a quick turnaround for the next release (approx. on 10/01/14). There will be little additional functionality in the next release, but what is planned (in order of importance) is:

  • Batch/Bash installation for the different configurations.
  • NVidia Jetson TK1 development board support!!!
  • MXLib will be changed over to build libraries instead of just using header files.

Please let me know if you have any problems, especially with installation/getting started. I’ve squashed all the bugs I can find, but it’s not perfect (what code is?).

Have a lot of fun!!