I am using Intel OpenMP on Windows (libiomp5md.dll). Recently I found a strange thing - from time to time my algorithm hangs - all 8 threads cannot enter a named section (declared with #pragma omp critical (sectionname)), although the section name is unique across the code. But the oddest thing about it is that I find tbb.dll among the loaded modules though I do not use TBB and don't link with it.
Also, I then found another version of tbb.dll and tbbmalloc.dll, which I copied to the program directory - with these other DLLs the problem has gone. libiomp5md.dll does not statically depend on any DLLs except ntdll, kernel32 and kernelbase. Am I right that libiomp5md.dll dynamically loads tbb.dll, imports symbols and uses them then?
If so, how can I find out which version of TBB I should use with a particular version of OpenMP?
As far as I can determine, OpenMP uses the TBB scalable allocator to improve OpenMP Task enqueing. As to if it is using any other portions of TBB, I haven't seen any indication of this.