本帖最后由 石子 于 2023-7-17 19:07 编辑
各位好,我有若干个二维数组,每维的大小大约为10000~20000之间,采用omp并行计算。
计算的目标数组为A与B,计算的总时间步大约为十万左右。为了更新A和B,每隔50步要调用subroutine1,关系大概如下:
[Fortran] 纯文本查看 复制代码
do t=1,Nt
...
if(mod(t,50)==0) then
call subroutine1(A,B,c1,c2,w1,w2,n1,n2)
end if
...
end do
subroutine1中的关系为:A,B属性为in, c1,c2属性为out,其余的w1,w2和n1,n2为inout,即读入上一次的值并进行更新。
目前我的处理办法是subroutine中所有的数组都存在公共数据块COMMON中。我想W1,W2和N1,N2可不可以在subroutine1中每次分配,然后计算,然后释放,这样会省很多内存,或许会快一些?但是这样有个问题就是,上一步算的没法存下来。
想请问各位,这个问题有没有什么更合适的处理方式?目标是让计算更高效、速度。感谢
|