Skip to main content

C++ Builder specific features of MtxVec

TVec and TMtx classes are written in Delphi and C++ Builder generates appropriate header files automatically. However C++ syntax allows more flexible language constructs than pascal. MtxVecCpp.h is designed to merge native C++ coding style and part of MtxVec library, which is coded in Delphi. C++ developers may easily declare vectors and matrices as local variables and enjoy the support for operator overloading.

Extra features for C++ developers

By analogy with smart pointers in C++, MtxVec library defines shell classes in MtxVecCpp.h Vector and Matrix for TVec and TMtx classes respectively. Pascal style forces to declare variables as below:


TVec* v;
CreateIt (v);

try {  
  v->Sin();
      } __finally {  FreeIt (v);}

C++ style looks much simpler:

{
Vector v;

v->Sin();

}

Constructor creates actual object, destructor releases it and operator ->() provides access to actual TVec object. Vector and Matrix classes use reference counting mechanism to optimize assignment operations and when working with subranges.

Introduced classes

Classes Vector, Matrix, SparseMatrix are smart shells for classes TVec, TMtx, TSparseMtx respectively. Classes CVector and CMatrix are defined to allow a more comfortable access to complex elements via the [ ] operator, but are otherwise identical as Vector and Matrix.

Examples of definitions:

Vector v1(10); // real vector of ten elements
Vector v2(10,true); // complex vector of ten elements
CVector v3(10); // complex vector of ten elements

Matrix m1(10,10); // real matrix 10x10
Matrix m2(10,10,true); // complex matrix 10x10
CMatrix m3(10,10); // complex matrix 10x10

Operator overloading

Classes Vector and Matrix overload many operators: +, -, *, /, =, etc. They enable the use of vectors and matrices in arithmetic expressions next to integers, doubles and complex numbers.

Vector v(10); // vector of ten elements;
v=1.23; // assign 1.23 to each element of vector
v=v+v; // double each element 
v=v*2; // double each element again
v*=2; // and again

To get access to elements of the vector we can use operator[](int):

v[0] = v[1] + v[2];

or

v.Values(0) = v.Values(1) + v.Values(2);

Matrix requires the long form to access the elements:

m.Values(0,0) = m.Values(1,1)+ m.Values(1,2);

Differentiating between elements and objects

All operators, which are defined for Vector and Matrix classes, work with elements. The next expression applies multiplication element by element instead of multiplying two matrices:

Matrix a(2,2),b(2,2),c;

c = a * b;

To apply multiplication of two matrices its necessary to call method TMtx::Mul:

c->Mul(a,b);

Subranges

MtxVec library allows the programmer to work with a selected range of the vector or matrix. For this purpose the following functions exist: SetSubrange / SetSubindex / SetFullRange. However, C++ syntax allows the use of more compact constructs. For example, operator()(int,int) of Vector represents a view of a part of the source vector:

Vector v(6);
v->Ramp(); // v = [0,1,2,3,4,5]
v(0,1) = v(2,3) + v(4,5); // v[0]=v[2]+v[4], v[1]=[3]+v[4]
// v = [6,8,2,3,4,5]

The good thing about this is that subranges are implemented in a manner so efficient that the traditional loop based code will in most cases execute substantially slower. Another example is operator()(int) of Matrix, which obtains a vector view of a row of the matrix:

Matrix m(3,3); // matrix 3x3
m->SetZero(); // set all elements of matrix to zero
m(1)->Ramp(1,1); // set second row to 1,2,3 (TVec method!)
// m is (0,0,0,
// 1,2,3,
// 0,0,0);

Operator ()(void) maps the whole matrix to vector:

Matrix m(3,3); // matrix 3x3
m()->Ramp(); // m =[0,1,2,
//3,4,5,
//6,7,8];
m() *= 2; // double each element 
// m = [0,2,4,
// 6,8,10,
// 12,14,16];

Methods and functions

Almost all methods can be replaced with functions. The next line:

v->Sin(x);

Is equivalent to:

y = Sin(x);

All standard function from <math> header file also defined in MtxVecCpp.h. 
So, the next syntax is allowed as well:

y = sin(x);

Range Checking

All Value access methods are range checked, when debugging is active. MtxVecCPP.h holds the following definition:

#ifdef _DEBUG
#define MTXVEC_RANGE_CHECKING 1
#else
#undef MTXVEC_RANGE_CHECKING
#endif

Active range checking can have a noticeable effect on performance

MtxVec Release History

List of new features for .NET and .NET Core release v6.2.0 (April 2024):

  • Core product:
  • Updated for Intel MKL and Intel IPP to OneAPI v2023.2
  • Updated for Visual Studio 2022, v17.9.3
  • Updated for TeeChart.NET release version 15.3.2024
  • Updated Debugger Visualizers for Visual Studio 2022, v17.6 and newer
  • Added support for .NET Core v7 and v8
  • Added TVecInt.Concat.
  • Added MinRows, MinCols, MaxMinRows, MaxMinCols to VectorInt / MatrixInt, Vector / Matrix
  • Added MinEvery, MaxEvery to both VectorInt / MatrixInt, Vector / Matrix.
  • Added TMtx.ScaleRows, TMtx.ScaleCols.
  • Added Math387.TFifoCriticalSection.A fair critical section implemention.All threads enter in Fifo order.
  • Added Math387.TFairSemaphoreSection.A fair critical section that allows at most N concurrent threads.
  • Updated online and offline documentation.
  • Updated Nuget package support to v6.9.
  • Improved compatibility for .NET Core Winform(Preview) designer avoiding serialization of delegates
  • Added support for XML serialization for TVec, TVecInt, TMtx, TMtxInt, Vector, VectorInt, Matrix, MatrixInt for all .NET frameworks
  • Added support for JSON serialization for TVec, TVecInt, TMtx, TMtxInt, Vector, VectorInt, Matrix, MatrixInt for .NET Core v7 and newer

Speed:

  • Much faster implementation of TMtx.TensorProd(const Vec1, Vec2: TVec).
  • Much faster TVec.Sqrt. Complex vectorized Sqrt speeded up by roughly 10x in compare to Intel VML.
  • Introduces first use of a fair critical section for MtxVec object cache and FFT descriptor cache.
  • First release to be compiled with latest Intel OneAPI DPC++ and Fortran compilers.
  • Updated FFT descriptors and FFT storage format for the new Intel MKL API.Only CCS storage is now available. The layout of 2D FFT from / to "real" results has changed.
  • Important: Only 64bit libraries are expected to receive performance improvements in the future!

Bugs fixed:

  • Vectorized IntPower function
  • TMtx.BandedToDense function.
  • Object cache was missing critical section, when not using super-conductive code path.
  • Polynoms.IIRFilter fix for missing init of DelayLine, when not provided by user.Parameter was introduced with recent ARIMA updates.
  • Polynoms.DeConv fixed because of dependancy upon Polynoms.IIRFilter.
  • TMtxVec.NormL2 fixed for complex, single precision and "core" variant.
  • Implemented Lockless(never enters sleep(..)) TMtxVecController.MarkThread and TMtxVecController.UnMarkThread.The peformance gain grows with thread count.This speeds up the threading library when calling DoForLoop method.
  • Object cache is now using TLS region (Thread Local Storage), to store its memory pool index.This progressively speeds up object allocation, when using more than 16 threads with the TMtxForLoop threading library.
  • Added BlockGranularity addressing threading with high turbo clock frequencies and Intel Alder Lake with P + E cores. (asymetric multi - processing)
  • Optimized critical-sections used for thread synchronisation for high thread count.
  • The memory cache of TVecInt and TMtxInt was not active and this caused performance degradation in the case of threading.
  • Garbage collector collected VectorInt and MatrixInt vars, even if they were used. They are persisting now.

Changes and new features of MtxVec v6.2.0  (November 2023):

  • Added support for RAD Studio Athens 12.0 release
  • Updated for Intel MKL and Intel IPP to OneAPI v2023.2
  • Added TVecInt.Concat.
  • Added MinRows, MinCols, MaxMinRows, MaxMinCols to VectorInt/MatrixInt, Vector/Matrix
  • Added MinEvery, MaxEvery to both VectorInt/MatrixInt, Vector/Matrix
  • Added TMtx.ScaleRows, TMtx.ScaleCols.
  • Added Math387.TFifoCriticalSection. A fair critical section implemention. All threads enter in Fifo order.
  • Added Math387.TFairSemaphoreSection. A fair critical section that allows at most N concurrent threads.
  • Upgraded FMX variant of TMtxGridSeries to match implementation of the VCL version.

