Перейти к публикации

Ошибка при выделении памяти в CFX-Solver (Memory Allocation and stack size)


elusive_creator

Рекомендованные сообщения

Подобные проблемы достаточно распространенны и обсуждаются практически на всех форумах посвященных CAE системам. Причины, по которым создана новая тема:

1. В ниже описанной постановке проблема ранее не рассматривалась;

2. Решение данной проблемы для Windows Vista, также как и для другой Windows, мной не найдено (для Linux решение, как я полагаю, этой проблемы изложено в журнале ANSYS Solutions Осень 2007 на стр. 38 ).

Перейдем к сути:

- Windows Vista Home Premium SP1 (32bit)

- Системная память 3065 Мб (DDR3-1066 DDR3 SDRAM)

- Процессор Intel® Core2 Duo CPU P8600 @ 2.40GHz

- Сеть: Total Number of Elements (All Hexa) = 1055318

- Моделирование включает: горение, теплообмен, сложное турбулентное вихревое движение потока;

- Одна расчетная область – Fluid;

- Используется ANSYS CFX Solver 12.0.1.

При прямом задании выделяемой памяти Real Memory Override = 260M (260 Mwords) происходит следующая ошибка:

======================================================================

OUTER LOOP ITERATION = 2 CPU SECONDS = 1.913E+02

----------------------------------------------------------------------

| Equation | Rate | RMS Res | Max Res | Linear Solution |

+----------------------+------+---------+---------+------------------+

+--------------------------------------------------------------------+

| *** INSUFFICIENT MEMORY ALLOCATED *** |

| |

| ACTION REQUIRED : Increase the real stack memory size. |

| |

| Details : |

| Requested space : 42598063 words |

| Current allocated space : 260000000 words |

| Current used space : 220740081 words |

| Current free space : 39259919 words |

| Number of free areas : 1 |

+--------------------------------------------------------------------+

Details of error:-

----------------

Error detected by routine MAKDAT

CDANAM = SRWK CDTYPE = REAL ISIZE = 42598063

CRESLT = FULL

Current Directory : /FLOW/SOLVER/MGRID/TESTMAT_SG7

+--------------------------------------------------------------------+

| Writing crash recovery file |

+--------------------------------------------------------------------+

Details of error:-

----------------

Error detected by routine POPDIR

CRESLT = ILEG

Current Directory : /FLOW/NAMEMAP

+--------------------------------------------------------------------+

| An error has occurred in cfx5solve: |

| |

| The ANSYS CFX solver exited with return code 1. No results file |

| has been created. |

+--------------------------------------------------------------------+

End of solution stage.

При задании Real Memory Override больше 268Mwords, а точнее 268435456words = 1073741824 bytes = 1 Gbytes, CFX-Solver сразу после запуска решения выдает следующее:

………….

Job started: Fri Dec 18 22:30:56 2009

+====================================================================+

| ****** PROBLEM REPORT ****** |

|--------------------------------------------------------------------|

| Subsystem: Input |

| Subroutine name: ErrAction |

| Severity level: Fatal Error |

| Error message number: 001100279 |

|--------------------------------------------------------------------|

| Message: |

| |

| *** Run-time memory allocation error *** |

| Not enough free memory is currently available on the system. |

| Could not allocate requested memory - exiting! |

| |

| |

| |

+====================================================================+

+--------------------------------------------------------------------+

| An error has occurred in cfx5solve: |

| |

| The ANSYS CFX solver exited with return code 2. No results file |

| has been created. |

+--------------------------------------------------------------------+

End of solution stage.

При максимальном выделении Real Memory порядка 268Mwords, Integer Memory = 70Mwords, на осталные stack менее 10Mwords, в сумме около 1330 Мбайт,

Windows кушает около 900 Мбайт

Итог: в системе остается свободно около 750 Мбайт оперативной памяти (что подтверждает диспетчер задач).

Вопрос: каким образом можно увеличить ( или снять ограничение) объем памяти выделяемой под data stacks (character, double, integer, logical, real)? Конкретно - размер Real Memory при работе в Windows Vista?

Изменено пользователем elusive_creator
Ссылка на сообщение
Поделиться на других сайтах


Попробуйте не задавать объём памяти, а поиграть коэффициентом Memory Alloc Factor. Если мне сколероз не изменяет, сделав его чуть меньше 1 (0.8-0.9) можно упихнуть задачу в память.

Ссылка на сообщение
Поделиться на других сайтах

Попробуйте не задавать объём памяти, а поиграть коэффициентом Memory Alloc Factor. Если мне сколероз не изменяет, сделав его чуть меньше 1 (0.8-0.9) можно упихнуть задачу в память.

