首页 > 编程语言 >python高性能计算:cython使用openmp并行 —— 报错:undefined symbol: omp_get_thread_num

python高性能计算:cython使用openmp并行 —— 报错:undefined symbol: omp_get_thread_num

时间:2024-07-30 19:40:38浏览次数:17  
标签:cython thread get long running num 报错 test

test.pyx文件:

from cython.parallel cimport parallel
from openmp cimport omp_get_thread_num




cpdef void long_running_task1() noexcept nogil:
    while True:
        pass

cpdef void long_running_task2() noexcept nogil:
    while True:
        pass

def do_two_tasks():
    cdef int thread_num
    with nogil, parallel(num_threads=2):
        thread_num = omp_get_thread_num()
        if thread_num == 0:
            long_running_task1()
        elif thread_num == 1:
            long_running_task2()


do_two_tasks()


cython的编译文件:

test_setup.py

from distutils.core import setup, Extension
from Cython.Build import cythonize


ext_modules = [
    Extension(
        "test",
        ["test.pyx"],
        extra_compile_args=['-fopenmp'],
        extra_link_args=['-fopenmp'],
    )
]


setup(
  name = 'test v1',
  ext_modules = cythonize(ext_modules, 
                          #compiler_directives={'language_level' : "3"}
                          # or "2" or "3str"
                          ),
)


编译test.pyx:

python test_setup.py build_ext --inplace

报错:

undefined symbol: omp_get_thread_num



修改代码:添加一行内容:cimport openmp

cimport openmp
from cython.parallel cimport parallel
from openmp cimport omp_get_thread_num




cpdef void long_running_task1() noexcept nogil:
    while True:
        pass

cpdef void long_running_task2() noexcept nogil:
    while True:
        pass

def do_two_tasks():
    cdef int thread_num
    with nogil, parallel(num_threads=2):
        thread_num = omp_get_thread_num()
        if thread_num == 0:
            long_running_task1()
        elif thread_num == 1:
            long_running_task2()


do_two_tasks()


问题解决:

运行效果:

image

成功达到200%的进程CPU使用率。



标签:cython,thread,get,long,running,num,报错,test
From: https://www.cnblogs.com/devilmaycry812839668/p/18333227

相关文章

  • unity报错CommandWithNoStdoutInvokationFailure: Unable to start ADB server.
    这个错误提示表明Unity无法启动ADB(AndroidDebugBridge)服务器,这通常是因为AndroidSDK没有安装或者配置不正确。以下是一些解决这个问题的步骤:确认AndroidSDK的安装:确保你已经安装了AndroidSDK。可以通过AndroidStudio来安装SDK,或者从Android开发者网站下载。配置U......
  • 踩坑日记2:idea上git提交出现443报错
    idea代码push踩坑不改代理配置会出现Git报错:Failedtoconnecttogithub.comport443解决方案:https://blog.csdn.net/zpf1813763637/article/details/1283401091.找到代理的端口号在电脑上搜索代理服务器即可2.输入以下指令gitconfig--global--replace-allhttp.prox......
  • 题解:[ABC363D] Palindromic Number
    提示特定位数的回文数数量是可以快速计算出来的,对于特定的位数\(n\),第一位由于不能有前导\(0\),共有\(9\)种选择,而从第\(2\)位到第\(\frac{n+1}{2}\)位都有\(10\)种选择(一个回文数完全由它的前半部分确定)。所以\(n\)位数中共有\(S(n)=9*10^\frac{n-1}{2}......
  • Python 环境配置(二)安装jupyter、matplotlib、numpy库
    Python环境配置(二)安装jupyter、matplotlib、numpy库一、numpypipinstallnumpy二、matplotlibpipinstallmatplotlib三、jupyter1、anaconda自带Jupyter2、pycharm插件只有Pycharm的Professional版才支持JupyterNotebook,请注意版本3、新建文件#%......
  • canal 报错:Could not find first log file name in binary log index file
    canalwiki地址:https://github.com/alibaba/canal/wiki/canal报错:Couldnotfindfirstlogfilenameinbinarylogindexfile1、canal_deployer日志报错:2024-07-2914:25:21.624[destination=example,address=/192.168.1.7:3306,EventParser]ERRORc.a.o.c.p.......
  • 解决mv cp rm 时文件个数太多Argument list too long报错
    问题今天复制文件时出现“Argumentlisttoolong”的问题,简单理解就是你的目录下文件个数太多了,命令参数太长,执行失败解决方法findceshi/-name"*.html"|xargs-imv{}OCRhtml1解释一下:findceshi/-name".html"是指在源文件夹ceshi下查找名为.html的文件,即所有的html后......
  • Pandas 和 Numpy 版本的问题
    我认为有很多冲突。我试图在笔记本中运行一些代码并收到以下消息:ImportError:此版本的pandas与numpy<1.16.5不兼容你的numpy版本是1.16.2。请将numpy升级到>=1.16.5以使用此pandas版本我安装了pandas1.2.2版本。我运行了condaupdaten......
  • 网站报错“internal server error”
    错误记录:网站报错“internalservererror”错误原因:1、数据库问题2、配置问题3、中毒引起4、程序漏洞 5、日常维护解决方案:使用排查方法,不同网站处理方案有所差异。不过大多属于数据库问题(网站读写操作都在数据库,数据库如果异常的话,访问不正常,遇......
  • 做Spring Boot图书后台管理项目遇到分页报错的问题
    一、问题    实现分页功能时,点击第几页或者下一页时报错404二、分析问题   1、 使用的是MyBatisPlus框架,实现分页功能需要拦截器,可能是没有添加拦截器。检查是否添加配置类并添加拦截器PageConfiguration配置类/***配置类,用于SpringBoot项目......
  • SSM整合Web工程报错Unable to locate Spring NamespaceHandler for XML schema namesp
    博主在启动Tomcat后报错这个 org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configurationproblem:UnabletolocateSpringNamespaceHandlerforXMLschemanamespace[http://www.springframework.org/schema/tx]Offendingresource:cl......