Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 并行填充矩阵_Python_Parallel Processing_Vectorization_Joblib - Fatal编程技术网

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在我的情况下太过杀伤力了,反而建议使用矢量化操作,而且请让我想想!但我想要一个快速的例子如何做到这一点,我也