Intel® oneAPI Threading Building Blocks
Ask questions and share information about adding parallelism to your applications when using this threading library.

IRML on windows

renorm
Beginner
1,587 Views
TBB windows binaries have irml folder with irml.lib and irml.dll files inside. But building the library from the source code doesn't produce any irml files. Do I really need those files to use TBB with Visual C++ and MinGW?

Thank you.
0 Kudos
2 Replies
ARCH_R_Intel
Employee
1,587 Views

You probably do not need those files. tbb.dll has its own "private RML" that it uses if it cannot connect to irml.dll. The source for the private version is in src/tbb/private_server.cpp, and linked intotbb.dll.

The files irml{lib,dll} are the "shared RML" The purpose of the "shared RML" is twofold:

  • Mediate thread subscription level between TBB and OpenMP.
  • Act as an interface to other subscription level managers like Microsoft's ConcRT in VS2010.

If you are not mixing in OpenMP or using ConcRT, then just skip the shared RML. The most frequent case where it is helpful is when TBB code calls the Intel MKL or IPP libraries, which sometimes use OpenMP internally.

0 Kudos
ARCH_R_Intel
Employee
1,587 Views
If you do want to build the RML, run "gmake rml". That will build the RML dynamic library (e.g. irml.dll). It should be put in the same directory as the TBB dynamic library. Building it also causes a few tests to be run:
[plain]./test_job_automaton.exe
done
./test_thread_monitor.exe
done
./test_rml_tbb.exe
done
./test_rml_omp.exe
done
./test_rml_mixed.exe
done
./test_rml_omp_c_linkage.exe
done[/plain]
The tests do not require an OpenMP enabled compiler. They merely simulate the behavior of an OpenMP client of the RML. If your machine is overloaded with other tasks, you may see some warnings that the RML did not deliver the number of requested threads.

To check that TBB is really using the RML, set the environment variable TBB_VERSION=1 and run a test that exercises the task scheduler. E.g., run test_task.exe. That should cause the TBB dynamic library to print diagnostic information on stderr that looks like this:
TBB: VERSION            3.0
TBB: INTERFACE VERSION  5000
TBB: BUILD_DATE         Mon May 10 14:17:56 UTC 2010
...
TBB: RML        shared
TBB: Intel RML library built: Mon May 10 14:17:56 UTC 2010
TBB: Intel RML library version: v2
...

Word "shared" in the bold line says that the shared dynamic library RML is in use. If it says "private", that means that the TBB dynamic library cannot find the RML dynamic library, and has fallen back on its private RML.
0 Kudos
Reply