Python Cython nested prange不';行不通

Python Cython nested prange不';行不通,python,c,multithreading,openmp,cython,Python,C,Multithreading,Openmp,Cython,我试图利用prange并行运行我的循环。 我正在使用嵌套的prange。但是在调试期间,我没有得到期望的结果 这是我的代码: %%cython # distutils: language = c++ # distutils: extra_compile_args = -fopenmp # distutils: extra_link_args = -fopenmp cimport cython.parallel as parallel from libcpp.vector cimport vect

我试图利用
prange
并行运行我的循环。 我正在使用嵌套的
prange
。但是在调试期间,我没有得到期望的结果

这是我的代码:

%%cython
# distutils: language = c++
# distutils: extra_compile_args = -fopenmp
# distutils: extra_link_args = -fopenmp
cimport cython.parallel as parallel
from libcpp.vector cimport vector

cdef int current_row, current_col
cdef int current_thread_id

cdef vector[int] container_1
cdef vector[int] container_2

for current_row in parallel.prange(1000, num_threads=10, nogil=True):
    for current_col in parallel.prange(1000, num_threads=10):
        current_thread_id = parallel.threadid()
        if current_thread_id == 4:
            container_1.push_back(current_row)
            container_2.push_back(current_col)

print container_1[0], ' ', container_2[0]

print container_1.back(), ' ', container_2.back()
这是我从输出中得到的结果:

400   0
499   999
正如我看到的,每个线程的内部循环总是完全执行的。 是否可以使嵌套的
prange
s工作?
如果是,如何跟踪外部线程id和内部线程id?

为什么要使用OpenMP标记?这似乎与OpenMP没有任何关联…@JimCownie Cython prange使用OpenMP作为其机制,因此标记在某种程度上是相关的(尽管我同意,但并不完全相关)。@warmspringwinds-看看这个问题的答案(在其他问题中)。我认为你不能使用Cython的
collapse
功能。为什么你需要并行两个循环?@warmspringfinds这个问题解决了吗?