Speed:

  • Much faster implementation of TMtx.TensorProd(const Vec1, Vec2: TVec).
  • Much faster TVec.Sqrt. Complex vectorized Sqrt speeded up by roughly 10x in compare to Intel VML.

Bugs fixed:

  • Vectorized IntPower function
  • TMtx.BandedToDense function.
  • Move function Len parameter not typecasted to Int64. Product wide fix.

Changes and new features of MtxVec v6.1.1  (January 2023):

  • Introduces first use of a fair critical section for MtxVec object cache and FFT descriptor cache.
  • First release to be compiled with latest Intel OneAPI DPC++ and Fortran compilers.
  • Updated to latest Intel MKL and IPP libraries.
  • Updated FFT descriptors and FFT storage format for the new Intel MKL API. Only CCS storage is now available. The layout of 2D FFT from/to "real" results has changed.
  • Important: Only 64bit libraries are expected to receive performance improvements in the future!

Bugs fixed:

  • Object cache was missing critical section, when not using super-conductive code path.
  • Polynoms.IIRFilter fix for missing init of DelayLine, when not provided by user. Parameter was introduced with recent ARIMA updates.
  • Polynoms.DeConv fixed because of dependancy upon Polynoms.IIRFilter.
  • TMtxVec.NormL2 fixed for complex, single precision and "core" variant.
  • Fix for single threaded overload of MtxForLoop.ClusteredKNN.

Changes and new features of MtxVec v6.1.0  (June 2022):

  • Implemented Lockless (never enters sleep(..)) TMtxVecController.MarkThread and TMtxVecController.UnMarkThread. The peformance gain grows with thread count. This speeds up the threading library when calling DoForLoop method.
  • Object cache is now using TLS region (Thread Local Storage), to store its memory pool index. This progressively speeds up object allocation, when using more than 16 threads with the TMtxForLoop threading library.
  • Added BlockGranularity addressing threading with high turbo clock frequencies and Intel Alder Lake with P+E cores. (asymetric multi-processing)
  • Optimized critical-sections used for thread synchronisation for high thread count.
  • Android 11 tagged pointer support.
  • Brute-force exact K-NN algorithm on CPU with euclidian norm distance. Faster than KD-Tree, because it scales linearly with core count. Leads GPUs in price/performace by 4x especially in double precision. Can use AI accelerators used for NNs. Due to its performance a possible alternative to deep NNs. Located in MtxForLoop.ClusteredKNN. Up to 2000x faster than naive implementations for large problems.
  • Updated Intel MKL and Intel IPP to OneAPI v2022.2
  • Updated for Embarcadero Alexandria 11.1 release.

Bugs fixed:

  • When setting TMtxForLoop.ThreadCount, an Access Violation could be raised (thread race condition).
  • When launching TMtxForLoop thread execution, the call could deadlock (thread race condition).
  • The memory cache of TVecInt and TMtxInt was not active and this caused performance degradation in the case of threading.

Changes and new features of MtxVec v6.0.8  (February 2022):

  • Updated Linux64 shared libs with latest Intel OneAPI. The minimum GLIBC version required reduced to 2.14. RHEL 7.x, 8.x, 9.x is now supported.

Changes and new features of MtxVec v6.0.8  (January 2022):

  • Updated online and offline documentation.
  • New Select/Select2D and SelectIndex/SelectIndex2D properties for Vector/VectorInt and Matrix/MatrixInt types. Check out the additional new syntax for expressions.
  • Begun publishing videos for less known, but cool features, to YouTube.
  • Updated Nuget package support to v6.
  • Improved compatibility for .NET Core Winform (Preview) designer avoiding serialization of delegates.

Changes and new features of MtxVec v6.0.6  (December 2021):

  • Updated Linux64 shared libs with latest Intel OneAPI. This time Lapack from Intel MKL is also included.
  • When deploying to Linux it now suffices to copy the libs to the same folder as the app without any extra rights or config requirements by adding -rpath=$ORIGIN linker switch and reducing shared lib dependancies.
  • Verified compatibility with FmxLinux. (MtxVec Demo application running on Ubuntu 20.04)
  • Updated build tool to include building for Apple M1 (OSX ARM 64) .
  • Updated demo applications for C++Builder including 64bit.
  • Restored compile with TTPRECISION define disabled.
  • Several bug fixes for the DewBuidTool.exe, used to rebuild packages for all platforms.

Changes and new features of MtxVec for .NET v6.0.6  (December 2021):

  • Included .NET Core v6 assemblies.
  • Updated for Visual Studio 2022.
  • Additional (LAPACK) performance libraries now available also for Linux.
  • Updated reference to Steema TeeChart to the latest version.

Changes and new features of MtxVec v6.0.6  (November 2021):

  • Updated with latest Intel OneAPI IPP and MKL (2021 Update 4) libs.
  • Fixed a bug affecting some functions with single precision in 64bit apps that caused invalid_instruction exception.

clMtxVec:

  • Added support for Open CL 3.0 (Intel and NVidia GPUs).
  • New options for reporting build errors of Open CL kernels.
  • Add new command queue Enque overload.
  • Added ability to read/write VectorInt/MatrixInt to/from GPU.
  • Added possibility to declare arbitrary size of clVector and clMatrix with GPU memory not from object cache.

Changes and new features of MtxVec v6.0.5  (September 2021):

  • Added support for RAD Studio 11.0.
  • Several bug fixes when allocating more than 2GB per vector/matrix.

Changes and new features of MtxVec for .NET v6.0.4 (July 2021):

  • Initial release of the MtxVec for .NET Core 5.0 rewritten in C#. MtxVec and its add-on packages are mirrored to C# and .NET Core framework from Delphi pascal source code by using propriety software. This allows us to maintain a single source code base and export to C# with a click of a button. Code depending on specific frameworks like VCL, FMX, Winforms, WPF etc.. is of course written separately.

Changes and new features of MtxVec v6.0.4 (May 2021):

  • Added dll version in to names of high performance libraries. Simplifies different versions to coexist on the same computer.
  • Added high performance shared libraries for Linux 64bit when using FireMonkey. The deployment is based on Intel OneAPI 2021 (Update 2). Achieves the same performance on Linux as on Windows.
  • Fixed performance issues related to TStringList and TStrings debugger visualizers. Especially for RAD Studio 10.4 it is recommended, to turn off visualizers provided by Embarcadero, which are currently not in use, to improve the debugging speed.
  • Minimum supported Delphi version has been raised to XE3.
  • Fixed a bug in ScatterByMask, when Src data vector had zero length.

Changes and new features of MtxVec v6.0.4 (March 2021):

  • Added TMtxVec.CapacityInElements,  TMtxVec.CapacityInBytes. Changed behaviour of TMtxVec.Capacity
  • Various minor fixes. (Demo applications, combinations of included dlls, Firemonkey,....)

Changes and new features of MtxVec v6.0.3 (August 2020):

  • Undoing Bug fix for TStringGrid due to Sydney 10.4 Patch #3.
  • Build Tool fix for "Concurrent precision", which failed for Stats Master and DSP Master, if enabled.
  • Added TVec.Hilbert algorithm variant.

Notes:

  • Noticed Delphi 64bit debugger limitation: Evaluations are limited to 132KB max. 32bit debugger has no limit. Bug reported to Embarcadero.
  • C++Debugger 10.4 Sydney still in difficult state even after Embarcadero Patch #3.

Changes and new features of MtxVec v6.0.2 (June 2020):

  • Bug fix for TVec/TMtx/TMtxInt/TVecInt BinarySearch

Debugger Visualizers:

  • Greatly enhanced debugging stability and handling of nil and dangling pointers for Visualizers.
  • TStringList bug fix for 64bit compilers, which used wrong string length field size. (allows display of milions of strings in real time).
  • Array visualizers now also show variable storage precision.
  • Bug fix for TStringGrid in 10.4 used by the TStringList visualizers, which was showing empty grid (CustomDraw passes wrong TRect size).
  • Greatly enhanced visualizers on iOS64, OSX64 and Android 64. Full support for inline and variable inspection from Delphi for all types, including TStringList.
  • Updated TCplx visualizers for regional settings, where comma is used as a decimal separator.
  • Important: Due to poor C++Builder debugger capabilities, visualizers are not avilable for C++ apps in Sydney 10.4. All features are still functional for Berlin 10.1 classic C++ compiler and before.

