Я очень редко использую fortran, однако мне было поручено использовать устаревший код, переписывающий его для параллельной работы. Я использую gfortran для моего выбора компилятора. Я нашел отличные ресурсы в https://computing.llnl.gov/tutorials/openMP/, а также несколько других.OpenMP в Fortran
Моя проблема заключается в следующем, прежде чем я добавить любые директивы OpenMP, если я просто скомпилировать устаревшую программу:
gfortran Example1.F90 -o example1
все работает, но включение опции компилятора OpenMP даже без добавления директивы:
gfortran -openmp Example1.F90 -o example1
заканчивается с ошибкой Segmentation, когда я бегом устаревшей программы. Используя небольшие тестовые программы, которые я написал, я успешно скомпилировал другие программы с -openmp, которые выполняются на нескольких потоках, но я довольно не понимаю, почему включение этого параметра в одиночку и никаких директив приводит к ошибке seg.
Приносим извинения, если мой вопрос довольно прост. Я мог бы отправить код, но он довольно длинный. Она разломы, как я назначить начальные значения:
REAL, DIMENSION(da,da) :: uconsold
REAL, DIMENSION(da,da,dr,dk) :: uconsolde
...
uconsold=0.0
uconsolde=0.0
Первое задание на «uconsold» работает отлично, второй, кажется, источник вины, как это, когда я комментирую строку из следующих нескольких строк, не выполнить Весело до " uconsolde "снова используется.
Благодарим за помощь в этом вопросе.
Это не устаревший код, насколько я могу судить. Это современный способ декларирования массивов. Что касается openmp, то при должном уважении к учебнику по ссылке я смиренно рекомендую книгу «Использование OpenMP». Он очень дружелюбен к людям, которым никогда не приходилось иметь дело с ним. Http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=11387 ... есть еще один, но я не знаю, У меня есть это на моей полке прямо сейчас и не могу вспомнить автора. Если вам интересно, напишите мне свой комментарий, и я посмотрю, когда вернусь домой. – Rook