[问题] mpi4py矩阵如何有效率的合并?

楼主: dogs1231992 (河豚)   2018-12-20 05:16:47
各位前辈们大家好,小弟最近遇到一个问题
我要从一个档案内读取10000个分子模拟的快照
每个快照都包含66个原子,其中,每个原子都有7个数值是我想要读取的
因此矩阵大小会是 [10000,66,7]
由于资料量很大,如果用一个CPU读取的话要花费约480秒左右
因此我最近改用mpi4py来写,使用64个CPU读取,只要7秒左右
最近遇到的问题是,我在程式码内创造一个Data_properties矩阵
Data_properties = np.zeros((Number_images,Max_number_atoms,7))
然后要求每个CPU各自读取一个片段 (第一个CPU读取0-156,第二个CPU读取157-312...)
在我输出数值时我发现,64个CPU里面各自包含一个名为Data_properties的矩阵
并不是共用同一个矩阵,因此总共有64个矩阵
基于上面的读取指令,每个矩阵都只有一小片段是正确的
(例如:第一个CPU只有0-156是有数值的,其他部分都是0)
目前想到的方法是再用一个矩阵来读取这64个矩阵,把数值正确的部分提取出来
但是这样又会增加运算量 (目前更在乎的是后面要处理数据时会有非常庞大的运算需求)
因此想请问是否有比较好的方法来执行上述的过程呢?
使用"from multiprocessing import Pool"模组是否能解决此类问题呢?
还希望有跑过模拟的乡民们能帮小弟解惑,谢谢 :)
作者: Solccp (斌斌)   2018-12-20 08:48:00
关键字: MPI_Gather
作者: yoyololicon (萝莉大好)   2018-12-20 08:51:00
这资料感觉也没很大,你读取是怎么读的?不应该这么久
作者: sma1033 (死马)   2018-12-20 13:13:00
我也觉得这资料量没很大,速度慢应赅是其他的问题

Links booklink

Contact Us: admin [ a t ] ucptt.com