Cython嵌套prange不起作用

时间:2015-06-30 09:14:47

标签: 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 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起作用? 如果是,我如何跟踪外部线程ID和内部线程ID?

0 个答案:

没有答案