summaryrefslogtreecommitdiff
path: root/docs/examples/userguide/parallelism/parallel.py
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/userguide/parallelism/parallel.py')
-rw-r--r--docs/examples/userguide/parallelism/parallel.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/docs/examples/userguide/parallelism/parallel.py b/docs/examples/userguide/parallelism/parallel.py
new file mode 100644
index 000000000..0fb62d10f
--- /dev/null
+++ b/docs/examples/userguide/parallelism/parallel.py
@@ -0,0 +1,30 @@
+from cython.parallel import parallel, prange
+from cython.cimports.libc.stdlib import abort, malloc, free
+
+@cython.nogil
+@cython.cfunc
+def func(buf: cython.p_int) -> cython.void:
+ pass
+ # ...
+
+idx = cython.declare(cython.Py_ssize_t)
+i = cython.declare(cython.Py_ssize_t)
+j = cython.declare(cython.Py_ssize_t)
+n = cython.declare(cython.Py_ssize_t, 100)
+local_buf = cython.declare(p_int)
+size = cython.declare(cython.size_t, 10)
+
+with cython.nogil, parallel():
+ local_buf: cython.p_int = cython.cast(cython.p_int, malloc(cython.sizeof(cython.int) * size))
+ if local_buf is cython.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)