各位前辈们大家好,小弟最近遇到一个问题
我要从一个档案内读取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"模组是否能解决此类问题呢?
还希望有跑过模拟的乡民们能帮小弟解惑,谢谢 :)