【发布时间】:2012-12-23 11:31:49
【问题描述】:
我在 openmp 中有如下所示的循环,但出现分配错误:
!$OMP PARALLEL DO PRIVATE(fn)
do fn=0, NFILES
allocate(temparray(1:3,1:Ntot))
LOAD temparray FROM FILE(fn)
Ntot = len(temparray)
TOTALARRAY(1+nstart:nstart+Ntot,1:3)=temparray(1:Ntot, 1:3)
deallocate(temparray)
nstart=nstart+len(temparray)
end do
!$OMP END PARALLEL DO
有没有办法将这些文件加载到内存中并使用 openmp 快速组合它们?还是我必须按顺序进行?我拥有的数组比这大得多——这只是为了演示。我想并行加载它们。
【问题讨论】:
-
我不明白你的代码。
LOAD temparray FROM FILE(fn)是什么?您只能使用字符参数调用len。A、B和C是否从文件中加载?它们是一维数组,但分配了一个二维数组。TOTALARRAY赋值依赖于nstart,它在循环内重新定义。如果要依赖结果中元素的顺序,则必须执行ORDEREDopenMP 循环。 -
Sigma,我删除了 abc,因为它令人困惑。 temparray 是从文件中加载的。它们是 3xNtot 数组。我只想尽快将 4 个不同文件中的数组组合成一个大数组。我想这是不可能的,因为每个文件的长度都不同,并且需要知道在 TOTALARRAY 中填充的位置。
标签: arrays loops fortran openmp do-loops