How to run matlab coder generated code in serial / How to tell matlab coder not to use tbb libraries
4 views (last 30 days)
Show older comments
TripleSSSS on 31 Mar 2020
Commented: TripleSSSS on 23 Apr 2020
I'm using Matlab coder for generating c++ code.
I see that Matlab uses an internal Matlab libraries (dlls and libs) like:
Which is any library in the following format:
Due to an overall system performance, I'd like not to use the tbb libraries of Matlab - How can I generate code that does that ? (Please consider that package command shall pack all the non tbb libraries)
I also searched on Matlab installation folder and found that for every tbb library there is a matching non tbb library.
Ashish Uthama suggestion:
start matlab with -singleCompThread doesn't chagne the generated code or dependent dlls from matlab coder.
I tried to replace the libraries between the tbb version to the non tbb version - however matlab have different functions signature to the tbb functions - therefor this endeavor didn't work.
First try continues:
I manually changed the code and used the non tbb functions, I linked against the non tbb libraries.
matlab code still runs in parallel.
From the thread that calls my matlab generated function in C++ , I executed the following commands:
Unfortunately the code still runs in parallel. It’s most likely that these code doesn’t change the execution for sealed matlab dll.
I set the coder configuration: “enable openmp flag” to false.
I run the coder one more time. Matlab doesn’t change the code, the code still uses matlab’s tbb functions.
I run the visual studio profiler, there was one line with a large portion of execution time:
kmp implicit barrier
I called off kmp by setting the environment variable
KMP_DEVICE_THREAD_LIMIT to 1
Now my matlab function doesn’t create extra superfluous threads
I don’t know what matlab are doing under the hood however setting this environment variable now makes my application run single threaded
Maybe someone from matlab would give a more detail explanation
Setting the environment variable changes the whole system behavior. If there are other processes that uses openMP I’d limit their number of threads too. How to apply this change only for single thread or a single process.
Any help would be highly appreciated
Ashish Uthama on 31 Mar 2020
Edited: Ashish Uthama on 31 Mar 2020
Would you please try starting MATLAB with -singleCompThread on the session that is generating the code and check if that works for you? This ought to force MATLAB Coder to use the non-tbb versions of the libraries.
I understand this was not easily discoverable.
Could you elaborate more on why you want to do this (generate single thread code for the host)? Knowing that will help us figure out how to address this pain better in the future.
Find more on MATLAB Coder in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!