вывод моего кода на Фортране убит, любое предложение? - PullRequest
2 голосов
/ 25 августа 2010

Я пытаюсь запустить код на ssh, который идеально подходит для меньшего меша, но так как новый меш гораздо больше, я использовал команду ifort для его компиляции, ifort -mcmodel = medium -i-dynamic -otest.out* .f

и он соответствует, но когда я запускаю его, вывод: kill

Я знаю, что проблема из памяти, кто-нибудь знает, есть ли способ запустить его?Как я могу понять, где в коде вызывают проблемы с памятью?

Спасибо Шади

Ответы [ 2 ]

1 голос
/ 26 августа 2010

Я думаю, что из командной строки ifort вы работаете в Linux.

Просмотр «убитых» как выходных данных, как правило, является результатом того, что убийца нехватки памяти (OOM) в Linux вовлекается для предотвращения надвигающегося сбоя (потому что обычно приложения запрашивают больше памяти, чем им требуется больше запросов)память, доступная в настоящее время, принимается - проверьте «Недостаточно памяти: уничтоженный процесс [PID] [имя процесса]» в файлах системного журнала).Убийца OOM, как правило, довольно хорош в избавлении от приложения, ответственного за использование всей памяти, поэтому для начала нужно использовать память приложений.

Первое, что нужно сделать, это попытаться оценить (даже если это толькопримерно) сколько памяти вы ожидаете, что ваше приложение будет использовать.Один из подходов состоит в том, чтобы угадать размер основных массивов и умножить их на количество битов, необходимых для каждого элемента.Другой подход - подумать о том, как вы ожидаете, что использование памяти будет расти с увеличением размера сетки.Вы можете изучить это экспериментом (запустить с различными размерами сетки, измерить использование памяти и экстраполировать) или из одного измерения и узнать, как масштабируется основной массив.Возможно, вы запрашиваете гораздо больше памяти, чем у вас на машине: и решение этой проблемы, вероятно, состоит в том, чтобы получить доступ к большему компьютеру.(Или вы можете попытаться найти альтернативный алгоритм, который использует меньше памяти.)

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

1 голос
/ 25 августа 2010

попробуйте использовать valgrind. я попытался найти утечки памяти в моем коде на фортране с большим успехом.

http://valgrind.org/

...