C++ MPI将嵌套循环中的变量写入单个文件
我目前正试图找到一种有效的方法来并行化以下结构。文件量在50Gb左右是巨大的,我想知道如何通过MPI提高计算速度,或者对于这种情况,并行不是一种有效的方法,因为通信时间或内核的障碍,因为我想按顺序写入数据。谢谢你的帮助C++ MPI将嵌套循环中的变量写入单个文件,c++,parallel-processing,mpi,nested-loops,C++,Parallel Processing,Mpi,Nested Loops,我目前正试图找到一种有效的方法来并行化以下结构。文件量在50Gb左右是巨大的,我想知道如何通过MPI提高计算速度,或者对于这种情况,并行不是一种有效的方法,因为通信时间或内核的障碍,因为我想按顺序写入数据。谢谢你的帮助 for m = 1,120 for n = 1,120 for k = 1,120 for i = 1,100 f= x[k]*y[n]*z[m] for j = 1, 300
for m = 1,120
for n = 1,120
for k = 1,120
for i = 1,100
f= x[k]*y[n]*z[m]
for j = 1, 30000
data[j]= A[i,j]*f
fwrite(fp,data)
free(data)
为什么按顺序写作是一项挑战?这两个问题的答案都提供了一种确切的方法:
由于文件大小为50Gb,并且120x120x120x30000项被写入文件,因此数据[j]似乎是char类型。如果f也是char类型,则表示数组数据只有256个可能的值。如何计算这些值并将其存储在256x30000数组中(比如datap[256][30000])?然后,只需fwritefp,datap[f];。这将在不使用并行化的情况下将计算时间减少100。请注意,由于同一行将一次又一次出现,因此该文件也可以缩小。。。只需存储f[120][120][120]和datap[256][30000]!