Changes and new features of MtxVec v6.0.1 (June 2020):

  • Support for Sydney 10.4.
  • FireMonkey support for iOS and Android without ARC.
  • High speed dlls updated for Intel MKL/IPP/C++ (release 2020 Update 1)
  • Bug fix addressing C++Builder linker when using single precision functions from external dlls.
  • The build tool can now also build packages for OSX64, which uses external linker.
  • Added TMtxVecInt.CountIntRange function
  • Added TVecInt.GroupCountIteration function
  • Added TVecInt.GroupCount function
  • Added TVec.GroupSum function
  • Added TVec.GroupSumIteration function
  • Enhanced TMtxVec.Replace uses IPP version of ReplaceNAN
  • Added StudentRangeCDF for Studentized Range cumulative distribution
  • Added StudentRangeCDFInv for inverse Studentized Range cumulative distribution.

Changes and new features of MtxVec v6.0 (March 2020):

  • Combined run-time selectable floating point precision.
  • Adding C++Builder support across all features.
  • Minimum Windows version is Windows 7
  • Minimum VCL Delphi/C++Builder supported version raised to Rad Studio XE2
  • Minimum FireMonkey Delphi/C++Builder supported version raised to Rad Studio 10.2

Changes and new features of MtxVec v6.0 Pre-release (February 2020):

  • Updated for Rio 10.3 Update 3 and added support for Android64 bit.
  • Introduced  TMtxVec.FloatPrecision, which allows computational precision to be specified at run-time. (major new feature of MtxVec v6). The same algorithm written once, can be executed either in double or single precision, where it makes sense. Single precision variant can run up to 2x faster and use up to 2x less memory.
  • Enhanced SetSubRange routines and added SetSubRangeLevel, which now support nesting.

Changes and new features of MtxVec v5.4.1 (September 2019):

  • Updated for Rio 10.3 Update 2 and added support for OSX64 bit.
  • Introduced additional property to reduce memory allocation frequency: TMtxVec.Capacity, with similar behaviour as TList.Capacity
  • Bug fix for TMtxGridSeries on FireMonkey in the TeeChart editor.

Changes and new features of MtxVec v5.4 (January 2019):

  • Updated to latest version of Intel MKL, Intel IPP (release 2019).
  • Vectorized version for FindIndexes, FindMask and FindAndGather for TVec/TMtx and TVecInt/TMtxInt. Especially when using FindMask, speed improvement of 10x or more is possible when vectorizing if-then clauses.
  • Added example to MtxVec demo: "Vectorizing if-then with masks" to show how to use vectorized FindMask and FindIndexes.
  • Dll API has changed. To prevent version conflicts, the library names have new version number: 6. VC runtime library (msvcrt120.dll) is no longer needed.
  • MtxVec.Sparse6.dll has been joined in to MtxVec.Lapack6d.dll due to relatively much smaller size.
  • Added new example to MtxVec demo: "Memory channels" exploring options to speed up code that cant be vectorized at all or only partially.
  • Added single precision support to Pardiso sparse solver.
  • Added single precision support to Trust-Region optimization method.
  • Minimum Windows version increased to Windows 7 32bit.
  • Minimum instruction set increased to SSE3 (from SSE2).
  • Further increased number of routines with AVX-512 code path (by several dozens).

RndGenerators.pas

  • Added ability to save and load state of TRandomGenerator including the state of all the specified streams.
  • Added Uniform 32bit chunk and 64bit chunk random generators.
  • Added RandomMultinomial random generator
  • Greatly enhanced error checking and reporting for random generators.

Changes and new features of MtxVec v5.3.2 (December 2018):

  • Support for Rad Studio Rio 10.3.
  • Installer (Build Tool) support for all Delphi platforms.
  • CPU Affinity support for DoForLoop on Windows.
  • Optimization methods can now respond to a "stop" signal when running in its own thread. This can be helpfull, if the optimization process would deadlock or run too long.
  • Various FireMonkey related fixes and refinments.

Changes and new features of MtxVec v5.3.1 (January 2018):

  • Support for Linux on Rad Studio Tokyo 10.2. (Update 2) with MtxVec Core. The following units are supported on Linux: Math387, MtxVecBase, MtxParseClass, MtxParseExpr, MtxParseOperator, MtxParseProbabilities, Blas, Lapack, lapack_dfti, MtxExpr, MtxExprInt, MtxForLoop, MtxVecInt, MtxVecTools, Optimization, Polynoms, Probabilities.
  • Bug fix for concurrent precision build (double and single precision), where RegisterClass was called twice with the same type.
  • Bug fix for TVecInt.BitUnpack when bit count was less than 32.
  • Modifed SumOfSquares and Standard Deviation for greater numerical accuracy and about 50% higher speed.

Expression parser:

  • Enabled "Integer overflow" and "Integer Division By Zero" error messages.
  • Integer math is now based on Int64.
  • Bug fixes for sqr and sqrt when param was integer.

Changes and new features of MtxVec v5.3 (November 2017):

  • TVec/TVecInt and TMtx/TMtx received upgrade of ValueToStrings for fixed width font output with headers. Usefull for command line printout of small matrices.

Expression parser

  • Added ability for "colon range" autocomplete: a(2:) = b; //short for a(2:(2+Length(b)) = b;
  • Added "Edit and Continue" type of debugging support for the script
  • Added "Tooltips" for variable evaluation during debugging of the script.
  • File read/write and some string management routines added to the expression parser.
  • Much improved example code how to handle spreadsheet like data.
  • Several bugs fixed.

Changes and new features of MtxVec v5.3 (October 2017):

  • Added support for Apple Acccelerate framework on iOS and macOS. Includes accelerated versions of FFT, BLAS 1,2,3 and Lapack.
  • Support for complex-number Lapack on iOS and OSX for MtxVec Core Edition.
  • Substantial improvement of speed of Math functions: sin, cos, log, exp,.. on Android, iOS and OS X. Math387 now bypasses default Delphi System unit math functions. Vectorized versions use the Accelerate framework on the iOSand OS X. Average speedup is about 20x.
  • Added support for TMtxInt and Matrix to the Debugger Visualizer.
  • Debugger Visualizer bug fix, which helps more variables to be successfully evaluated.

Expression parser

  • Added support for [1, 2 ; 3, 4] for vector/matrix concatenation/initialization.
  • Added support for "if-else", "while" and "for-loop" clauses.
  • Added support for "break" and "continue" clauses.
  • Added support for strings and custom objects.
  • Added string grid adaptor, which enables reading and writing from an arbitrary string grid like object.
  • Added support for empty lines and comments.
  • Command line printout can be surpressed by specifying ";" at the end of the line.
  • Further performance optimization for single line and multi-line expression evaluation by about 2x.
  • Expressions are now case-sensitive, but function aliases are allowed (Tan() for tan() for example).
  • Added one new demo for demonstrating the new features of the parser.
  • More automated tests have been implemented
  • All features are available on Windows, macOS, Android and iOS.
  • End user summary can be found here

 

Changes and new features of MtxVec v5.2 (May 2017):

  • Added integer matrix (TMtxInt and MatrixInt) covering 108+ overloaded functions
  • Added TVec.BinarySearch and TMtx.BinarySearch for exact and nearest index on sorted data
  • Added 80 new optimized functions for integer math used by TVecInt and TMtxInt
  • Added ThreadIndex parameter to the MtxForLoop threaded function type
  • Support for Rad Studio Tokyo XE 10.2, VCL and FMX

Expression Parser

  • Added integer, integer vector, integer matrix, boolean, boolean vector and boolean matrix types.
  • Support for funtions with multiple results: (a,b,c....) = fun(d)
  • Added all functions from Probabilities.pas to the expression parser.
  • Added large set of functions from MtxVec.pas to the expression parser, like FFT, FFT2D, SVD, etc..
  • Total of 300+ functions and operators now available to the expression parser.
  • Fixed a number of defects and improved error reporting. Performance optimization.
  • Total code base for the parser increased by about 3x.

 

Changes and new features of MtxVec v5.1.1 (September 2016):

  • Added TVecInt.ThresholdGT_LT
  • Added ThreshAbsGt and ThreshAbsLt to TVecInt, TVec and TMtx,
  • Added TVecInt.BinarySearch,TVecInt.Find,
  • Added TVecInt.ThresholdLT/TVecInt.ThresholdGT
  • Updated Intel MKL and Intel IPP related code to latest revision.
  • Fixed a problem with MKL VML user side multi-threading. (MtxVec.Vmld.dll)
  • Fix for TMtxComponentList.Count when reducing value.
  • TMtxGridSeries. Increased color count from 3 to 5. Greatly increased the possibility of possible color combinations palette designs.
  • TMtxGridSeries. Improved support for fixed user-specified scale.

