Matlab N-D multithreaded matrix operations (MMX)¶
MMX is a Matlab plugin for N-D multithreaded matrix operations. The File Exchange page for it is:
https://www.mathworks.com/matlabcentral/fileexchange/37515-mmx?ue
The source code is hosted on Github:
https://github.com/yuvaltassa/mmx
Download the code¶
The original code can be downloaded with the command:
git clone https://github.com/yuvaltassa/mmx.git
The original instructions for installing MMX does not work in general. MKL path is hardcoded and the name of the static MKL library is wrong. These instructions were created to help others to compile this Matlab plugin on Thorny Flat. That means that the names of environment modules and path for Intel MKL are specific for this cluster. However, the instructions are general enough so other people can compile this code on other computers, regardless of having superusers priviledges or not.
We start by getting access to Matlab 2024a, the latest version installed on Thorny. Thorny Flat runs RHEL 7.x and the version of GCC is old (4.8), we have GCC 9.3 as the stable compiler on this cluster:
module load lang/gcc/9.3.0 matlab/2024a
Other Linux machines could have recent versions of GCC supported by Matlab see this webpage to check which compilers are accepted.
https://www.mathworks.com/support/requirements/supported-compilers.html
Recent versions of Matlab support GCC up to 9.x
Download the code with the git command mentioned above:
git clone https://github.com/yuvaltassa/mmx.git
Go to the folder mmx/src
:
cd mmx/src/
Enter in Matlab:
matlab
Execute the command build_mmx() (This command will fail):
>> build_mmx()
Compilation of 'mmx_mkl_single' failed with error:
ls: cannot access *small_mkl_ilp64.*: No such file or directory
==========
Trying to compile 'mmx_mkl_multi', using
CXXFLAGS="\$CXXFLAGS -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 ", -lmwblas, -lmwlapack, -lpthread, -DUNIX_SYSTEM, -DUSE_BLAS,
Compilation of 'mmx_mkl_multi' failed with error:
Access denied; check that you have permissions to access '/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64'.
==========
Trying to compile 'mmx_naive', using
-lpthread, -DUNIX_SYSTEM,
Compilation of 'mmx_naive' failed with error:
Access denied; check that you have permissions to access '/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64'.
>>
Edit the building script¶
Edit the file build_mmx.m
, adjust several lines of code to make it work.
The differences are:
$ diff -u build_mmx.m /shared/software/matlab/r2024a/extern/lib/glnxa64/build_mmx.m
--- build_mmx.m 2022-01-10 10:22:56.969414000 -0500
+++ /shared/software/matlab/r2024a/extern/lib/glnxa64/build_mmx.m 2022-01-09 10:19:34.160261000 -0500
@@ -126,7 +126,7 @@
link = {'mwblas','mwlapack','pthread'};
define = {'UNIX_SYSTEM','USE_BLAS'};
case 'mmx_mkl_single'
- root = '/opt/intel/mkl';
+ root = '/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0';
inc_dir = [ root '/include'];
if strcmp(arch,'glnx86')
link_dir = [matlabroot '/extern/lib/glnx86'];
@@ -134,7 +134,7 @@
define = {'UNIX_SYSTEM', 'USE_BLAS', 'MKL_32'};
else
link_dir = [matlabroot '/extern/lib/glnxa64'];
- link = {'small_mkl_ilp64','pthread'};
+ link = {'single_mkl_ilp64','pthread'};
define = {'UNIX_SYSTEM', 'USE_BLAS', 'MKL_ILP64'};
end
end
Build a custom MKL library¶
Build the custom MKL library, first load module for Intel MKL:
module load mkl
Choose a folder to build the MKL custom library, it could be the same mmx/src folder and we will use it here Concatenate the list of Linear Algebra routines BLAS and LAPACK from MKL:
cat ${MKLROOT}/tools/builder/blas_example_list > blas_lapack_list
cat ${MKLROOT}/tools/builder/lapack_example_list >> blas_lapack_list
Copy the makefile from the MKL builder folder:
cp ${MKLROOT}/tools/builder/makefile .
And build the library from it:
make libintel64 interface=ilp64 export=blas_lapack_list name=libsingle_mkl_ilp64 threading=sequential
Verify that you have reach this step correctly by checking for the file libsingle_mkl_ilp64.so
Compile MMX¶
Now we can compile mmx as a Matlab MEX file
The output is extensive but illustrative of the 3 compilations of MMX that are done. build_mmx will try to compile from the most efficient to the simplest version. The first time it succeeds compiles the “official” mmx MEX library
This is the complete output in verbose mode:
$ matlab
MATLAB is selecting SOFTWARE OPENGL rendering.
< M A T L A B (R) >
Copyright 1984-2024 The MathWorks, Inc.
R2024a Update 1 (24.1.0.2568132) 64-bit (glnxa64)
March 28, 2024
To get started, type doc.
For product information, visit www.mathworks.com.
>> build_mmx(true)
Warning: Colon operands must be real scalars. This warning will become an error in a future release.
> In build_mmx>check_dir (line 220)
In build_mmx (line 197)
==========
Trying to compile 'mmx_mkl_single', using
-v, CXXFLAGS="\$CXXFLAGS -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include ", LDFLAGS="\$LDFLAGS -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 ", -lsingle_mkl_ilp64, -lpthread, -DUNIX_SYSTEM, -DUSE_BLAS, -DMKL_ILP64,
Verbose mode is on.
No MEX options file identified; looking for an implicit selection.
... Looking for compiler 'g++' ...
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Executing command 'g++ -print-file-name=libstdc++.so' ...Yes ('/shared/software/lang/gcc/9.3.0/lib64/libstdc++.so').
... Executing command 'g++ -dumpversion' ...Yes ('9.3.0').
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Looking for folder '/shared/software/lang/gcc/9.3.0' ...Yes.
... Executing command 'g++ -dumpmachine' ...Yes ('x86_64-pc-linux-gnu').
Found installed compiler 'g++'.
Set INCLUDE = /shared/software/lang/gcc/9.3.0/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/x86_64-pc-linux-gnu;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/backward;/shared/software/lang/gcc/9.3.0/include
Options file details
-------------------------------------------------------------------
Compiler location: /shared/software/lang/gcc/9.3.0/bin/g++
Options file: /gpfs20/shared/software/matlab/r2024a/bin/glnxa64/mexopts/g++_glnxa64.xml
CMDLINE2 : /shared/software/lang/gcc/9.3.0/bin/g++ \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339948869503256_17258/mmx.o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_mkl_single.mexa64
CXX : /shared/software/lang/gcc/9.3.0/bin/g++
DEFINES : -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE
MATLABMEX : -DMATLAB_MEX_FILE
CFLAGS : -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv
CXXFLAGS : \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include
INCLUDE : -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include"
CXXOPTIMFLAGS : -O2 -DNDEBUG
CXXDEBUGFLAGS : -g
LDXX : /shared/software/lang/gcc/9.3.0/bin/g++
LDFLAGS : \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64
LDTYPE : -shared
LINKEXPORT : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map"
LINKEXPORTVER : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map"
LINKLIBS : -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat
LDOPTIMFLAGS : -O
LDDEBUGFLAGS : -g
MWCPPLIB : "/gpfs20/shared/software/matlab/r2024a/sys/os/glnxa64/orig/libstdc++.so.6"
OBJEXT : .o
LDEXT : .mexa64
SETENV : CC="gcc"
CXX="/shared/software/lang/gcc/9.3.0/bin/g++"
CFLAGS="-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
CXXFLAGS="\-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
COPTIMFLAGS="-O2 -DNDEBUG"
CXXOPTIMFLAGS="-O2 -DNDEBUG"
CDEBUGFLAGS="-g"
CXXDEBUGFLAGS="-g"
MW_GLIBC_SHIM="$MW_GLIBC_SHIM"
LD="gcc"
LDXX="/shared/software/lang/gcc/9.3.0/bin/g++"
LDFLAGS="\-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map""
LDDEBUGFLAGS="-g"
GCC : /shared/software/lang/gcc/9.3.0/bin/g++
CPPLIB_DIR : /shared/software/lang/gcc/9.3.0/lib64/libstdc++.so
VER : 9.3.0
GCCDIR : /shared/software/lang/gcc/9.3.0
GCC_TARGET : x86_64-pc-linux-gnu
MATLABROOT : /gpfs20/shared/software/matlab/r2024a
ARCH : glnxa64
SRC : "/gpfs20/users/vh0010/mmx/src/mmx.cpp";"/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp"
OBJ : /tmp/mex_151339948869503256_17258/mmx.o;/tmp/mex_151339948869503256_17258/cpp_mexapi_version.o
OBJS : /tmp/mex_151339948869503256_17258/mmx.o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o
SRCROOT : /gpfs20/users/vh0010/mmx/src/mmx
DEF : /tmp/mex_151339948869503256_17258/mmx_mkl_single.def
EXP : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_single.exp"
LIB : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_single.lib"
EXE : /gpfs20/users/vh0010/mmx/src/mmx_mkl_single.mexa64
ILK : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_single.ilk"
TEMPNAME : /gpfs20/users/vh0010/mmx/src/mmx_mkl_single
EXEDIR : /gpfs20/users/vh0010/mmx/src/
EXENAME : mmx_mkl_single
MANIFEST : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_single.mexa64.manifest"
OPTIM : -O2 -DNDEBUG
LINKOPTIM : -O
CMDLINE1_0 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339948869503256_17258/mmx.o
CMDLINE1_1 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o
-------------------------------------------------------------------
Building with 'g++'.
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339948869503256_17258/mmx.o
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o
{
"bundle.symbolic_name" : "15c77af0-da20-499d-8ae1-ca7172b55a16",
"mw" :
{
"mex" :
{
"apiVersion" : 0,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339948869503256_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339948869503256_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339948869503256_17258/mmx.o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_mkl_single.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339948869503256_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
Recompile embedded version with '-DMATLAB_MEXCMD_RELEASE=R2017b'
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o -DMATLAB_MEXCMD_RELEASE=R2017b
{
"bundle.symbolic_name" : "9094ce00-7fea-485a-86fa-c0bc0dc91575",
"mw" :
{
"mex" :
{
"apiVersion" : 730,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339948869503256_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339948869503256_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339948869503256_17258/mmx.o /tmp/mex_151339948869503256_17258/cpp_mexapi_version.o -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_mkl_single.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339948869503256_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
MEX completed successfully.
Compilation of 'mmx_mkl_single' succeeded.
Compiling again to 'mmx' target using 'mmx_mkl_single' build.
Verbose mode is on.
... Looking for compiler 'g++' ...
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Executing command 'g++ -print-file-name=libstdc++.so' ...Yes ('/shared/software/lang/gcc/9.3.0/lib64/libstdc++.so').
... Executing command 'g++ -dumpversion' ...Yes ('9.3.0').
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Looking for folder '/shared/software/lang/gcc/9.3.0' ...Yes.
... Executing command 'g++ -dumpmachine' ...Yes ('x86_64-pc-linux-gnu').
Found installed compiler 'g++'.
Set INCLUDE = /shared/software/lang/gcc/9.3.0/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/x86_64-pc-linux-gnu;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/backward;/shared/software/lang/gcc/9.3.0/include
Options file details
-------------------------------------------------------------------
Compiler location: /shared/software/lang/gcc/9.3.0/bin/g++
Options file: /gpfs20/shared/software/matlab/r2024a/bin/glnxa64/mexopts/g++_glnxa64.xml
CMDLINE2 : /shared/software/lang/gcc/9.3.0/bin/g++ \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339957101815700_17258/mmx.o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx.mexa64
CXX : /shared/software/lang/gcc/9.3.0/bin/g++
DEFINES : -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE
MATLABMEX : -DMATLAB_MEX_FILE
CFLAGS : -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv
CXXFLAGS : \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include
INCLUDE : -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include"
CXXOPTIMFLAGS : -O2 -DNDEBUG
CXXDEBUGFLAGS : -g
LDXX : /shared/software/lang/gcc/9.3.0/bin/g++
LDFLAGS : \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64
LDTYPE : -shared
LINKEXPORT : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map"
LINKEXPORTVER : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map"
LINKLIBS : -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat
LDOPTIMFLAGS : -O
LDDEBUGFLAGS : -g
MWCPPLIB : "/gpfs20/shared/software/matlab/r2024a/sys/os/glnxa64/orig/libstdc++.so.6"
OBJEXT : .o
LDEXT : .mexa64
SETENV : CC="gcc"
CXX="/shared/software/lang/gcc/9.3.0/bin/g++"
CFLAGS="-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
CXXFLAGS="\-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
COPTIMFLAGS="-O2 -DNDEBUG"
CXXOPTIMFLAGS="-O2 -DNDEBUG"
CDEBUGFLAGS="-g"
CXXDEBUGFLAGS="-g"
MW_GLIBC_SHIM="$MW_GLIBC_SHIM"
LD="gcc"
LDXX="/shared/software/lang/gcc/9.3.0/bin/g++"
LDFLAGS="\-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map""
LDDEBUGFLAGS="-g"
GCC : /shared/software/lang/gcc/9.3.0/bin/g++
CPPLIB_DIR : /shared/software/lang/gcc/9.3.0/lib64/libstdc++.so
VER : 9.3.0
GCCDIR : /shared/software/lang/gcc/9.3.0
GCC_TARGET : x86_64-pc-linux-gnu
MATLABROOT : /gpfs20/shared/software/matlab/r2024a
ARCH : glnxa64
SRC : "/gpfs20/users/vh0010/mmx/src/mmx.cpp";"/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp"
OBJ : /tmp/mex_151339957101815700_17258/mmx.o;/tmp/mex_151339957101815700_17258/cpp_mexapi_version.o
OBJS : /tmp/mex_151339957101815700_17258/mmx.o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o
SRCROOT : /gpfs20/users/vh0010/mmx/src/mmx
DEF : /tmp/mex_151339957101815700_17258/mmx.def
EXP : "/gpfs20/users/vh0010/mmx/src/mmx.exp"
LIB : "/gpfs20/users/vh0010/mmx/src/mmx.lib"
EXE : /gpfs20/users/vh0010/mmx/src/mmx.mexa64
ILK : "/gpfs20/users/vh0010/mmx/src/mmx.ilk"
TEMPNAME : /gpfs20/users/vh0010/mmx/src/mmx
EXEDIR : /gpfs20/users/vh0010/mmx/src/
EXENAME : mmx
MANIFEST : "/gpfs20/users/vh0010/mmx/src/mmx.mexa64.manifest"
OPTIM : -O2 -DNDEBUG
LINKOPTIM : -O
CMDLINE1_0 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339957101815700_17258/mmx.o
CMDLINE1_1 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o
-------------------------------------------------------------------
Building with 'g++'.
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339957101815700_17258/mmx.o
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o
{
"bundle.symbolic_name" : "ab79f1c6-0752-40a4-a1a5-9a54d0b67816",
"mw" :
{
"mex" :
{
"apiVersion" : 0,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339957101815700_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339957101815700_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339957101815700_17258/mmx.o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339957101815700_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
Recompile embedded version with '-DMATLAB_MEXCMD_RELEASE=R2017b'
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMKL_ILP64 -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/intel/toolkit/mkl/2023.2.0/include -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o -DMATLAB_MEXCMD_RELEASE=R2017b
{
"bundle.symbolic_name" : "0560dbcc-5ed2-4198-8c4d-ca43bca0f356",
"mw" :
{
"mex" :
{
"apiVersion" : 730,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339957101815700_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339957101815700_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ \-pthread -Wl,--no-undefined -L/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339957101815700_17258/mmx.o /tmp/mex_151339957101815700_17258/cpp_mexapi_version.o -lsingle_mkl_ilp64 -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339957101815700_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
MEX completed successfully.
==========
Trying to compile 'mmx_mkl_multi', using
-v, CXXFLAGS="\$CXXFLAGS -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 ", -lmwblas, -lmwlapack, -lpthread, -DUNIX_SYSTEM, -DUSE_BLAS,
Verbose mode is on.
... Looking for compiler 'g++' ...
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Executing command 'g++ -print-file-name=libstdc++.so' ...Yes ('/shared/software/lang/gcc/9.3.0/lib64/libstdc++.so').
... Executing command 'g++ -dumpversion' ...Yes ('9.3.0').
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Looking for folder '/shared/software/lang/gcc/9.3.0' ...Yes.
... Executing command 'g++ -dumpmachine' ...Yes ('x86_64-pc-linux-gnu').
Found installed compiler 'g++'.
Set INCLUDE = /shared/software/lang/gcc/9.3.0/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/x86_64-pc-linux-gnu;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/backward;/shared/software/lang/gcc/9.3.0/include
Options file details
-------------------------------------------------------------------
Compiler location: /shared/software/lang/gcc/9.3.0/bin/g++
Options file: /gpfs20/shared/software/matlab/r2024a/bin/glnxa64/mexopts/g++_glnxa64.xml
CMDLINE2 : /shared/software/lang/gcc/9.3.0/bin/g++ -pthread -Wl,--no-undefined -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339961011708370_17258/mmx.o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o -lmwblas -lmwlapack -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.mexa64
CXX : /shared/software/lang/gcc/9.3.0/bin/g++
DEFINES : -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE
MATLABMEX : -DMATLAB_MEX_FILE
CFLAGS : -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv
CXXFLAGS : \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64
INCLUDE : -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include"
CXXOPTIMFLAGS : -O2 -DNDEBUG
CXXDEBUGFLAGS : -g
LDXX : /shared/software/lang/gcc/9.3.0/bin/g++
LDFLAGS : -pthread -Wl,--no-undefined
LDTYPE : -shared
LINKEXPORT : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map"
LINKEXPORTVER : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map"
LINKLIBS : -lmwblas -lmwlapack -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat
LDOPTIMFLAGS : -O
LDDEBUGFLAGS : -g
MWCPPLIB : "/gpfs20/shared/software/matlab/r2024a/sys/os/glnxa64/orig/libstdc++.so.6"
OBJEXT : .o
LDEXT : .mexa64
SETENV : CC="gcc"
CXX="/shared/software/lang/gcc/9.3.0/bin/g++"
CFLAGS="-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
CXXFLAGS="\-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
COPTIMFLAGS="-O2 -DNDEBUG"
CXXOPTIMFLAGS="-O2 -DNDEBUG"
CDEBUGFLAGS="-g"
CXXDEBUGFLAGS="-g"
MW_GLIBC_SHIM="$MW_GLIBC_SHIM"
LD="gcc"
LDXX="/shared/software/lang/gcc/9.3.0/bin/g++"
LDFLAGS="-pthread -Wl,--no-undefined -shared -lmwblas -lmwlapack -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map""
LDDEBUGFLAGS="-g"
GCC : /shared/software/lang/gcc/9.3.0/bin/g++
CPPLIB_DIR : /shared/software/lang/gcc/9.3.0/lib64/libstdc++.so
VER : 9.3.0
GCCDIR : /shared/software/lang/gcc/9.3.0
GCC_TARGET : x86_64-pc-linux-gnu
MATLABROOT : /gpfs20/shared/software/matlab/r2024a
ARCH : glnxa64
SRC : "/gpfs20/users/vh0010/mmx/src/mmx.cpp";"/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp"
OBJ : /tmp/mex_151339961011708370_17258/mmx.o;/tmp/mex_151339961011708370_17258/cpp_mexapi_version.o
OBJS : /tmp/mex_151339961011708370_17258/mmx.o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o
SRCROOT : /gpfs20/users/vh0010/mmx/src/mmx
DEF : /tmp/mex_151339961011708370_17258/mmx_mkl_multi.def
EXP : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.exp"
LIB : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.lib"
EXE : /gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.mexa64
ILK : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.ilk"
TEMPNAME : /gpfs20/users/vh0010/mmx/src/mmx_mkl_multi
EXEDIR : /gpfs20/users/vh0010/mmx/src/
EXENAME : mmx_mkl_multi
MANIFEST : "/gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.mexa64.manifest"
OPTIM : -O2 -DNDEBUG
LINKOPTIM : -O
CMDLINE1_0 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339961011708370_17258/mmx.o
CMDLINE1_1 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o
-------------------------------------------------------------------
Building with 'g++'.
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339961011708370_17258/mmx.o
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o
{
"bundle.symbolic_name" : "907b7d40-0501-45e1-9218-419f4150a300",
"mw" :
{
"mex" :
{
"apiVersion" : 0,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339961011708370_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339961011708370_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ -pthread -Wl,--no-undefined -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339961011708370_17258/mmx.o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o -lmwblas -lmwlapack -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339961011708370_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
Recompile embedded version with '-DMATLAB_MEXCMD_RELEASE=R2017b'
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DUSE_BLAS -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" \-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -I/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64 -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o -DMATLAB_MEXCMD_RELEASE=R2017b
{
"bundle.symbolic_name" : "0349057d-1f1d-461b-8eb1-8cbb19e22227",
"mw" :
{
"mex" :
{
"apiVersion" : 730,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339961011708370_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339961011708370_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ -pthread -Wl,--no-undefined -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339961011708370_17258/mmx.o /tmp/mex_151339961011708370_17258/cpp_mexapi_version.o -lmwblas -lmwlapack -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_mkl_multi.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339961011708370_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
MEX completed successfully.
Compilation of 'mmx_mkl_multi' succeeded.
==========
Trying to compile 'mmx_naive', using
-v, -lpthread, -DUNIX_SYSTEM,
Verbose mode is on.
... Looking for compiler 'g++' ...
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Executing command 'g++ -print-file-name=libstdc++.so' ...Yes ('/shared/software/lang/gcc/9.3.0/lib64/libstdc++.so').
... Executing command 'g++ -dumpversion' ...Yes ('9.3.0').
... Executing command 'which g++' ...Yes ('/shared/software/lang/gcc/9.3.0/bin/g++').
... Looking for folder '/shared/software/lang/gcc/9.3.0' ...Yes.
... Executing command 'g++ -dumpmachine' ...Yes ('x86_64-pc-linux-gnu').
Found installed compiler 'g++'.
Set INCLUDE = /shared/software/lang/gcc/9.3.0/lib/gcc/x86_64-pc-linux-gnu/9.3.0/include;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/x86_64-pc-linux-gnu;/shared/software/lang/gcc/9.3.0/include/c++/9.3.0/backward;/shared/software/lang/gcc/9.3.0/include
Options file details
-------------------------------------------------------------------
Compiler location: /shared/software/lang/gcc/9.3.0/bin/g++
Options file: /gpfs20/shared/software/matlab/r2024a/bin/glnxa64/mexopts/g++_glnxa64.xml
CMDLINE2 : /shared/software/lang/gcc/9.3.0/bin/g++ -pthread -Wl,--no-undefined -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339963941497994_17258/mmx.o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_naive.mexa64
CXX : /shared/software/lang/gcc/9.3.0/bin/g++
DEFINES : -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE
MATLABMEX : -DMATLAB_MEX_FILE
CFLAGS : -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv
CXXFLAGS : -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv
INCLUDE : -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include"
CXXOPTIMFLAGS : -O2 -DNDEBUG
CXXDEBUGFLAGS : -g
LDXX : /shared/software/lang/gcc/9.3.0/bin/g++
LDFLAGS : -pthread -Wl,--no-undefined
LDTYPE : -shared
LINKEXPORT : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map"
LINKEXPORTVER : -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map"
LINKLIBS : -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat
LDOPTIMFLAGS : -O
LDDEBUGFLAGS : -g
MWCPPLIB : "/gpfs20/shared/software/matlab/r2024a/sys/os/glnxa64/orig/libstdc++.so.6"
OBJEXT : .o
LDEXT : .mexa64
SETENV : CC="gcc"
CXX="/shared/software/lang/gcc/9.3.0/bin/g++"
CFLAGS="-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
CXXFLAGS="-fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE "
COPTIMFLAGS="-O2 -DNDEBUG"
CXXOPTIMFLAGS="-O2 -DNDEBUG"
CDEBUGFLAGS="-g"
CXXDEBUGFLAGS="-g"
MW_GLIBC_SHIM="$MW_GLIBC_SHIM"
LD="gcc"
LDXX="/shared/software/lang/gcc/9.3.0/bin/g++"
LDFLAGS="-pthread -Wl,--no-undefined -shared -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/mexFunction.map""
LDDEBUGFLAGS="-g"
GCC : /shared/software/lang/gcc/9.3.0/bin/g++
CPPLIB_DIR : /shared/software/lang/gcc/9.3.0/lib64/libstdc++.so
VER : 9.3.0
GCCDIR : /shared/software/lang/gcc/9.3.0
GCC_TARGET : x86_64-pc-linux-gnu
MATLABROOT : /gpfs20/shared/software/matlab/r2024a
ARCH : glnxa64
SRC : "/gpfs20/users/vh0010/mmx/src/mmx.cpp";"/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp"
OBJ : /tmp/mex_151339963941497994_17258/mmx.o;/tmp/mex_151339963941497994_17258/cpp_mexapi_version.o
OBJS : /tmp/mex_151339963941497994_17258/mmx.o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o
SRCROOT : /gpfs20/users/vh0010/mmx/src/mmx
DEF : /tmp/mex_151339963941497994_17258/mmx_naive.def
EXP : "/gpfs20/users/vh0010/mmx/src/mmx_naive.exp"
LIB : "/gpfs20/users/vh0010/mmx/src/mmx_naive.lib"
EXE : /gpfs20/users/vh0010/mmx/src/mmx_naive.mexa64
ILK : "/gpfs20/users/vh0010/mmx/src/mmx_naive.ilk"
TEMPNAME : /gpfs20/users/vh0010/mmx/src/mmx_naive
EXEDIR : /gpfs20/users/vh0010/mmx/src/
EXENAME : mmx_naive
MANIFEST : "/gpfs20/users/vh0010/mmx/src/mmx_naive.mexa64.manifest"
OPTIM : -O2 -DNDEBUG
LINKOPTIM : -O
CMDLINE1_0 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339963941497994_17258/mmx.o
CMDLINE1_1 : /shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o
-------------------------------------------------------------------
Building with 'g++'.
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -O2 -DNDEBUG "/gpfs20/users/vh0010/mmx/src/mmx.cpp" -o /tmp/mex_151339963941497994_17258/mmx.o
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o
{
"bundle.symbolic_name" : "dbdaaf1a-3f40-4941-88b1-4424b05c1266",
"mw" :
{
"mex" :
{
"apiVersion" : 0,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339963941497994_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339963941497994_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ -pthread -Wl,--no-undefined -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339963941497994_17258/mmx.o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_naive.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339963941497994_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
Recompile embedded version with '-DMATLAB_MEXCMD_RELEASE=R2017b'
/shared/software/lang/gcc/9.3.0/bin/g++ -c -DUNIX_SYSTEM -DMATLAB_DEFAULT_RELEASE=R2017b -DUSE_MEX_CMD -D_GNU_SOURCE -DMATLAB_MEX_FILE -I"/gpfs20/shared/software/matlab/r2024a/extern/include" -I"/gpfs20/shared/software/matlab/r2024a/simulink/include" -fexceptions -fPIC -fno-omit-frame-pointer -pthread -fwrapv -O2 -DNDEBUG "/gpfs20/shared/software/matlab/r2024a/extern/version/cpp_mexapi_version.cpp" -o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o -DMATLAB_MEXCMD_RELEASE=R2017b
{
"bundle.symbolic_name" : "39f85815-6cc8-4f30-86b1-504a52ea234c",
"mw" :
{
"mex" :
{
"apiVersion" : 730,
"release" : "R2024a",
"threadpoolSafe" : 0
}
}
}
/gpfs20/shared/software/matlab/r2024a/bin/glnxa64/usResourceCompiler3 --manifest-add /tmp/mex_151339963941497994_17258//mw_mex_tempmex_manifest.json --bundle-name mexVersioning --out-file /tmp/mex_151339963941497994_17258//mw_mex_tempmex_bundle.zip
/shared/software/lang/gcc/9.3.0/bin/g++ -pthread -Wl,--no-undefined -shared -O -Wl,--version-script,"/gpfs20/shared/software/matlab/r2024a/extern/lib/glnxa64/c_exportsmexfileversion.map" /tmp/mex_151339963941497994_17258/mmx.o /tmp/mex_151339963941497994_17258/cpp_mexapi_version.o -lpthread -lstdc++ -Wl,--as-needed -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/bin/glnxa64" -Wl,-rpath-link,/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64 -L"/gpfs20/shared/software/matlab/r2024a/extern/bin/glnxa64" -lMatlabDataArray -lmx -lmex -lm -lmat -o /gpfs20/users/vh0010/mmx/src/mmx_naive.mexa64 -Wl,--format=binary -Wl,/tmp/mex_151339963941497994_17258//mw_mex_tempmex_bundle.zip -Wl,--format=default
MEX completed successfully.
Compilation of 'mmx_naive' succeeded.
>>
This is working because libsingle_mkl_ilp64.so
on the MATLAB’s glnxa64 folder:
$ ls /shared/software/matlab/r2024a/extern/lib/glnxa64/libsingle_mkl_ilp64.so
/shared/software/matlab/r2024a/extern/lib/glnxa64/libsingle_mkl_ilp64.so
To compile without requiring special privileges, extra editing to the build_mmx
is needed. Basically redirecting the library paths to the location where lib single_mkl_ilp6.so is present.
Edit build_mmx.m
to search for a library in the current location (-L.
).
At the end of the compilation these files are created:
mmx.mexa64 <-- This is equivalent to mmx_mkl_single.mexa64
mmx_mkl_multi.mexa64
mmx_mkl_single.mexa64
mmx_naive.mexa64
Teting the 3 compilations of MMX¶
Now lets test the library with some examples:
For using MMX, there is no need to be inside mmx/src
but we need to declare the folder as a path for searching MEX files:
This is one simple example:
$ matlab
MATLAB is selecting SOFTWARE OPENGL rendering.
< M A T L A B (R) >
Copyright 1984-2024 The MathWorks, Inc.
R2024a Update 1 (24.1.0.2568132) 64-bit (glnxa64)
March 28, 2024
To get started, type doc.
For product information, visit www.mathworks.com.
>> addpath("mmx/src")
>> A = randn(5,4,3,10,1);
>> B = randn(4,6,3,1 ,6);
>> C = randn(5,6,3,10,6);
>> C = mmx('mult', A, B)
The output will show the resulting C array. As we are using mmx() this is the most efficient compilation using MKL.
Now is time to try all the versions to check how they perform in extreme cases.
We will try a simple exercise with large matrices using the 3 versions of MMX that we compiled
mmx_naive¶
>> N = 4096
>> A = randn(N,N,3,10,1);
>> B = randn(N,N,3,1 ,4);
>> f_naive = @() mmx_naive('mult', A, B)
>> timeit(f_naive)
Using an interactive job and running on a SKYLAKE machine with 40 cores this is the average result:
22.5
mmx_mkl_multi¶
>> N = 4096
>> A = randn(N,N,3,10,1);
>> B = randn(N,N,3,1 ,4);
>> f_mkl_multi = @() mmx_mkl_multi('mult', A, B)
>> timeit(f_naive)
Average result:
0.95
mmx_mkl_single¶
>> N = 4096
>> A = randn(N,N,3,10,1);
>> B = randn(N,N,3,1 ,4);
>> f_mkl_single = @() mmx_mkl_single('mult', A, B)
>> timeit(f_naive)
Average result:
0.72
The best version of mmx is mkl_single
which the C++ code for MMX compiled directly with MKL using the sequential libraries.
For this case it performs better than the native MKL from Matlab or the naive version. See comments from build_mmx:
$ head -n 16 mmx/src/build_mmx.m
function build_mmx(verbose)
% BUILD_MMX - compiles mmx() for different platforms and provides help
% regarding compilation.
%
% BUILD_MMX will try to compile, in this order, 3 different builds of mmx:
% mmx_mkl_single - linked to Intel's single-threaded MKL library (usually fastest)
% mmx_mkl_multi - linked to the multithreaded BLAS/LAPACK libraries that come
% with Matlab.
% mmx_naive - does not link to anything, uses simple C-loops.
%
% The first time BUILD_MMX succeeds, it will compile again to 'mmx', so
% that the mex-file mmx should be the fastest possible build on your
% system.
%
% BUILD_MMX has been tested on Win32, Win64, OSX, Linux 64
%
Conclusions¶
In this page we show how to compile MMX, a C++ Matlab plugin (MEX file) that uses Intel MKL. The code was compiled without access to superuser privileges on a normal user folder.
MMX was compiled in 3 different flavors and a simple test example was used to demonstrate the performance of those 3 cases for large matrices.