首页 > 其他分享 >ZPN项目 3:使用 Intel ICX 编译多线程动态运行时pyd的失败记录

ZPN项目 3:使用 Intel ICX 编译多线程动态运行时pyd的失败记录

时间:2023-11-06 10:11:05浏览次数:33  
标签:Intel 编译 编译器 icx 模块 ZPN 多线程 pyd

使用Pybind11,可以生成供python调用接口的C++动态链接库,该库包含一个符合python启动签名的函数,并以pyd为后缀。

编译生成该库,与生成一般C++库基本一致。特殊地,当采用以下全部配置生成时,程序的调用将失败:

  • 使用icx-cl编译器(兼容MSVC编译器标识的 icx 编译器)
  • 使用多线程动态运行时标识 /MD

在python解释器中产生的异常信息为:ImportError: DLL load failed: 找不到指定的模块

模块导入异常往往是由于找不到依赖树中的某个模块。然而,通过DependenciesUI的分析,该依赖树中并没有找不到的模块。

下图为笔者分别采用 icx 和 cl 编译器在 /MD 设置下编译生成的pyd库的依赖树:

可见:

  • 所有模块均在当前环境路径下可见,并能成功加载。
  • 两种编译器产生的依赖树是不同的。

其中,对 kernel32.dll 的二级依赖 ext-ms-win-oobe-query-l1-1-0.dll 失败,但此项为延迟加载,故不会导致上述异常。参见:

  • https://learn.microsoft.com/en-us/answers/questions/1195445/kernel32-dll-dependenci-ext-ms-win-oobe-query-l1-1
  • https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-apisets#api-set-contract-names

后续的测试计划,用于判断是否此问题与pybind11有关,即:

在C++应用中,引用一个不含pybind11的库,该库采用icx /MD编译,若应用同样产生加载异常,则可排除pybind11的影像。

标签:Intel,编译,编译器,icx,模块,ZPN,多线程,pyd
From: https://www.cnblogs.com/heroius/p/17811888.html

相关文章

  • 有趣的Java之网络多线程——UDP编程
    UDP编程通信基本介绍类DatagramSocket和DatagramPacket【数据包/数据报】实现了基于UDP协议网络程序。UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能安全送到目的地,也不确信什么时候可以抵达。DatagramPacket对象封装了UDP数据报,在数据报中包含了发......
  • 一文读懂ReentrantLock在多线程编程中的作用和优点
    引言在当今这个数字化时代,软件开发已经离不开多线程编程。但是,多线程编程也带来了一系列复杂性和挑战,其中最关键的一个问题就是线程同步和互斥。为了应对这个问题,Java语言提供了一些工具,其中最强大的工具之一就是ReentrantLock。本文将对ReentrantLock进行深入探讨,介绍它在多线程编......
  • 深入研究synchronized:解锁高效多线程编程的秘诀
    大家好,我是老七,点个关注吧,将持续更新更多精彩内容!在Java的多线程编程里,让多个线程能够安全、高效地协同工作是非常重要的。而synchronized这个关键字,就是一个很重要的工具,可以帮助我们实现多线程同步。本文会深入讨论synchronized的作用、使用方法、工作原理,以及它和其他锁机制的比......
  • IntelliJ IDEA怎样更改JDK版本
    一、如果想要更换Idea所使用的JDK版本,可以按照以下步骤进行:在操作系统中安装需要更换的JDK版本打开Idea,点击“File”->“ProjectStructure”->“SDKs”点击“+”添加新的JDK版本,并选择对应的JDK路径找到需要更换JDK版本的项目,在“ProjectStructure”中选择对应的JDK版本即可......
  • IntelliJ IDEA在运行Applet小程序时中文乱码
    解决方法如下:第一种方法:在主界面点击文件→设置然后在设置界面选择编辑器→FileEncodings然后在下图所示界面的红框处,将utf-8改成GBK,确定保存即可第二种方法:在你所编辑的.java文件的右下方有一个编码方式,将其改为GBK然后点击convert即可.......
  • Java多线程
    构造方法//参数最全的构造方法publicThreadPoolExecutor(intcorePoolSize,//核心线程数intmaximumPoolSize,//最大线程数longkeepAliveTime,//非核心线程最长等待新任务的时间TimeUnituni......
  • 01-02异步多线程基础概念
    任何异步多线程都离不开委托delegate--lambda-action/Func委托的异步调用异步多线程:发起调用,不等待结束就直接进入下一行(主线程)动作会有新的线程执行.线程特点特点一:多线程和界面使用(说白了,多线程就是为了给大量计算创建子线程,然后先执行完后面代码)场......
  • C++使用多线程将数据写入文件
    #include<iostream>#include<vector>#include<thread>#include<fstream>//使用多线程将数据写入文件voidwriteToFile(conststd::vector<std::string>&data,conststd::string&filename){//创建一个文件输出流std::ofstreamfile......
  • Task异步多线程
    不废话,直接贴上代码...【1】直接实现多线程:`usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceTask异步多线程{classProgram{staticvoidMain(string[]args){......
  • IntelliJ IDEA 2020.03 一下版本激活
    1.下载https://www.jetbrains.com/idea/download/other.html2.安装省略了一步步往下3.下载激活文件先下载激活文件链接:https://pan.baidu.com/s/1gfXCr8Htb3D-I7CW5ND41A?pwd=d86h提取码:d86h4.激活配置好jdk那些就不说了打开软件先点击试用30天进入后随便打开一个项目......