Changes and new features of MtxVec v5.1 (May 2016)::

  • Support for Delphi and C++Builder Berlin 10.1
  • Added TMtx.Filter2D usefull for 2D convolution of images.
  • Improved performance of math routines via Intel IPP v9 update.
  • Improved performance of Lapack routines via latest Intel MKL update.
  • Support for old and new 32bit and 64bit C++Builder compilers. With RAD Studio 10.1 Berlin the C++ code performance is much improved.

Changes and new features of MtxVec v5.03 (September 2015)::

  • Support for Delphi and C++Builder Seattle 10.
  • Added support for OS X and iOS with Delphi 10 to MtxVec Core edition.
  • Update to MtxVec demo for FireMonkey to run also on iOS based tablets.
  • IDE help file integration added for XE8 and Delphi 10.
  • Updates related to TeeChart.

Changes and new features of MtxVec v5.02 (April 2015)::

  • Internal memory access optimization giving performance improvements on both 32bit and 64bit code (on Windows) from 10 to 100% depending on algorithm. The greatest improvement can been seen for algorithms using long vectors and smallest for algorithms which are using block processing.
  • Certified support for Android. New Chapter added to MtxVec Users Guide about Delphi mobile compiler support.
  • Update to MtxVec demo for FireMonkey to run also on Android tablets.
  • Various performance enhancements affecting automatic reference counting on Delphi mobile compilers.
  • Fixes to debugger visualizer affecting VectorInt and TVecInt. Additional simplifications will keep all visualizers working in more demanding debug scenarios.
  • Fixed NormL1 and NormL2 functions on 64bit, complex number and single precision.
  • Fixes for TMtx.Eig() on 64bit and single precision.
  • Support for XE8 and related TeeChart updates.

Changes and new features of MtxVec v5 (December 2014)::

  • Optional build parameter (MtxVec Core Edition) results in 100% full source code in pascal. (allows for portability to Android, iOS, OSx when used together with FireMonkey.)
  • Added support for annoynmous methods to TMtxForLoop.
  • New example (MtxVecThreading.pas) with description about efficient multi-threading in MtxVec Users Guid.pdf.
  • Enhanced string formating and automatic column sizing in Debugger Visualizers.
  • Adapted TMtxGridSeries to support latest TeeChart version (released sept. 2014).

Changes and new features of MtxVec v4.51 (September 2014):
Core product:

  • Added support for XE7 Delphi and C++Builder for both VCL and FireMonkey frameworks.
  • Updated Intel MKL and IPP dlls to the latest versions.
  • Simplified syntax for arrays specified in code available for Rad Studio XE7 and later.
  • Added missing overload VectorInt.BlockInit(SrcVec);
  • Fixed a bug when using Subranged vectors.
  • Fixed a bug with Matrix.SortDescend for complex values.
  • Fixes to complex variants of TMtx.EigSchureGen, TMtx.EigSym, TMtx.EigSymGen and variants when using debug build.  
  • Sparse matrices:
  • Fixed a bug with TSparseMtx.Add when adding matrices which contain explicit zeros.
  • Fixed a bug with TSparseMtx.Copy when copying matrices which contain explicit zeros.

Changes and new features of MtxVec v4.5 (May 2014):

Core product:

  • Update to MKL and IPP. Performance improvements for eigenvalue calculations
  • Added support for RAD Studio XE6 FireMonkey and VCL.
  • Added TMtx.Eig overload with optional condition number estimation.
  • Added generalized eigenvalue method TMtx.EigGen.
  • Added calculation of Schure vectors. TMtx.EigSchure
  • Added calculation of generalized Schure vectors. TMtx.EigSchureGen
  • Updated calculation of eigenvalues for symmetric matrices. TMtx.EigSym
  • Added calculation of generalized eigenvalues for symmetric matrices. TMtx.EigSymGen
  • Updated TMtx.LQRSolve. Least square solutions with support for for rank deficient matrices.
  • Added generalized SVD decomposition. TMtx.SVDGen.
  • Added Gauss Markov Linear Model solver with TMtx.GLMSolve
  • Important: Old TMtx.EigGen has become TMtx.EigSymGen and TMtx.EigGen has new meaning.
  • Faster function inlining with Delphi XE6 and newer.

Debugger visualizer:

  • Fixed debugger visualizer package installation for FireMonkey.

Sparse matrices:

  • Added eigenvalue calculation for symmetric matrices TSparseMtx.EigSym
  • Added generalized eigenvalue calculation for symmetric matrices TSparseMtx.EigSymGen

Changes and new features of MtxVec v4.4 (March 2014):

  • Update to IPP dlls and a dll bug fix.

Changes and new features of MtxVec v4.4 (February 2014):

  • Added BitPack, BitUnpack methods and Bits property to TVecInt.
  • Added help for Median filter functions.
  • Added support for FireMonkey from including XE5 and forward. This covers all UI components, debugger visualizer and demo.
  • Prerelease of MtxVec Core: ability to run MtxVec without dependancy on external dlls. Large parts of StatsMaster and DSP Master are already functional.
  • Optional custom search path for TeeChart added to the BuildTool.

Changes and new features of MtxVec v4.3 (October 2013):

  • New set of dlls with support for Intel 4th Generation Core CPUs and Intel Xeon Phi.


Changes and new features of MtxVec v4.3 (September 2013):

  • Fixed performance issues with debugger visualizers in big applications.
  • Added support for TeeChart 2013 GDI+ Canvas.
  • Support for Embarcadero Delphi XE5.
  • Support for 64bit C++ XE4 and XE5 compiler.


Changes and new features of MtxVec v4.3 (July 2013):

  • Added support for concurrent use of double and single precision version of the library. All functions, methods and components are available in both variants. Debugging in to source code and debugger visualizers remain fully supported.
  • Added TMtx.LUSolve overload, which makes use of a precomputed factorization.


Changes and new features of MtxVec v4.22 (May 2013):

  • Support for Delphi and C++Builder XE4.


Changes and new features of MtxVec v4.2 (October 2012):

Core product:

  • Support for Delphi and C++Builder XE3.
  • Cougar Open CL now works with non unicode Delphi versions (2006 and 2007) (bug fix)
  • Cougar Open CL now detects also MtxVec version change and automatically rebuilds Open CL source
  • Fixed C++ function operator for sVector.
  • Fixed memory allocation for 64bit TMtx, which only allowed 32bit range.
  • Bug fix for complex version of the TMtx.SVD function.
  • Recreated and updated C++ Demo for many C++Builder versions.


Changes and new features of MtxVec v4.2 (April 2012):

Core product:

  • Redesigned C++ language interface while keeping the option to use old syntax for backward compatibility.
  • New C++ syntax supported for C++Builder XE1, XE2 and newer.
  • Enabled support for C++ to call and link directly against functions from external MtxVec dlls.
  • New MtxVec C++Builder demo for version XE2 featuring new syntax.
  • Simplified linking of MtxVec with the C++ project.
  • Debugger visualizers for C++ Builder have been implemented to support a range of MtxVec types including: TVec, TMtx, sVector, cVector, sMatrix, cMatrix, oclVector, oclMatrix, VectorInt, TOpenCLVector, TOpenCLMatrix, TVecInt,
  • Cougar Open CL bug fix within clPlatform initialization (ResetLength)
  • Cougar Open CL support for SetSubRange and working with subvectors and submatrices including function operator overload in C++
  • Introduction of Cougar Open CL parallel reduction based algorithms. Support for sum, norms, average, min, max, dot product, etc... known from MtxVec supported for all precisions and platforms. Parallel reduction allows non-destructive summation process and makes it possible for single precision math to achieve same or higher accuracy than double precision for algorithms relying on summation of long arrays.
  • Performance of Cougar Open CL is now completely invariant to the length of the vector or size of the matrix. The programmer needs not to worry about memory alignment or vector size.
  • Updated help and tested with XE2 Update 4 and TeeChart 2012.
  • Updated code related to Intel IPP and MKL libraries to the latest version. Note that the minimum CPU requirement has been raised by Intel to SSE2 capable CPU (P4, released in year 2000). AMD was still selling new CPUs without SSE2 in 2006. This limitation was first introduced by Intel in 2009. MtxVec v4.1 was the last version with the capability to support older CPUs (generic x86 code). The move by Intel is also the reason for 3 years of delay in the Intel related code update. The new dlls improve performance mostly for the new generation of CPUs, capable of SSE4.2 and Intel AVX instruction sets. According to Intel these can sometimes reach cca 60%. Old dlls may cause "instruction not recognized" exception on the latest generation of Intel CPUs.
  • Debugger visualizers have been enhanced for Delphi to support Open CL vector and matrix types: clVector and clMatrix


