| # Helpers to safely access OpenMP routines | |
| # | |
| # no-op implementations are provided for the case where OpenMP is not available. | |
| # | |
| # All calls to OpenMP routines should be cimported from this module. | |
| cdef extern from *: | |
| """ | |
| #ifdef _OPENMP | |
| #include <omp.h> | |
| #define SKLEARN_OPENMP_PARALLELISM_ENABLED 1 | |
| #else | |
| #define SKLEARN_OPENMP_PARALLELISM_ENABLED 0 | |
| #define omp_lock_t int | |
| #define omp_init_lock(l) (void)0 | |
| #define omp_destroy_lock(l) (void)0 | |
| #define omp_set_lock(l) (void)0 | |
| #define omp_unset_lock(l) (void)0 | |
| #define omp_get_thread_num() 0 | |
| #define omp_get_max_threads() 1 | |
| #endif | |
| """ | |
| bint SKLEARN_OPENMP_PARALLELISM_ENABLED | |
| ctypedef struct omp_lock_t: | |
| pass | |
| void omp_init_lock(omp_lock_t*) noexcept nogil | |
| void omp_destroy_lock(omp_lock_t*) noexcept nogil | |
| void omp_set_lock(omp_lock_t*) noexcept nogil | |
| void omp_unset_lock(omp_lock_t*) noexcept nogil | |
| int omp_get_thread_num() noexcept nogil | |
| int omp_get_max_threads() noexcept nogil | |