在Python'中使用零拷贝共享scipy.sparse数组;s射线
我将大型数组传递给一个计算节点共享内存上的并行进程。在每一轮并行作业中,传递的数组不会被修改。我想传递零拷贝的数组 虽然这在和numpy.sharedmem(请参阅)中是可能的,但我想知道如何工作 据我所知(请参阅,[],[]),ray的put()将对象一次性(序列化,然后反序列化)复制到可用于所有进程的对象存储中 问题: 我不确定我是否正确理解了它,它是对象存储中整个数组的深层副本还是只是对它的引用?有没有办法“不”复制对象?而是传递现有scipy数组的地址/引用?基本上,这是一个真正的浅拷贝,不需要复制整个阵列的开销在Python'中使用零拷贝共享scipy.sparse数组;s射线,python,scipy,multiprocessing,shared-memory,ray,Python,Scipy,Multiprocessing,Shared Memory,Ray,我将大型数组传递给一个计算节点共享内存上的并行进程。在每一轮并行作业中,传递的数组不会被修改。我想传递零拷贝的数组 虽然这在和numpy.sharedmem(请参阅)中是可能的,但我想知道如何工作 据我所知(请参阅,[],[]),ray的put()将对象一次性(序列化,然后反序列化)复制到可用于所有进程的对象存储中 问题: 我不确定我是否正确理解了它,它是对象存储中整个数组的深层副本还是只是对它的引用?有没有办法“不”复制对象?而是传递现有scipy数组的地址/引用?基本上,这是一个真正的浅拷贝
Ubuntu 16.04,Python 3.7.6,Ray 0.8.5。这也有助于理解零拷贝读取是如何工作的
scipy.sparse
matrix不是ndarray
子类。它是一个自定义Python类,或者更确切地说是类。不同的格式具有不同的类和数据存储属性。一个实际上是一个字典子类,另一个将数据(和索引)存储在多个ndarray
@hpaulj中。这没问题。我可以将scipy稀疏数组的组件(如非零数据)及其索引作为ndarray传递。