Changes and new features of MtxVec v4.1 (October 2011):


Core product:

  • Generalized LSI solver from lapack included (dgglse ).
  • Cougar Open CL bug fixes and improvements. Bugs were fixed for UpSample, DownSample, Reverse, Difference, Ramp, Rotate, Shift and Threshold functions.
  • Open CL objects like clVector and clMatrix now have full Debugger Visualizer support including tooltips in both 32bit and 64bit.
  • Cougar Open CL now runs fine with 64bit compiler.
  • Intel Open CL driver supports direct function pointer calls. This gives you a high performance free C compiler with support also for Intel AVX for use at runtime without the need for app restart. What you compile you can immediately execute from within the same application and the same address space as if though the just compiled function was already a part of the application.
  • TeeChart Pro 2011 support for XE2.
  • New examples for Open CL were added to the MtxVec Demo.
  • Multi GPU threading support is now built in to the Cougar Open CL library.
  • Fixed bug for comma as decimal separator related to Cougar Open CL.
  • Fixed bug for detection of double precision support on Cayman (AMD HD 9000 series) GPUs.


Changes and new features of MtxVec v4.1 (September 2011):

Core product:

  • Cougar Open CL opens the world of GPU processing to Delphi developers. Two new units clMtxVec and clMtxExpr add two new types clVector and clMatrix which can run their functions on the GPU.
  • Cougar Open CL substantially simplifies custom Open CL algorithm development, integration and deployment.
  • Support for Delphi XE2 and its 64bit compiler.


Changes and new features of MtxVec v4 (March 2011):

Core product:

  • Rewritten FFT descriptor cache now optimized for heavy multithreading. This also fixed two bugs related to the multithreaded use of FFTs.
  • Fixed a number of issues related to defining custom functions with the function evaluator.
  • Fixed TeeChart related issue (Panning/IPanning) which raised compiler error with TeeChart older than v2010.
  • Fixed references to Dew lib files from v3 to v4 within the C++Builder demo applications.

.NET specific:

  • Fixed integer random number generators.
  • Substantially improved error checking for several distribution fitting and testing functions to avoid deadlocks when used from optimization methods. This now has Stats Master demo app now working without erorrs.

Changes and new features of MtxVec v4 (November 2010):
Core product:

  • Threading library has a new new greedy method for threaded job distribution.
  • Debugger visualizers in Delphi XE are now enabled also for tooltips. When hovering with mouse over TStrings/TVec/Vector/Matrix/TMtx descendants, the tooltip will show values stored in the object. The magnifying glass icons showing availability of the visualizers are also back now. (disabled before because of bugs in Delphi 2010).

Changes and new features of MtxVec v4 (September 2010):
Core product:

  • Support for Delphi/C++Builder XE. Fixed bogus error reports related to range checking.
  • Support for TeeChart 2010.

Changes and new features of MtxVec v4 (June 2010):
Core product:

  • Multi-precision integer vector math with TVecInt and VectorInt with full support for object cache and math expressions. Supported are all standard operators +,-,*,/, or, xor, and, not plus more than 50 methods separately for 32bit, 16bit and 8bit integers.
  • Support for TeeChart 2010.
  • Updated dlls for latest version of MKL and IPP with support for Intel AVX.
  • Reduced distribution size with FFT core cross-platform fallback code providing FFTfunctions (1D and 2D) with reasonable performance without external dlls.
  • Reduced distribution size with IPP core cross-platform fallback code providing signal processing functions with reasonable performance without external dlls. The standalone source code delivers a substantial amount of DSP related algorithms including multi-rate FIR filters, auto and cross correlations, DCT and more.
  • Certified support for 4GB address space for 32bit applications under 64bit OS and 3GB address space for 32bit OS.

Visualizers:

  • Debugger for Delphi 2010 and later supports formated tooltips for Vector/Matrix/TVec/TMtx.
  • TCplx type will display as a + bi on the tooltip and in the evaluator.
  • Fixed a bug for string list visualizer where empty lines were left out.

Threading:

  • Added new overloads to TMtxForLoop supporting code vectorization within launched threads.
  • Fixed a bug with TMtxForLoop when ResponseTime was set to zero and improved responsivness of the thread pool to just 2us which allows threading of very short sections of code.

Polynoms:

  • Fixed a bug for unsorted linear interpolation.

.NET specific:

  • Bottom up reachitectured memory allocation and PInvoke interop achieving further performance gains.
  • Debugger tooltips and watches for TVec/TMtx/TVecInt and Vector/Matrix/VectorInt are showing object values.
  • Debugger visualizer works also for TVec/TMtx
  • support for VS2010.NET and client framework.

Changes and new features of MtxVec v3.52 (September 2009):
Core product:

  • New and enhanced debugger visualizer allows charting/viewing of arrays, vectors (TVec/Vector) and matrices (TMtx/Matrix) while debugging.
  • Multiple visualizer windows can remain open concurrently while stepping through code with F8. Expressions and scripting allow manipulation of debugger data. Added support for 2D arrays.
  • Docked debugger visualizer windows persist between debugging sessions.
  • New strings and stringlist visualizer.
  • New threaded for-loop component joins simplicity of use with excellent performance.
  • New super-conductive object cache implementation features linear scaling with number of threads and enables concurrency of math expressions which can now be threaded. MtxVec now allows perfect scaling of its code across any number of cores via TMtxThread.
  • Support for Delphi 2010 and integration of debugger visualizers in to the new IDE features.

Changes and new features of MtxVec v3.51 (January 2009):
Core product:

  • First release of 64bit support for MtxVec for Delphi.NET. Delivers typically 20-50% faster floating point code execution and ability to allocate vectors and matrices with up to 16GB in size.
  • Support for Intel Core i7, Intels first native quad core.
  • Substantially improved threading by solving and fixing many problems which hindered widespread adoption before.
  • Threading now works for BLAS (Lapack), FIR filtering, FFT's and optionally also math functions like Exp, Ln, Log...
  • Improved memory allocation system. Applications performing a lot of memory allocations and deallocations should receive a substantiall boost, in some cases by several times.

Changes and new features of MtxVec v3.5 (September 2008):

Core product:

  • Support for Delphi/C++Builder 2009.
  • Debugger visualizer allows charting/viewing of arrays, vectors (TVec/Vector) and matrices (TMtx/Matrix) while debugging.
  • New code optimizations and multithreaded functions.
  • Support for SSE4.1 for Intel Core 2 Wolfdale from Intel MKL v10 and IPP v6.
  • Substantially updated help file system.

MtxVecTee.pas:

  • New TeeChart series TMtxFastLineSeries allows zoom in/out with pixeldownsample enabled internally. Applicable also to the DrawIt method and debugger Visualizer.
  • TMtxFastLineSeries is 3x faster than TFastLineSeries when not using pixeldownsample.

Expression parser/scripter:

  • Function overloading allowed based on parameter count.
  • Custom functions can be object methods.
  • Vectors and matrices can be accessed by elements a(i) or m(r,c).
  • Colon operator allows selection of ranges of rows and colums m(:), m(1,:), v(2:3).
  • Assign operator supports colon operator: m(2:3) = 4.
  • Colon operator supports step <> 1 and allows: m(10:-1:3) = 4
  • Vectors and matrices can return elements from conditions: a = m(m > 4)
  • Functions accept strings as parameters and can return string as result.

Optimization.pas:

  • Added several linear programming algorithms, including Dual Simplex, Two Phase Simplex ordinary Simplex LP and Gomory's Cutting Plane (CPA) algorithms.
  • MtxVecTools.pas:
  • New TMtxLP component for easy usage of all LP algorithms.

Changes and new features of MtxVec v3.0.1 (November 2007):

Core product:

  • New code optimizations for Intel Penryn, SSE4a.
  • Support for Intel MKL v10.
  • Bug fixes for single precision and Delphi.NET.
  • Improvements to help files (see also links, more examples)
  • Installers and recompile tools have been improved to work well on Vista 32 and Vista x64. (UAC still needs to be disabled)
  • More in-depth multi-core tested dlls.

Sparse matrices:

  • Out of core solver support for Pardiso sparse solvers.
  • Better support (more settings) for ill-conditioned sparse matrices for Pardiso.

