2016-06-17 7 views
1

Я компилирую программу Fortran с помощью Visual Studio + Intel Fortran. Программа работает нормально.Intel Fortran - chkstk.asm не найден

Однако, когда я пытаюсь распараллелить код stucks и дает мне ошибку: chkstk.asm not found.

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

Я пробовал решение на this link: Перейдите на страницу свойств для решения (не проекта) в разделе «Общие свойства/Исходные файлы отладки», перечислите файлы chkstk.asm в разделе «no debbuging», но не повезло.

Ниже также печатный экран ошибки.

enter image description here

+1

Это просто уведомление отладчика. chkstk.asm является исходным файлом функции CRT, [__chkstk()] (http://stackoverflow.com/questions/8400118/what-is-the-purpose-of-the-chkstk-функция). Он проверяет, что ваша программа не будет разбиваться с именем этого веб-сайта. Прежде чем это произойдет, важно, потому что, когда это происходит, вам мало что нужно посмотреть. Или, что еще хуже, это может не привести к сбою вашей программы, а случайному повреждению памяти. Довольно типичная проблема Fortran, ей нравятся большие массивы. То, что не должно было случиться, произошло, сказка стека рассказывает историю. Мы не можем видеть это отсюда. –

ответ

1

Проблема возникла в вашей программе, и ваш отладчик (Visual Studio в данном случае) было направлено уведомление. Затем ваш отладчик ищет исходный код, связанный с расположением проблемы. Он не может найти этот исходный код, скорее всего, потому, что вы его не установили (он является частью базовой библиотеки времени выполнения C).

Но вам не нужен (или нужен) этот исходный код для понимания характера проблемы.

Согласно его названию, код в chkstk.asm проверяет/исследует стек, чтобы убедиться, что в стеке достаточно места для размещения стека. Скорее всего, проверка не удалась из-за недостаточного пространства стека. Вы можете использовать окно стека вызовов, чтобы определить местоположение в исходном коде Fortran, связанном с распределением стека, - оно может быть связано с вызовом процедуры (создание хранилища для локальных переменных функции) или выражением (создание хранение для временных результатов функции и т.п.).

Параллельный код имеет тенденцию к значительно более интенсивному использованию стека, поскольку это простой способ сделать хранилище специфичным для определенного потока выполнения. Обычно вам необходимо увеличить объем памяти, зарезервированный для каждого стека (в свойствах для соответствующего исполняемого проекта см. В разделе «Линкера»> «Система»> «Размер хранилища стека», по умолчанию используется только 1 МБ, попробуйте сделать его 10 МБ). Вы также можете сказать компилятору использовать распределения на основе кучи, а не на основе стека (в свойствах проекта в разделе «Оптимизация Fortran»), установите Heap Arrays равным 0).

Существует множество сообщений и статей на форумах Intel для такого рода вопросов.

Смежные вопросы