我正在尝试使用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?