Changes and new features of MtxVec v3 (June 2007):
Core product:

  • New code optimizations and support for Intel Core 2 Duo product familiy.
  • New multithreaded VML function support. Simple functions like Sin, Cos.. are threaded when vector length exceeds about 5000 elements. No MtxVec code change required to have your code run on multiple cores.
  • Together with Vector/Matrix classes it is possible to write math expressions in its natural format and have the code at the same time executed on multiple cores!
  • LAPACK v3.1 delivers increased precision and performance.
  • Reduced distribution size with "Compact MtxVec". In case of the Stats Master by 50%. There are now more and more specialized dll's.
  • Intel MKL 9.1 and Intel IPP 5.2 updated with the Intel v10 C++ and Fortran compilers.

Sparse solver: UMFPACK support updated to v5.1

  • Pardiso sparse solver support updated to latest version of MKL.
  • New HTML Help 2 format of the help file.
  • Support for Delphi 2007 and C++Builder 2007.
  • New set of true color 24x24 and 16x16 icons for components to support newer IDE tool palette.

Optimization.pas :

  • Simplex algorithm now supports lower and/or upper bounds for parameters.
  • Added Trust Region (TR) algorithm. Now it's possible to find unbounded or bounded minimum of vector function of several variables.

Probabilities.pas :

  • Added 8 new distributions: Gumbel (minimum), Gumbel (maximum), Erlang, Power, Inverse Gaussian, Fatigue Life, Johnson SB, Johnson UB. Probabilities unit now includes 34 different distributions.
  • Moved distribution statistical parameter calculation from Statistics.pas to Probabilities.pas. Basic statistics now includes estimates for distribution mean, variance, skewness and kurtosis.

MtxExpr.pas :

  • All TVec/TMtx methods are now also available from Vector/Matrix. It is now possible to completely replace TVec/TMtx with Vector/Matrix.
  • Many new functions have been added where previously methods were needed, because Vector and Matrix are now value objects and can return a value.
  • Vector/Matrix syntax is now the default syntax. (Biggest change!) Old style TVec/TMtx code will still compile.
  • Loads of new syntax options and simplifications with support for operator overloading.Vector can passed as a parameter to functions accepting TVec, TMtxVec or double dynamic array as a paramter.
  • World class performance when evaluating Vector/Matrix expressions. Nealy no performance loss in compare to using CreateIt/FreeIt.
  • Help updated to the new Vector/Matrix syntax.

MtxGrid.pas :

  • New TMtxVecGrid control (derived from TCustomGrid) allows easy viewing and editing of real or complex vector or matrix. The same control is now used in MtxVecEdit.pas unit. It now allows real-time browsing of matrices with milions and bilions of elements.


MtxIntDiff.pas :

  • New unit introduces several routines for numerical integration (1D, 2D, n-D).
  • All numerical gradient estimation routines moved from Optimization.pas unit.


MtxVecTee.pas :

  • Many enhancements to the TMtxGridSeries include support for rainbow palette and up to three levels of color mixing with top and bottom clip-off.
  • Updated with support for TeeChart v8.

Help file:

  • Help file has received a major upgrade to Html Help 2 format.
  • Nearly all examples have been extended with C++ and C# examples.
  • New easier to read and navigate look and feel.
  • Code examples have been updated to relfect the new default syntax with Vector and Matrix objects.
  • Html Help 2 format integrates in to the IDE and F1 is again functional across all products.
  • Demo updated with Vector/Matrix syntax.


Changes and new features of MtxVec 2.1.5 (May 2006):


  • Support for BDS2006 Update#2.
  • Simplex optimization algorithm features support for constrained optimization.
  • TMtxGridSeries now supports three color and rainbow color palette with a very rich set of options including color balance and custom bitmap resampling methods.
  • Updates for Intel MKL 8.1 and Intel IPP 5.1 and Intel Compilers v9.1.
  • FFT''s can now be multithread.
  • TVec.Difference got a lag parameter.
  • API improvements for the vectorized parser.


Changes and new features of MtxVec 2.1 (December 2005):

  • Operator overloading for Delphi 2006 with support for Vectors, Matrices and complex numbers!
  • Enhanced support for .NET platform.
  • Dll's updated with Intel MKL 8
  • New Vectorized expression parser gives you the fastest expression evaluation available. Includes support for matrix divison (solving linear equations), from left and right (LQR solver) and can do per element operations by placing a dot in front of the * or / operators. Despite all this features and support for complex numbers, it still delivers best in class performance even when used with single element real valued expressions only.
  • Fixed a bug when resizing object cache.
  • Fixed a bug in TPiecePoly when assigning Breaks before Coefficients.
  • TMtxComponent has been upgraded with VCL and Winforms independent FreeNotification system.
  • ViewValues editor now comes with MS Office style menus.
  • ViewValues editor now correctly copies columns to clipboard.
  • Support for C++ personality of BDS 2006.
  • Upgraded automatic recompile tool for all supported products and IDE personalities.


Changes and new features of MtxVec 2.0 (November 2004):

  • Single source code compiles on .NET and W32.
  • Sparse matrices: Umfpack v4.3 and Pardiso solver.
  • All C/C++ code with support for SSE2/SSE3.
  • All Fortran code compiled with support for SSE2/SSE3.
  • Support (solvers) for complex sparse matrices.
  • New TRandomGenerator encapsulates new random generators.
  • Several 100 (!!) new highly optimized methods and overloads of existing methods for TVec, TMtx and TSparseMtx classes.
  • New FFT engine with support for arbitrary length FFT's (including arbitrary 2D FFT sizes) and symmetric multiprocessing.
  • Extensive tests written to interface DUnit test framework. This has been one of the biggest tasks. Tests execute under .NET and W32 and ensure that code gives the same result.
  • New memory allocation bypassing Delphi's and CLR memory manager and allowing to better exploit available system memory.
  • Intel SPL call's replaced with Intel IPP 4.0.
  • New dll interfaces allow support of C++Builder and Kylix.
  • Common abstract class between for TVec, TMtx and TSparseMtx sharing over 100 unique functions not counting overloads.
  • New syntax options allowing much more flexibility when exchanging data between TVec, TMtx and TSparseMtx. Only the "view" of memory is changed. It is possible to write single source code which can take vector, matrix and sparse matrix objects as parameters.
  • Vastly improved error checking, mostly due to in-depth tests.
  • Prescot CPU support exploiting the features of the new instruction set.
  • Extensive performance optimizations across the entire library.
  • Operator overloading under .NET for complex numbers.
  • Every effort has been made to achieve as high as possible backward compatibility. There are only a few functions, that have been removed and/or replaced with a different version. There are no functions with same signature and different meaning.
  • It should be possible to write single source code that would execute on W32 and .NET with the same or very similar performance even for short vectors and small matrices.


Changes and new features of MtxVec 1.5 (June 2002):

MtxVec.pas and Math387.pas

  • Eig returns left and right eigenvectors in columns
  • SVD returns left singular vectors and right singular vectors in columns. SVD requires U and V to be both assigned (<> nil) and computes the singular vectors using divide and conquer algorithm.
  • Most Math387 routines rewritten in assembler (much faster)
  • New TMtx.MtxSqrt routine allows computation of a square root of the matrix by using
  • eigenvalue decomposition (all matrix types supported). 
  • New TMtx.MtxFunction method allows computation of any matrix function (Power of the matrix, square root of the matrix, log of the matrix,..) via eigenvalue decomposition. 
  • Added support for sparse matrices.
  • SetRoundToTrunc speeds up the computation of the Trunc function.
  • Added SetSubRange and SetSubIndex to TVec to allow multiple views of selected number of elements (subvectors) and simplify indexing.
  • Added TMtx.SaveToMatrixMarketFile routine, supporting MatrixMarket file format.
  • StringsToValues now accepts blanks as delimiters.
  • Added TMtx.PixelDownSample method.
  • Added TVec.BlockInit and TVec.BlockNext to simplify development of block processing enabled algorithms.


MtxVecEdit.pas

  • Chart menu items are now automatically added/removed if you compile/install MtxTee1X.dpk package.
  • New TMtxViewDialog component holding the state of the dialog displayed via ViewValues. (allows setting and storing the parameters for the dialog).


