gpt4 book ai didi

fortran - 在 PGI Fortran 中分配大数组

转载 作者:行者123 更新时间:2023-12-02 17:31:48 25 4
gpt4 key购买 nike

我正在尝试在 Fortran 中分配一个实数数组 finn_var(459,299,27,24,nspec)。 nspec = 24 工作正常,而 nspec = 25 不行。分配过程没有错误消息,但打印命令打印空值而不是零值。如果使用数组,会出现“segmentation fault”的错误信息。测试程序是

  program test

implicit none

integer :: nx, ny, nez, nt, nspec
integer :: allocation_status
real , allocatable :: finn_var(:,:,:,:,:)

nx = 459
ny = 299
nez = 27
nt = 24
nspec = 24

allocate( finn_var(nx, ny, nez, nt, nspec), stat = allocation_status )
if (allocation_status > 0) then
print*, "Allocation error for finn_var"
stop
end if

print*, finn_var

end

应该不是内存问题。我毫无问题地分配了 double finn_var(459,299,27,24,24)。那是什么原因呢?

我在 linux 服务器上使用 pgf90。 cat/proc/meminfo 命令:

MemTotal:     396191724 kB
MemFree: 66065188 kB
Buffers: 402388 kB
Cached: 274584600 kB
SwapCached: 0 kB
Active: 131679328 kB
Inactive: 191625200 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 396191724 kB
LowFree: 66065188 kB
SwapTotal: 20971484 kB
SwapFree: 20971180 kB
Dirty: 605508 kB
Writeback: 0 kB
AnonPages: 48317148 kB
Mapped: 123328 kB
Slab: 6612824 kB
PageTables: 132920 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 219067344 kB
Committed_AS: 53206972 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 275624 kB
VmallocChunk: 34359462559 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB

unlimit -a 命令:

core file size          (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3153920
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 3153920
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

我是pgf90编译的。但是如果我用gfortran编译就没有问题了。

最佳答案

不一定是内存不足。数组的大小为 2 223 304 200。这令人怀疑地接近最大 32 位整数 2 147 483 648

看起来编译器内部使用的元素计数溢出了。对 malloc 的内部调用请求没有足够的内存,然后任何尝试读取最后一些元素的尝试都会失败。

这是编译器默认设置的限制。可以使用选项 ‑Mlarge_arrays 将其设置为使用 64 位寻址。

参见 http://www.pgroup.com/products/freepgi/freepgi_ref/ch05.html#ArryIndex

关于fortran - 在 PGI Fortran 中分配大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com