我有许多文件,比如100和许多处理器,比如1000.每个proc需要读取某些文件子集的部分内容。例如,proc 3需要file04.dat
,file05.dat
和file09.dat
,而proc 4需要file04.dat
,file07.dat
和file08.dat.
等。哪些proc在编译时是不知道的,并且无法从任何算法确定,但在运行时可以从现有元数据文件中轻松确定。
我正在尝试使用MPI I / O确定执行此操作的最佳方法。在我看来,我可以让所有的proc都循环遍历他们需要的文件,用MPI_File_open
作为communicator参数调用MPI_COMM_SELF
。但是,我是MPI I / O的初学者,我怀疑这会在大量的proc或文件中产生一些问题。是这种情况吗?
我还想过,也许要做的就是为每个文件建立一个单独的通信器,并且需要特定文件的每个处理器将是文件的相关通信器的成员。但首先,这是一个好主意吗?其次,我也不是传播者的专家,我也无法弄清楚如何以这种方式建立传播者。有什么想法吗?
如果有人有一个完全不同的想法可以更好地工作,我会很高兴听到它。