Sparse.pas

  • Introduces TSparseMtx class capable of handling real and complex sparse matrices. 
  • Encapsulates UMF Pack v 3.2, one of the fastest direct sparse matrix solvers and interfacing MKL 5.1 BLAS III.
  • Features iterative sparse solvers (cg, bcg, gmres, ..).
  • Compute inverse of the sparse matrix.
  • Many conversion routines to convert to and form different matrix formats (triplet, banded, dense, Harwell-Boeing).
  • Load and save MatrixMarket file format.
  • Very fast banded matrix solvers already available in TMtx.
  • Add, subtract, multiply routines for sparse/sparse and dense/sparse matrices.
  • PixelDownSample routine to allow fast display of the non-zero pattern of the matrices of huge sizes (1000 000 x 1000 000 elements).
  • Complete set of standard math routines known from TVec and TMtx. (Log, Power, Sin, Cos, etc...)

MtxParseExpr.pas

  • Evalute expressions containing real and/or complex numbers.
  • Unlimited number of user defined variables.
  • Unlimited number of user defined functions.
  • Each function can have up to 6 parameters.
  • Maintain a list of parsed expressions.
  • New TMtxExpression object
  • New TMtxFunctionEvaluator component

MtxVecTee.pas

  • Added NAN and Inf checks to DrawValues method.
  • Added support for pixelDownsample for matrices.
  • Added TMtxGridSeries for displaying matrix values. Works with all TeeChart versions (v4-v5 Standard or PRO).

Probabilities.pas

  • Most procedures taking vector parameters have been completely rewritten and take advantage of block processing design combined with optimized vector processing. (big speed gains).


MtxVecTools, MtxVecDBTools, MtxVecComCtrls and MtxBaseComp.pas

  • Added new TMtxProgressDialog component (a TThread component) designed to simplify threading of numerical algorithms, display progress bar and allow interuption of the processing. TMtxFloatEdit component has been enhanced. Ctrl+DlbClick will bring up settings for increment and number format. Added a feature to store those settings in the registry.
  • ViewValues and DrawIt display settings are preserved between calls.
  • New TMtxComponent featuring generic SaveToStream, LoadFromStream and Assign procedure for all derived classes. (MtxBaseComp.pas).

Miscellaneous

  • All TeeChart units placed in separate package. Now you can recompile this package with any Teechart version.
  • All Optimization routines now work fine with C++ Builder 5 and 6.
  • Added support for C++ Builder 6.
  • Improved compatibility for P4.
  • Updated Intel Math Kernel Libraries.
  • Resolved issues with dynamic linking of MKL.
  • Code optimisation all around...

Changes and new features of MtxVec 1.02 (July 2001):
MtxVec.pas and Math387.pas

  • New TMtx.Determinant method (calculates determinant of squared matrix)
  • New TMtx.OnSetSize event (triggered when matrix Rows or Cols properties are changed)
  • New TVec.Shift method (simiar to TVec.Rotate method)
  • New IsNanInf boolean function
  • New TVec.Round and TVec.Trunc functions
  • Math387 functions are now almost completely written in assembler (including complex versions).

MtxVecEdit.pas

  • Added StayOnTop boolean parameter to ViewValues procedure
  • Improved TeeChart drawing routines. All TeeChart v5 users will notice additional spee-up.

MtxVecTools.pas MtxDBTools.pas

  • Added TMtxOptimization.Asign and TMtxDataset.Asign methods
  • Added TMtxDataset.ColumnsToMtx method (reads from all VecColumns and stores the results in single matrix)
  • Improved TMtxDataset reading/writing to database algorithms
  • Added new TMtxFloatEdit component (Up/Down edit box with support for complex increment) 

Miscellaneous

  • Added support for Delphi 6
  • MtxVec now uses the latest Math Kernel Libraries (MKL 5.1)
  • Reorganized package scheme (runtime, designtime packages)
  • Now all Delphi (double and single distribution) are packaged in one installer. The same
  • applies to C++ Builder.
  • Significantly improved optimization routines.

Initial release of MtxVec 1.0 (August 2000)

Introducing MtxVec v6

MtxVec v6

Multicore math engine for science and engineering

Overview

MtxVec is an object oriented vectorized math library, the core of Dew Lab Studio, featuring a comprehensive set of mathematical and statistical functions executing at impressive speeds (check the testimonies of some of our many customers ). 

MtxVec math library is available for Delphi/C++ Builder and Visual Studio .NET environments.

Common Product Features

Designed for large data sets with complete vector/matrix arithmetic, it adds the following capabilities to your development environment:
  • A comprehensive set of mathematical, signal processing and statistical functions
  • Substantial performance improvements of floating point math by exploiting the Intel AVX, AVX2 and AVX-512 instruction sets offered by modern CPUs.

  • Solutions based on it scale linearly with core count which makes it ideal for massively parallel systems.
  • Improved compactness and readability of code.
  • Support for native 64bit execution gives free way to memory hungry applications
  • Significantly shorter development times by protecting the developer from a wide range of possible errors.
  • Direct integration with TeeChart© to simplify and speed up the charting.
  • No royalty fees for distribution of compiled binaries in products you develop

  • Floating point precision selectable at run-time.

MtxVec for Delphi/C++ Builder - vectorized math library

MtxVec for Delphi/C++ Builder

Learn more

MtxVec for Visual Studio .NET - vectorized math library

MtxVec for Visual Studio .NET

Learn more

Having converted our models from Matlab, a speed increase of over 10x has been achieved . This core acceleration finally allows these models to be used in real-time automation control.
Ned Scupolovic - Senior Systems Engineer Hatch IAS (Using Embarcadero C++Builder)

Optimized Functions

The base math library uses the LAPACK (Linear Algebra Pack) version optimized for Core Duo and Core i7 CPU’s provided by Intel with their Math Kernel library. Our library is organized into a set of “primitive” highly optimized functions covering all the basic math operations. All higher level algorithms use these basic optimized functions, similar to the way LAPACK uses the Basic Linear Algebra Subprograms (BLAS).

Performance Secrets

Code vectorization

The secret behind our performance is called "code vectorization". We program achieves substantial performance improvements in floating point arithmetic by exploiting the CPU Streaming SIMD Extensions instruction sets. (SIMD = Single Instruction Multiple Data.)

Super conductive memory management

Effective massively parallel execution is achieved with the help of a super conductive memory management, which features zero thread contention and inter-lock problems allowing linear scaling with number of cores while maintaining low memory consumption and no interference with non-computational parts of the project.

Other Features

  • Linear Algebra Package

    MtxVec makes extensive use of the Linear Algebra Package, which today is the de-facto standard for linear algebra and is free from www.netlib.org. Because this package is standard, different CPU makers provide performance-optimized versions to achieve maximum performance. Linear algebra routines are the bottleneck of many frequently used algorithms; therefore, this package is the part of the code that makes the most sense to optimize. MtxVec uses the version optimized for individual CPUs provided by Intel with their Math Kernel library.

  • Intel Performance Primitives

    Our library also makes extensive use of Intel Performance Primitives, which accelerate mainly the non-linear algebra based functions. The Intel Performance Primitives run on all Intel x86-compatible CPUs, old and new, but will achieve highest performance on the Intel Core architecture.

What You Gain With MtxVec

  • Low-level math functions are wrapped in simple-to-use code primitives.
  • Write Vector/Matrix expressions with the standard set of *,/,+- operators

  • Best in class performance when evaluating Vector/Matrix expressions.
  • All primitives have internal and automatic memory management. This frees you from a wide range of possible errors like: allocating insufficient memory, forgetting to free the memory, keeping too much memory allocated at the same time, and similar errors. Parameters are explicitly range checked before they are passed to the dll routines. This ensures that all internal dll calls are safe to use.
  • When calling linear algebra routines, the software automatically compensates for the fact that in FORTRAN the matrices are stored by columns but in other languages are stored by rows.
  • Many linear algebra functions take several parameters. The software automatically fills in most of the parameters, thus reducing the time to study each function extensively before you can use it.
  • The software is organized into a set of "primitive" highly optimized functions covering all the basic math operations. All higher-level algorithms use these basic operations, in a way similar to how LAPACK uses the Basic Linear Algebra Subprograms (BLAS).
  • Although some compilers support native SSE4/AVX2/AVX512 instruction sets, the resulting code can never be as optimal as a hand-optimized version.

  • Many linear algebra routines are multithreaded, including FFT's and sparse matrix solvers.
  • All functions must pass very strict automated tests. These tests give the library the highest possible level of reliability, accuracy and error protection.
  • When you write numerical algorithms, you will find the compactness and readability of code improves noticeably and you achieve significantly shorter development times.
  • High performance expression parser/scripter that can work with vector and matrix variables.
  • Debugger Visualizer for faster inspection of variable contents during debugging.

View more screenshots

