Ошибка PGI Fortran: PGF90-S-0155-IGNORE_TKR не может быть указан для str (npy.f90)

Я сохраняю 2D-массив в формате python numpy .npy, используя npy_for_fortran. Я копирую файл npy.f90 в текущий каталог, добавляю строку use m_npy в начало и call save_npy(filename_str,array), чтобы сохранить фортран array в формате .npy.

Я компилирую, используя следующие команды в терминале bash ОС Ubuntu, как описано здесь

gfortran -ffree-form -c npy.f90 my_code.f
gfortran npy.o my_code.o -o a.out

И я бегу a.out.

Теперь, как сделать то же самое с pgfortran от PGI? Если я просто заменю gfortran на pgfortran и отмечу -ffree-form на -Mfree, я не получу ни файлов .o, ни файлов a.out.

Может ли кто-нибудь помочь мне, как сделать то же самое с pgfortran? Заранее спасибо.

Изменить: вывод сообщений

happy@pop-os:~/Desktop/tmp$ pgfortran -v -Mfree -c npy.f90 mycode.f
Export PGI_CURR_CUDA_HOME=/home/happy/my_bin/linux86-64-llvm/2019/cuda/
Export PGI=/home/happy/my_bin
npy.f90:

/home/happy/my_bin/linux86-64-llvm/19.10/bin/pgf901-llvm npy.f90 -opt 1 -nostatic -x 19 0x400000 -quad -x 59 4 -x 15 2 -x 49 0x400004 -x 51 0x20 -x 57 0x4c -x 58 0x10000 -x 124 0x1000 -tp haswell -x 57 0xfb0000 -x 58 0x78031040 -x 47 0x08 -x 48 4608 -x 49 0x100 -stdinc /home/happy/my_bin/linux86-64-llvm/19.10/include-gcc70:/home/happy/my_bin/linux86-64-llvm/19.10/include:/usr/lib/gcc/x86_64-linux-gnu/9/include:/usr/local/include:/usr/include/x86_64-linux-gnu:/usr/include -cmdline '+pgfortran npy.f90 -v -Mfree -c' -def unix -def __unix -def __unix__ -def linux -def __linux -def __linux__ -def __NO_MATH_INLINES -def __LP64__ -def __x86_64 -def __x86_64__ -def __LONG_MAX__=9223372036854775807L -def '__SIZE_TYPE__=unsigned long int' -def '__PTRDIFF_TYPE__=long int' -def __amd64 -def __amd64__ -def __k8 -def __k8__ -def __MMX__ -def __SSE__ -def __SSE2__ -def __SSE3__ -def __SSSE3__ -def __PGLLVM__ -def __extension__= -freeform -vect 48 -x 54 1 -x 70 0x40000000 -x 195 0x8000 -x 70 0x40000000 -x 68 0x1 -y 163 0xc0000000 -x 189 0x10 -freeform -stbfile /tmp/pgfortranB7GGrMytczLF.stb -modexport /tmp/pgfortranZ7GGzy9hSI0F.cmod -modindex /tmp/pgfortranl7GGHBiTp5v_.cmdx -output /tmp/pgfortrand7GGj9WNwCEi.ilm
  0 inform,   0 warnings,   0 severes, 0 fatal for m_npy
PGF90-S-0155-IGNORE_TKR may not be specified for str (npy.f90)
  0 inform,   0 warnings,   1 severes, 0 fatal for dict_str
PGF90-S-0155-IGNORE_TKR may not be specified for str (npy.f90)
PGF90-S-0155-IGNORE_TKR may not be specified for fin_str (npy.f90)
  0 inform,   0 warnings,   2 severes, 0 fatal for shape_str
PGF90/x86-64 Linux 19.10-0: compilation completed with severe errors
pgfortran-Fatal-f901 completed with exit code 1

mycode.f:

