相关疑难解决方法(0)

cython中的cython共享内存.parallel.prange - block

我有一个函数foo,它将一个指向内存的指针作为参数,并且对该内存进行写入和读取:

cdef void foo (double *data):
   data[some_index_int] = some_value_double
   do_something_dependent_on (data)
Run Code Online (Sandbox Code Playgroud)

data这样分配:

cdef int N = some_int
cdef double *data = <double*> malloc (N * sizeof (double))

cdef int i
for i in cython.parallel.prange (N, nogil=True):
    foo (data)

readout (data)
Run Code Online (Sandbox Code Playgroud)

我现在的问题是:不同的线程如何对待这个?我的猜测是指向的内存data将由所有线程共享,并在函数内部"同时"读取或写入foo.这会弄乱所有结果,因为人们不能依赖先前设定的数据值(内部foo)?我的猜测是正确的还是在cython编译器中实现了一些神奇的安全带?

非常感谢你提前.

python malloc parallel-processing cython python-multithreading

11
推荐指数
2
解决办法
3091
查看次数