Interoperability with OpenMP

The OpenMP-based version of the library allows a simple interaction between an application that uses OpenMP for parallelization and the library. For instance, calling NVPL BLAS functions from the parallel section would lead to a single-threaded execution unless OpenMP nested parallelism is allowed. Also, the library would comply with OpenMP-based setting of number of threads (such as omp_set_num_threads() function and OMP_NUM_THREADS environment variable).

There are some limitations:

  1. Currently NVPL BLAS doesn’t support dynamic adjustment of threads (e.g. OMP_DYNAMIC=true). To work-around this, in case the library function is invoked in such environment, the library would call omp_set_dynamic(0), call the function, and reset the setting by calling omp_set_dynamic(1).