ansys内存不足问题
(2016-05-09 11:37:55)
计算机的物理内存(real
memory)对ansys程序来讲,主要用于两部分:一部分用于维持ansys程序在系统内的运行(ansys
excutable),另一部分用于ansys的工作空间(workspace)。对于32位系统来说,ansys默认的工作空间是512MB,64位系统来说,ansys默认的工作空间是1GB。一旦程序要求的内存大于计算机的物理内存(real
memory),那么程序会占用一部分磁盘空间将其作为内存使用,即通常所说的虚拟内存(system
virtual memory),用作虚拟内存的这部分磁盘空间称之为交换空间(swap
space),文件称之为交换文件(swap
file)或页面文件(page
file)。这是基本概念
因此,交换空间大小和计算机的物理内存大小、工作空间大小、ansys本身运行所需要的内存有关。
一旦模型太大,数据库空间盛不下,将会调用虚拟内存,虚拟内存使用系统函数来实现内存和硬盘之间的数据交换,而物理内存使用ansys指令来实现内存和硬盘的数据交换。用于ansys虚拟内存的文件称之为页面文件(page
file),文件名为:jobname.page其大小取决于模型大小,不建议使用页面文件,因为其处理数据比较低效。因此,要给database
space分配足够的物理内存,防止使用页面文件(page
file)实现内存和硬盘之间的数据交换。
如果暂存空间不足以满足内部运算的话,ansys会分配额外的内存来满足程序要求。
最好有足够的物理内存来运行ansys任务,划分网格或者是方程重新排序过程中物理内存不足而暂时性的使用虚拟内存对运算速度影响还不是很大,但是如果求解过程中物理内存不足,会使运算过程慢上十倍。
上面这部分是基本术语。下面是内存分配问题。
通常情况下不需要手动配置内存,ansys内存管理器会自动分配额外的内存。通过-m命令设置初始内存块的大小,这个命令分配的内存存在于两个连续的块内。例如:-m
1800 -db 300,即首先分配300MB的连续内存块给database
space,然后分配1500MB的连续内存块给scratch
space.理想情况下,ansys从初始内存块内部分配内存,使得在各个仿真阶段可以有效的重新利用内存块。一旦ansys需要更多内存,它就会向系统伸手要,新的内存块为scratch
space一半大小或分配的新的内存块的大小。当出现分片内存引起的内存不足导致的计算失败的情况时需要改变默认内存分配设置。(关于连续内存块和分片不连续内存的问题还需要和各位大虾讨论)
下面这个例子可能对内存分配有所启发:(指南的原话)
For example, if a large model requires a contiguous block of 800 MB
for the sparse solver, the default memory allocation will be
insufficient (-m 1024 MB minus-db 512 MB = 512 MB contiguous
memory). ANSYS would try to allocate an additional 800 MB block of
contiguous memory to satisfy the sparse solver requirement,
bringing the total memory requirement to 1800 MB (1024 default plus
800 additional). This memory requirement may fail on smaller
systems, especially 32-bit Windows systems(这个内存要求可能会失败,特别是32位windows系统).
To accomodate this model within the default memory availability,
specify a-db 100, resulting in an initial memory block of 924 MB,
which is sufficient to satisfy the sparse solver requirement of 800
MB.
32位windows系统,最大寻址空间为2GB或3GB(这还是在3GB开关打开的情况下才能使用)。当Ansys启动时,不同的进程,包括Ansys本身以及保证Ansys正常运行的各种动态链接库和保证操作系统正常运行的动态链接库,来争夺这点有限的空间。所有这些程序必须常驻在分配给ansys程序的进程空间中。如果分配给ansys实际寻址空间中存在一个或多个上述进程,这些进程会将内存分割成不连续的小块,这是ansys对内存不连续块的理解.上述文字也解释了不连续内存块的形成原因。
可以使用以下方式来确定一个特定的操作系统所容许的分配给Ansys的最大工作空间(即-m命令后面指定的数字),用不同的-m命令和固定的-db命令启动ansys,这样就可以确定出极限-m的大小。一般来说,32位的操作系统-m设定(即工作空间设定)不能超过1200MB,-db(数据库空间设定)不能超过256MB。
写到这里,楼主的问题似乎也就迎刃而解了,我们可以得到以下几条启发:
1.
2
3 ansys似乎只能使用连续的内存块,即-m的设定只能是连续内存(这可能是为什么32位系统的-m最大不能超过1800MB的原因)
对于32位Windows操作系统来说,最有效的办法是指定一个小的初始内存块(比数据库空间大50MB),然后让ansys根据需要生长出更小块的内存,这是ansysworkbench默认的内存分配方式,对于使用PCG求解器的任务能够有效的工作。但这种内存分配方式对需要大块内存的求解器不适用。这种情况下,通常需要指定一个大的初始内存分配,同时减小模型数据库的初始内存分配。
-m指令在程序启动时分配命令指定的虚拟内存(是不是可以理解为在计算机物理内存不足的情况下才分配额外要求的虚拟内存?)
修改工作空间(workspace)的大小(-m命令),其实是在修改暂存空间(scratch
space)的大小,因为32位系统默认的数据库空间(data
space)256MB一直保持不变。
现在已经解决方法如下:
1.
2.
3.

加载中…