How to run matlab coder generated code in serial / How to tell matlab coder not to use tbb libraries
3 views (last 30 days)
Show older comments
I'm using Matlab coder for generating c++ code.
I see that Matlab uses an internal Matlab libraries (dlls and libs) like:
libmwmorphop_binary_tbb.lib
libmwbwlookup_tbb.lib
Which is any library in the following format:
libmw*_tbb.lib
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.
First try:
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.
Second try:
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.
omp_set_num_threads(1);
tbb::task_scheduler_init tbbInit(1);
Third try:
I run the coder one more time. Matlab doesn’t change the code, the code still uses matlab’s tbb functions.
Forth try
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
0 Comments
Answers (1)
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.
5 Comments
Ashish Uthama
on 22 Apr 2020
At this time, it might be best to create a formal service request for us to help you out better:
https://www.mathworks.com/support/contact_us.html
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!