Я очень редко использую фортран, однако мне было поручено взять унаследованный код, переписав его для параллельной работы. Я использую Gfortran для моего выбора компилятора. Я нашел несколько отличных ресурсов на https://computing.llnl.gov/tutorials/openMP/, а также несколько других.
Моя проблема заключается в том, что перед добавлением директив OpenMP, если я просто скомпилирую устаревшую программу:
gfortran Example1.F90 -o Example1
все работает, но включение опции компилятора openmp даже без добавления директив:
gfortran -openmp Example1.F90 -o Example1
заканчивается ошибкой сегментации при запуске устаревшей программы. Используя меньшие тестовые программы, которые я написал, я успешно скомпилировал другие программы с -openmp, которые выполняются в нескольких потоках, но я не совсем уверен, почему включение только одной опции и отсутствие директив приводит к ошибке seg.
Я прошу прощения, если мой вопрос довольно прост. Я мог бы разместить код, но это довольно долго. Сбой при назначении начальных значений:
REAL, DIMENSION(da,da) :: uconsold
REAL, DIMENSION(da,da,dr,dk) :: uconsolde
...
uconsold=0.0
uconsolde=0.0
Первое присваивание «uconsold» работает нормально, второе, кажется, является источником ошибки, так как, когда я комментирую строку, следующие несколько строк выполняются весело, пока «uconsolde» не будет использован снова.
Спасибо за любую помощь в этом вопросе.