Управление массивом памяти на Фортране

Я работаю над оптимизацией программы анализа потока жидкости и теплообмена, написанной на Фортране. Когда я пытаюсь запускать все более и более крупные модели сетки, я сталкиваюсь с проблемами ограничения памяти. Сетка, правда, не такая уж и большая. Всего 500 000 ячеек и мелочь для запуска типичного кода CFD. Даже когда я запрашиваю 80 ГБ памяти для своей задачи, она падает из-за нехватки виртуальной памяти.

У меня есть несколько догадок, какие массивы занимают всю эту память. Один, в частности, выделяется на (28801,345600).Поправьте меня, если я ошибаюсь в своих вычислениях, но массив двойной точности имеет 8 бит на значение. Таким образом, размер этого массива будет 28801*345600*8=79,6 ГБ?

Теперь я думаю, что большая часть этого массива оказывается нулевой во время вычислений, поэтому нам не нужно их сохранять. Я думаю, что могу изменить алгоритм решения, чтобы хранить только ненулевые значения для работы в гораздо меньшем массиве. Однако я хочу быть уверен, что ищу правильные массивы для уменьшения размера. Итак, во-первых, правильно ли я рассчитал размер массива выше? И, во-вторых, есть ли способ заставить Fortran отображать размеры массивов в МБ или ГБ во время выполнения? В дополнение к распечатке массивов, наиболее интенсивно использующих память, мне было бы интересно посмотреть, как требования к памяти кода меняются во время выполнения.

8
задан rks171 21 June 2012 в 16:41
поделиться