当前位置: 首页 > 面试题库 >

OpenMP和Python

澹台承
2023-03-14
问题内容

我有为共享内存机器(在C和FORTRAN中)编码OpenMP的经验,可以执行简单的任务,例如矩阵加法,乘法等(仅看它如何与LAPACK竞争)。我知道OpenMP足以执行简单的任务,而无需查看文档。

最近,我转向项目的Python,除了绝对的基础知识之外,我对Python没有任何经验。

我的问题是:

在Python中使用OpenMP的 最简单 方法是什么?最简单的说,我是指在程序员方面花费最少的工作的人(即使这是以增加系统时间为代价的)?

我使用OpenMP的原因是因为可以将串行代码转换为工作的并行代码,并!$OMP散布几秒钟。实现 粗略
并行化所需的时间非常短。有什么办法可以在Python中复制此功能

通过浏览SO,我可以找到:

  • C扩展
  • StackLess Python

还有更多吗?哪个最符合我的问题?


问题答案:

由于GIL,在CPython中没有必要将线程用于CPU密集型任务。您需要进行多重处理或使用在计算过程中释放GIL的C扩展,例如,一些numpy函数示例。

您可以轻松地在示例Cython中编写使用多个线程的C扩展。



 类似资料:
  • OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套编译指令 (Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMP的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMP提供了对

  • 本文向大家介绍什么是OpenMP?,包括了什么是OpenMP?的使用技巧和注意事项,需要的朋友参考一下 OpenMP是一组编译器指令以及用于以C,C ++或FORTRAN编写的程序的API,可为共享内存环境中的并行编程提供支持。OpenMP将并行区域标识为可以并行运行的代码块。应用程序开发人员在其并行区域的代码中插入编译器指令,这些指令指示OpenMP运行时库并行执行该区域。下面的C程序在包含pr

  • 我正在使用建模工具箱Anuga,并已将其设置为运行并行支持。据我目前所知,背后的机制是Numpy被C中的模块扩展,这些模块通过 我已经开发并测试了一个脚本,可以通过

  • 我一直在用OpenMP调用这个 在C11 std::threads中(我相信这些只是pthreads) 但是,OpenMP的实现速度是原来的两倍——更快!我本以为C11线程会更快,因为它们更低级。注意:上面的代码在一个循环中不仅被调用了一次,而且可能被调用了10000次,所以这可能与此有关吗? 编辑:为了澄清,在实践中,我要么使用OpenMP,要么使用C 11版本——不是两者都使用。当我使用Ope

  • 这是我现在实际做的事情,因为我的部分代码使用超线程会得到更糟糕的结果,所以我将线程数降低到物理核心数(仅针对这部分代码)。如果我做了相反的事情(4个线程,然后8个,然后4个)呢? 线程池必须在每次更改线程数时重新创建吗?如果不是,添加或删除线程是否会导致任何显著的开销? 线程池的开销是多少,即每个线程有多少部分的工作流到池中?

  • 本文向大家介绍详解CLion配置openMP的方法,包括了详解CLion配置openMP的方法的使用技巧和注意事项,需要的朋友参考一下 使用MinGW64在Clion中配置openMP的开发 安装MinGW64和CLion配置CMakeList.txtCLion 2020.2.3 Build #CL-202.7319.72, built on September 18, 2020 对openMP编