1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
from cython.parallel import parallel, prange
from libc.stdlib cimport abort, malloc, free
cdef void func(int *buf) nogil:
pass
# ...
cdef Py_ssize_t idx, i, j, n = 100
cdef int * local_buf
cdef size_t size = 10
with nogil, parallel():
local_buf = <int *> malloc(sizeof(int) * size)
if local_buf is NULL:
abort()
# populate our local buffer in a sequential loop
for i in range(size):
local_buf[i] = i * 2
# share the work using the thread-local buffer(s)
for j in prange(n, schedule='guided'):
func(local_buf)
free(local_buf)
|