Learn more about Mtx Vec v6

  • Getting up to speed

  • Block processing

  • Objects and Numerics

  • MtxVec encapsulates LAPACK

  • Math functions and speed

  • Super conductive memory manager

  • MtxVec expressions

  • MtxVec scripting

  • Debugger Visualizer

For more information on MtxVec v6:

Continue reading

MtxVec Core Edition

MtxVec Core Edition

Cross-platform feature for MtxVec

Overview

MtxVec Core Edition is the full source version of MtxVec. It allows MtxVec to be compiled completely without reference to external dlls and run with pure pascal or C# code only (100% full source code). When used with Embarcadero FireMonkey you can use common source to compile the applications for Windows, Linux, OSX, iOS and Android. The same as possible for the source of Dew Math in C# and .NET Core.

With a compiler switch, you can change how MtxVec will be included in to your application.

Main advantages:

  • Small size of distribution
  • Platform independent builds

The Core edition is the key new feature added with MtxVec v5. It allows MtxVec to be compiled completely without reference to external dlls and run with pure native code only (100% full source code). All the algorithms relevant to the add-on packages of DSP Master and Stats Master have been implemented in pascal/C#. The numerical accuracy is comparable. Great care was taken when translating Fortran Lapack code to pascal/C# to maintain nearly line by line comparability. The code runs slower (of course) than its Windows dll based counterpart, but greatly simplifies distribution on Windows and to other platforms like Android and OSx/iOS.

Delphi related features added with MtxVec v5.3:

On OSX and iOS the MtxVec now interfaces Apple Accelerate framework. The big advantage here is that no additional libraries need to be included with distribution. The following sub-systems are mapped : BLAS, LAPACK (including complex number support), math functions (sin, cos, tan, exp, ln, ...), and the FFT library. There is some support in the Accelerate framework for vectorized math, but that is not as comprehensive as on the Windows.

The DSP Master of course benefits from the faster FFTs and optimized dot product functions. Additionaly TSignalCoreAudioIn and TSignalCoreAudioOut have been upgraded to support playback and recording on Android and iOS. This simplifies development of audio processing applications immensly, because the entire application can now be debugged on Windows and only deployed to the mobile device. On the iOS the audio pack used is RemoteIO and on Android it is the AudioRecord and AudioTrack classes. These are then optimized for widest possible hardware and OS version compatibility.

The Delphi math unit and default System unit math functions have been bypassed for both Android and iOS with Math387 which now run about 20x faster by making direct using of the libm library.

According to our tests, an Apple mobile application is capable of 10x faster CPU code execution, due to better hardware and provided accelerator framework libraries, than high-end Android devices. The performance of such iOS apps is very close to Delphi Windows desktop applications when running without special optimizations. Bellow you can find some basic benchmarks using one CPU core for orientation.

Computing: for i := 0 to 511 do c[i] := sqrt(sqr(a[i]) + sqr(b[i])), 1024x. single precision

  • iPad, A9 (with acc): 6ms  (Apple A9, 1.85 GHz)
  • iPhone 5s, A7 (with acc): 9ms
  • iPhone 5s A7 (no acc, libm): 18ms  (Apple A7, 1.3GHz, dual core)
  • iPhone 12 (acc): 1.8-2.7ms (A14, 3GHz).
  • Apple Mac Mini M1 (2020), 2-3ms
  • Huawei P10 Lite (libm): 22ms  (2.4GHz, Cortex A53, 4 cores).
  • LG V700 (libm): 120ms  (1.2GHz Qualcomm, ARMv7, 4 cores)
  • Core i5-3320m (acc): 0.83ms (2.6GHz, 2 cores)
  • Core i5 4670 (no acc): 2.5ms (3.7GHz, 4 cores)
  • Core i5 4670 (acc): 0.3ms  (3.7GHz, 4 cores)
  • Core i7-7820X (no acc): 1.7ms (4Ghz, 8 cores)
  • Core i7-7820X (acc):  0.21ms (4Ghz, 8 cores)

Computing FFT (1024 samples real to complex). 1024x, single precision

  • iPad, A9 (with acc): 14ms
  • iPad, A9 (no acc): 90ms
  • iphone 5s (with acc): 37ms
  • iPhone 5s (no acc): 156ms
  • iPhone 12 (acc): 7.7-14ms (3GHz, A14)
  • Apple Mac Mini M1 (2020), 6-7ms
  • LG V700: 400ms
  • Huawei P10 Lite: 200ms
  • Core i5-3320m (acc): 2.9ms (2.6GHz, 2 cores)
  • Core i5 4670 (no acc): 27ms
  • Core i5 4670 (acc): 1ms
  • Core i7-7820X (no acc): 17ms
  • Core i7-7820X (acc):  0.51ms

Main Features of MtxVec Core Edition

The following major features are available in pascal since MtxVec v5:

  • LU Factorization and LU Solvers.
  • QR Factorization and QR solvers for rank deficient matrices
  • EIG values and vectors for symmetric and general matrices
  • SVD values and vectors
  • SVD based linear system solvers
  • FFT1D/2D
  • Remez Exchange algorithm for optimal FIR filter design used by DSP Master add-on pack.

Delphi code base maintains the following features:

  • Optionally fully range checked by using Delphi dynamic arrays
  • Requires Delphi XE6 with Update 1 or newer for substantially better performance.
  • Features automated tests.

The support for the following features are missing from the initial release of the Core Edition:

  • Sparse matrix LU solvers and eigen values
  • Lapack routines using complex number input matrices
  • The higher quality random generators

Important:

Cross-platform FireMonkey support with MtxVec requires at least Embarcadero Rad Studio XE10.

Continue reading

Numerical library for Delphi and .NET developers

Introducing

MtxVec v6

Multicore math engine for science and engineering

Develop with Delphi, C# or C++ and deliver the code speed of assembler.

Comprehensive and fast numerical math library

Support for VS.NET, Embarcadero Delphi and C++ Builder

Statistical and DSP add-ons

  • MtxVec

    Multicore math engine for science and engineering

  • DSP Master

    Advanced signal processing package

  • Stats Master

    Statistical package

  • Data Miner

    Artificial intelligence enabling components

  • FFT Properties

    Signal Analyzer and Recorder

All News

Numerical library for Delphi and .NET developers

Dew Research develops mathematical software for advanced scientific computing trusted by many customers. MtxVec for Delphi, C++ Builder or .NET is alternative for products like Matlab, LabView, OMatrix, SciLab, etc. We offer a high performance math library, statistics library and digital signal processing library (dsp library) for:

  • Embarcadero/CodeGear Delphi and C++Builder numerical libraries and components
  • Microsoft .NET components -- including Visual Studio add-ons and a .NET numerical library for C++, C#, and Visual Basic

Product Features

MtxVec is an object oriented vectorized math library, the core of Dew Lab Studio, featuring a comprehensive set of mathematical and statistical functions executing at impressive speeds.
Designed for large data sets with complete vector/matrix arithmetic, it adds the following capabilities to your development environment:
  • A comprehensive set of mathematical, signal processing and statistical functions
  • Substantial performance improvements of floating point math by exploiting the SSE4.2, AVX, AVX2, AVX512 instruction sets offered by modern CPUs.

  • Solutions based on it scale linearly with core count which makes it ideal for massively parallel systems.
  • Improved compactness and readability of code.
  • Support for native 64bit execution gives free way to memory hungry applications
  • Significantly shorter development times by protecting the developer from a wide range of possible errors.
  • Direct integration with TeeChart© to simplify and speed up the charting.
  • No royalty fees for distribution of compiled binaries in products you develop

View more screenshots

Optimized Functions

The base math library uses the LAPACK (Linear Algebra Pack) version optimized for Core Duo and Core i7 CPU’s provided by Intel with their Math Kernel library. Our library is organized into a set of “primitive” highly optimized functions covering all the basic math operations. All higher level algorithms use these basic optimized functions, similar to the way LAPACK uses the Basic Linear Algebra Subprograms (BLAS).

Learn more: MtxVec encapsulates LAPACK

Performance Secrets

Code vectorization

The program achieves substantial performance improvements in floating point arithmetic by exploiting the CPU Streaming SIMD Extensions: SSE4.2, AVX, AVX2 and AVX512 instruction sets. (SIMD = Single Instruction Multiple Data.)

Learn more: Getting up to speed

Super conductive memory management

Effective massively parallel execution is achieved with the help of a super conductive memory management, which features zero thread contention and inter-lock problems allowing linear scaling with number of cores while maintaining low memory consumption and no interference with non-computational parts of the project.

Learn more: Super conductive memory manager

Some of our customers

Continue reading