[英]Parallelism in Cython does not work
我有一個以下的Cython
代碼:
from cython import parallel
from libc.stdio cimport printf
def test_func():
cdef int thread_id = -1
with nogil, parallel.parallel(num_threads=10):
thread_id = parallel.threadid()
printf("Thread ID: %d\n", thread_id)
但是,它始終只啟動一個線程,即始終只輸出
Thread ID: 0
我在做多線程時做錯了什么?
Cython使用OpenMP來實現多線程功能。
要啟用OpenMP,編譯器將需要在編譯和鏈接時傳遞一個額外的標志,否則將忽略代碼的並行部分。
一些流行的編譯器的標志如下:
假設您已將函數保存在test.pyx
文件中,則在使用GCC時,以下setup.py
應該可以正常工作。
from distutils.core import setup, Extension
from Cython.Build import cythonize
extensions = [Extension(
"test",
sources=["test.pyx"],
extra_compile_args=["-fopenmp"],
extra_link_args=["-fopenmp"]
)]
setup(
ext_modules = cythonize(extensions)
)
一旦這樣編譯,代碼應該在運行時產生10個線程:
In [1]: import test
In [2]: test.test_func()
Thread ID: 9
Thread ID: 1
Thread ID: 6
Thread ID: 7
Thread ID: 3
Thread ID: 8
Thread ID: 5
Thread ID: 4
Thread ID: 0
Thread ID: 2
如果你想在cython文檔中獲得比這個頁面更多的信息,那么有一個很好的基本指南,介紹如何使用cython的並行性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.