/home/happy/my_bin/linux86-64-llvm/19.10/bin/pgf901-llvm mycode.f -opt 1 -nostatic -x 19 0x400000 -quad -x 59 4 -x 15 2 -x 49 0x400004 -x 51 0x20 -x 57 0x4c -x 58 0x10000 -x 124 0x1000 -tp haswell -x 57 0xfb0000 -x 58 0x78031040 -x 47 0x08 -x 48 4608 -x 49 0x100 -stdinc /home/happy/my_bin/linux86-64-llvm/19.10/include-gcc70:/home/happy/my_bin/linux86-64-llvm/19.10/include:/usr/lib/gcc/x86_64-linux-gnu/9/include:/usr/local/include:/usr/include/x86_64-linux-gnu:/usr/include -cmdline '+pgfortran mycode.f -v -Mfree -c' -def unix -def __unix -def __unix__ -def linux -def __linux -def __linux__ -def __NO_MATH_INLINES -def __LP64__ -def __x86_64 -def __x86_64__ -def __LONG_MAX__=9223372036854775807L -def '__SIZE_TYPE__=unsigned long int' -def '__PTRDIFF_TYPE__=long int' -def __amd64 -def __amd64__ -def __k8 -def __k8__ -def __MMX__ -def __SSE__ -def __SSE2__ -def __SSE3__ -def __SSSE3__ -def __PGLLVM__ -def __extension__= -nofreeform -vect 48 -x 54 1 -x 70 0x40000000 -x 195 0x8000 -x 70 0x40000000 -x 68 0x1 -y 163 0xc0000000 -x 189 0x10 -freeform -stbfile /tmp/pgfortran77GGX0Qc9YSv.stb -modexport /tmp/pgfortrant7GG5AHHUZit.cmod -modindex /tmp/pgfortranR7GGbYmdj1kO.cmdx -output /tmp/pgfortranJ7GGP3RNrkVW.ilm
PGF90-S-0155-IGNORE_TKR may not be specified for str (mycode.f)
PGF90-S-0155-IGNORE_TKR may not be specified for fin_str (mycode.f)
  0 inform,   0 warnings,   2 severes, 0 fatal for julia_set_complex_polinomial
PGF90/x86-64 Linux 19.10-0: compilation completed with severe errors
pgfortran-Fatal-f901 completed with exit code 1

Unlinking /tmp/pgfortrand7GGj9WNwCEi.ilm
Unlinking /tmp/pgfortranB7GGrMytczLF.stb
Unlinking /tmp/pgfortranZ7GGzy9hSI0F.cmod
Unlinking /tmp/pgfortranl7GGHBiTp5v_.cmdx
Unlinking /tmp/pgfortranJ7GGP3RNrkVW.ilm
Unlinking /tmp/pgfortran77GGX0Qc9YSv.stb
Unlinking /tmp/pgfortrant7GG5AHHUZit.cmod
Unlinking /tmp/pgfortranR7GGbYmdj1kO.cmdx

person kvng vikram    schedule 12.06.2020    source источник
comment
Не могли бы вы предоставить полную командную строку и вывод из компиляции и ссылки, а также добавить флаг -v (подробный)? Надеюсь, это даст немного больше деталей для определения проблемы.   -  person Mat Colgrove    schedule 13.06.2020
comment
Вывод слишком длинный и может поместиться в комментарий. pgfortran -v -Mfree -c npy.f90 mycode.f производит только m_npy.mod. gfortran также производил npy.o и mycode.o. На выходе мало тяжелых.   -  person kvng vikram    schedule 14.06.2020
comment
Итак, проблема в том, что вы получаете серьезную ошибку? Это предотвратит создание объектного файла. В чем ошибка? Можете ли вы опубликовать полный вывод компиляции, но без флага -v? Обратите внимание, что лучше всего, если вы отредактируете исходный пост с обновленной информацией. Чем более подробную информацию вы предоставите, тем легче людям будет вам помочь.   -  person Mat Colgrove    schedule 15.06.2020
comment
Я отредактировал пост с выводом сообщений.   -  person kvng vikram    schedule 16.06.2020


Ответы (1)


Название вводит в заблуждение, поскольку метод, используемый для компиляции и ссылки, в порядке. Фактическая ошибка заключается в том, что компилируемый код использует новую функцию Fortran, предполагаемый ранг, которую PGI еще не поддерживает. Вам нужно либо использовать только gfortran для этого проекта, либо обновить исходный код, чтобы не использовать предполагаемые ранги.

person Mat Colgrove    schedule 16.06.2020
comment
только использование gfortran может быть заменено использованием компилятора, который поддерживает предполагаемый ранг, или есть что-то еще, что делает это специфичным для gfortran? - person francescalus; 17.06.2020
comment
Поскольку ОП использовал gfortran, я предложил ему использовать его. Но вы правы в том, что если другие компиляторы поддерживают предполагаемый ранг, он также сможет его использовать. Обратите внимание, что PGI (недавно переименованный в NVIDIA HPC Compiler) продвигается вперед по добавлению новых функций Fortran через проект Flang F18, который мы разрабатываем при участии сообщества. (github.com/llvm/llvm-project/tree/master/flang< /а>) - person Mat Colgrove; 17.06.2020