Наоборот, нужно больше единицы. В Real Memory - например 1.1x, в остальных 1х. Если опять не хватит - увеличить до 1.2х и т.д.

Ссылка на сообщение
Поделиться на других сайтах

Не помню точно, больше или меньше. Но это легко проверить :)

Можно Real отдельно не выделять, всех оптом...

Ссылка на сообщение
Поделиться на других сайтах

Вы, к сожалению, не уловили сути возникновения ошибки.

1. Memory Alloc Factor влияет лишь на объем выделяемой памяти при ее автоматическом определении решателем, если задавать количество памяти выделяемой под конкретный тип данных (character, double, integer, logical, real) на вкладке Solver в пункте Detailed Memory Overrides, то автоматическое определение выделяемой памяти для предопределенных типов данных не производится. Например: если задать вручную Real Memory = X, а остальные графы оставить пустыми, то в результате Solver выделит для Real Data Type память в размере X words, для Integer Data Type автоматически определит необходимое количество памяти, умножит на Memory Alloc Factor, полученное значение выделит под Integer Data Type и т.д.

2. Количество памяти необходимо для проведения расчета никоим образом не зависит от настроек Solver Memory, т.к. полностью определяется сложностью моделирования, объемом расчетной сети, типом доменов и их количеством и т.д.

3. В результате: как ни крути, а если для расчета требуется Real Memory больше 1 Гб, а при выделении такого количества памяти происходит ошибка | Not enough free memory is currently available on the system. Could not allocate requested memory - exiting! |, при этом в системе остается свободно порядка 750 Мбайт ОЗУ, вывод один, либо в Windows, либо в CFX введено ограничение по выделению ОЗУ для отдельных типов данных. Отмечу, что это мое личное мнение, я - человек, а людям, как известно, свойственно ошибаться. :smile:

Внимание вопрос: как изменить ограничение по выделению ОЗУ для отдельных типов данных (limit stack size)?

Ссылка на сообщение
Поделиться на других сайтах

Вы, к сожалению, не уловили сути возникновения ошибки.

1. Memory Alloc Factor влияет лишь на объем выделяемой памяти при ее автоматическом определении решателем, если задавать количество памяти выделяемой под конкретный тип данных (character, double, integer, logical, real) на вкладке Solver в пункте Detailed Memory Overrides, то автоматическое определение выделяемой памяти для предопределенных типов данных не производится. Например: если задать вручную Real Memory = X, а остальные графы оставить пустыми, то в результате Solver выделит для Real Data Type память в размере X words, для Integer Data Type автоматически определит необходимое количество памяти, умножит на Memory Alloc Factor, полученное значение выделит под Integer Data Type и т.д.

2. Количество памяти необходимо для проведения расчета никоим образом не зависит от настроек Solver Memory, т.к. полностью определяется сложностью моделирования, объемом расчетной сети, типом доменов и их количеством и т.д.

3. В результате: как ни крути, а если для расчета требуется Real Memory больше 1 Гб, а при выделении такого количества памяти происходит ошибка | Not enough free memory is currently available on the system. Could not allocate requested memory - exiting! |, при этом в системе остается свободно порядка 750 Мбайт ОЗУ, вывод один, либо в Windows, либо в CFX введено ограничение по выделению ОЗУ для отдельных типов данных. Отмечу, что это мое личное мнение, я - человек, а людям, как известно, свойственно ошибаться. :smile:

Внимание вопрос: как изменить ограничение по выделению ОЗУ для отдельных типов данных (limit stack size)?

1. Солвер автоматически выделяет Н-ное количество памяти под партишнинг и под солвер под конкретные типы данных. Это в логе можно посмотреть в таблице в начале расчета. Иногда, накручивая расчет разными моделями, этой памяти может не хватить, появится ошибка с предложением увеличить объем выделяемой памяти под ту или иную задачу, что и делается с помощью memory alloc factor.

2. См.1. Количество памяти выделяемое под партишнинг или расчет зависит от memory factor alloc.

3. Имеет смысл попробовать ключ /3GB в boot.ini, позволяющий загружать в оперативу большие процессы. Либо можно разбить задачу на 4 или более мелких партишнинга. А вообще, расчет на 1 млн гекс с горением и с радиацией будет явно больше 2ГБ оперативы. Будет свапиться.

Таким образом, как мне кажется, сначала вывалилось из-за того, что солвер выделил недостаточно памяти. А потом не нашлось свободного фрагмента памяти под большой процесс солвера.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...