相关疑难解决方法(0)

在多处理过程之间共享大型只读Numpy数组

我有一个60GB的SciPy数组(矩阵)我必须在5个以上的multiprocessing Process对象之间共享.我已经看过numpy-sharedmem并在SciPy列表上阅读了这个讨论.似乎有是两个approaches-- numpy-sharedmem和使用multiprocessing.RawArray(),并映射NumPy的dtypes到ctype秒.现在,numpy-sharedmem似乎是要走的路,但我还没有看到一个很好的参考例子.我不需要任何类型的锁,因为数组(实际上是矩阵)将是只读的.现在,由于它的大小,我想避免副本.这听起来像是正确的方法是创建唯一的数组作为副本sharedmem数组,然后将它传递给Process对象?几个具体问题:

  1. 将sharedmem句柄实际传递给子的最佳方法是Process()什么?我是否需要一个队列来传递一个阵列?管道会更好吗?我可以将它作为参数传递给Process()子类的init(我假设它被腌制)吗?

  2. 在上面我讨论过的讨论中,有人提到numpy-sharedmem不是64位安全吗?我肯定使用一些不是32位可寻址的结构.

  3. 这种RawArray()方法是否存在权衡?更慢,更笨?

  4. 我是否需要numpy-sharedmem方法的任何ctype-to-dtype映射?

  5. 有没有人有一些OpenSource代码这样做的例子?我是一个非常亲力实践的人,如果没有任何好的例子,很难让它工作.

如果我可以提供任何其他信息以帮助其他人澄清这一点,请发表评论,我将添加.谢谢!

这需要在Ubuntu Linux和Maybe Mac OS上运行,但可移植性不是一个大问题.

python numpy shared-memory multiprocessing

79
推荐指数
4
解决办法
2万
查看次数

使用OpenBLAS集成编译numpy

我试图安装numpyOpenBLAS,但我在损失的如何site.cfg文件需要被写入.

在遵循安装过程时,安装完成且没有错误,但是将OpenBLAS使用的线程数从1增加(由环境变量OMP_NUM_THREADS控制)会导致性能下降.

我不确定OpenBLAS集成是否完美.任何人都可以提供一个site.cfg文件来实现相同的目标.

PS:OpenBLAS集成在其他工具包中,比如基于Python的Theano,可以在同一台机器上增加线程数量,从而大幅提升性能.

python numpy blas atlas

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

在 python-opencv 中使用多线程时是否发布了 GIL?

我正在使用 numpy 和 opencv 对大量图像在 python3 中进行大量图像处理。我知道 python 有这个 GIL 可以防止两个线程同时运行。在 Google 上的快速搜索告诉我,不要将 Python 中的线程用于 CPU 密集型任务,仅将它们用于 I/O 或将文件保存到磁盘、数据库通信等。我还读到 GIL 在使用 C 扩展时被释放。由于 numpy 和 opencv 都是 C 和 C++ 扩展,我觉得 GIL 可能会发布。我不确定,因为图像处理是 CPU 密集型任务。我的直觉是正确的还是我更擅长使用多处理?

opencv numpy gil python-3.x

6
推荐指数
1
解决办法
1107
查看次数

标签 统计

numpy ×3

python ×2

atlas ×1

blas ×1

gil ×1

multiprocessing ×1

opencv ×1

python-3.x ×1

shared-memory ×1