相关疑难解决方法(0)

OpenMP和Python

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

最近,我为我的项目转移到Python,除了绝对的基础知识,我没有任何Python经验.

我的问题是:

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

我使用OpenMP的原因是因为串行代码可以转换为一个工作的并行代码,其中有几个!$OMP散布在周围.实现粗略并行化所需的时间非常小.有没有办法在Python中复制这个功能?

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

  • C扩展
  • StackLess Python

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

python parallel-processing openmp

53
推荐指数
6
解决办法
7万
查看次数

是否将共享只读数据复制到不同进程以进行多处理?

我看到的那段代码看起来像这样:

glbl_array = # a 3 Gb array

def my_func( args, def_param = glbl_array):
    #do stuff on args and def_param

if __name__ == '__main__':
  pool = Pool(processes=4)
  pool.map(my_func, range(1000))
Run Code Online (Sandbox Code Playgroud)

有没有办法确保(或鼓励)不同的进程没有获得glbl_array的副本但共享它.如果没有办法停止复制,我将使用memmapped数组,但我的访问模式不是很规律,所以我希望memmapped数组更慢.以上似乎是第一个尝试的事情.这是在Linux上.我只是想从Stackoverflow获得一些建议,并且不想惹恼系统管理员.你认为它会帮助,如果第二个参数是像一个真正的不可变对象glbl_array.tostring().

python numpy multiprocessing

52
推荐指数
3
解决办法
4万
查看次数

python/numpy中的多线程blas

我试图在Python中实现大量的矩阵 - 矩阵乘法.最初,我假设NumPy将自动使用我的线程BLAS库,因为我是针对这些库构建的.但是,当我查看顶部或其他内容时,似乎代码根本不使用线程.

任何想法是什么错误或我可以做些什么来轻松使用BLAS性能?

python numpy scientific-computing blas

45
推荐指数
2
解决办法
3万
查看次数