Python 并行填充矩阵
我需要通过对向量对之间的函数求值来常规填充矩阵Python 并行填充矩阵,python,parallel-processing,vectorization,joblib,Python,Parallel Processing,Vectorization,Joblib,我需要通过对向量对之间的函数求值来常规填充矩阵A[I,j],因为每个I,j-对的计算是相互独立的,我想将其并行化 A = np.zeros((n, n)) for i in range(n): for j in range(i+1, n): A[i,j] = function(X[i], X[j]) 如何通过joblib或其他广泛使用的库优雅地并行化此计算 Q:“如何通过joblib或其他广泛使用的库优雅地并行化此计算?” 如果使用joblib,主py
A[I,j]
,因为每个I,j
-对的计算是相互独立的,我想将其并行化
A = np.zeros((n, n))
for i in range(n):
for j in range(i+1, n):
A[i,j] = function(X[i], X[j])
如何通过joblib
或其他广泛使用的库优雅地并行化此计算
Q:“如何通过joblib
或其他广泛使用的库优雅地并行化此计算?”
如果使用joblib
,主python解释器将产生其他独立于GIL锁的副本(是的,巨大的内存I/O用于复制所有python解释器状态,包括O/S窗口中的所有数据结构,在linux类型的O/S中,初始延迟的可怕程度有所降低),但更糟糕的是——任何“远程”对原始数据的衍生/分布式副本的修改必须以某种方式使其返回到主python进程(是的,巨大的内存I/O+缓存-(去)一致性硬件工作负载(加上几乎可以肯定的每核一级数据缓存效率被破坏))
因此,这个技巧并不容易为自己的附加成本买单,除非函数()
计算确实比进程实例化+进程到进程数据交换(SER/DES在“那里”的过程中)的成本高出很多倍(可以想象pickle.dumps()
内存分配+酸洗压缩/解压缩成本)+“返回”途中的SER/DES+移动酸洗数据元素的实际p2p通信延迟(成本)
你可能想多读一些这方面的内容
还有更好的办法吗? 我们都肯定听说过
numpy
和智能numpy
矢量化处理。在numpy
智能数据I/O矢量化处理中,投入了数千人*年的顶级HPC经验
因此,在大多数情况下,如果您尝试重新设计函数(scalarA,scalarB)
将返回一个scalarResult
以存储到外部2D循环a[i,j]
中,使其成为一个就地修改函数(vectorX_数据,matrixA_结果)
,并让其内部代码执行i,j
-在实际的矩阵结果上循环。塑造[0]
并进行实际计算,如果numpy
-代码可以利用智能CPU向量指令,结果可能会快得惊人,与300~380[ns]的数据访问延迟时间相比,智能CPU向量指令的延迟时间小于0.5[ns]
L1\uRAM访问延迟时间(如果内存I/O通道空闲,并且允许从慢速和远程RAM内存进行无排队的数据传输,甚至不提使用基于文件的数据代理的延迟屏蔽10.000.000+[ns]
访问成本)
如果你从未访问过numpy
-智能矢量化处理技巧的领域,请毫不犹豫地阅读该领域真正大师的尽可能多的帖子,大师-敬请
Q:“如何通过joblib
或其他广泛使用的库优雅地并行化此计算?”
如果使用joblib
,主python解释器将产生其他独立于GIL锁的副本(是的,巨大的内存I/O用于复制所有python解释器状态,包括O/S窗口中的所有数据结构,在linux类型的O/S中,初始延迟的可怕程度有所降低),但更糟糕的是——任何“远程”对原始数据的衍生/分布式副本的修改必须以某种方式使其返回到主python进程(是的,巨大的内存I/O+缓存-(去)一致性硬件工作负载(加上几乎可以肯定的每核一级数据缓存效率被破坏))
因此,这个技巧并不容易为自己的附加成本买单,除非函数()
计算确实比进程实例化+进程到进程数据交换(SER/DES在“那里”的过程中)的成本高出很多倍(可以想象pickle.dumps()
内存分配+酸洗压缩/解压缩成本)+“返回”途中的SER/DES+移动酸洗数据元素的实际p2p通信延迟(成本)
你可能想多读一些这方面的内容
还有更好的办法吗? 我们都肯定听说过
numpy
和智能numpy
矢量化处理。在numpy
智能数据I/O矢量化处理中,投入了数千人*年的顶级HPC经验
因此,在大多数情况下,如果您尝试重新设计函数(scalarA,scalarB)
将返回一个scalarResult
以存储到外部2D循环a[i,j]
中,使其成为一个就地修改函数(vectorX_数据,matrixA_结果)
,并让其内部代码执行i,j
-在实际的矩阵结果上循环。塑造[0]
并进行实际计算,如果numpy
-代码可以利用智能CPU向量指令,结果可能会快得惊人,与300~380[ns]的数据访问延迟时间相比,智能CPU向量指令的延迟时间小于0.5[ns]
L1\uRAM访问延迟时间(如果内存I/O通道空闲,并且允许从慢速和远程RAM内存进行无排队的数据传输,甚至不提使用基于文件的数据代理的延迟屏蔽10.000.000+[ns]
访问成本)
如果你从未访问过
numpy
-智能矢量化处理技巧的领域,请毫不犹豫地阅读该领域真正大师的尽可能多的帖子,大师-敬请 好吧,你说joblib在我的情况下太过杀伤力了,反而建议使用矢量化操作,而且请让我想想!但我想要一个快速的例子如何做到这一点,我也