cython 中的关键部分

Yan*_*Leo 5 c++ python openmp cython critical-section

在 cython 中使用 prange 时如何处理 cython 中的关键部分?

#pragma omp important是否允许?

for e in prange(num,nogil=True,num_threads=4):
.
.
.
  #pragma omp critical
  cs
.
.
.
end_for
Run Code Online (Sandbox Code Playgroud)

小智 3

要处理关键部分,您可以使用 openmp 锁。为此,请使用以下命令导入它

cimport openmp
Run Code Online (Sandbox Code Playgroud)

然后初始化它

cdef openmp.omp_lock_t lock
openmp.omp_init_lock(&lock)
Run Code Online (Sandbox Code Playgroud)

并这样使用它

with nogil, cython.boundscheck(False), cython.wraparound(False):
    for i in parallel.prange(n, schedule = 'static', 
                             num_threads = num_threads):
        .
        .
        .
        openmp.omp_set_lock(&lock)
        cs
        openmp.omp_unset_lock(&lock)
        .
        .
        .
Run Code Online (Sandbox Code Playgroud)