Ошибка компиляции подпрограмм openacc "pgf90_copy_f77_argl_i8"

Вызов функции времени выполнения PGI не поддерживается - pgf90_copy_f77_argl_i8

Я считаю, что передаю 8-байтовый целочисленный аргумент в процедуру!$ Acc.

Любая работа или обновления в этом?

PGI компилятор 17.4

пример.

type some
integer(4),pointer :: xx(:)
integer(4),pointer :: yy(:)
end type

type(some), pointer :: data(:)
call func(data(3) % xx, data(5) % yy)

Здесь func - это стандартная процедура, так что я думаю, что такой подход создает проблему.

Мы создадим временные массивы и затем передадим их.

1 ответ

Эта процедура проверяет, является ли передаваемый массив смежным или нет при использовании соглашений о вызовах F77. Если он не является непрерывным, среда выполнения должна создать временный массив, чтобы срез массива передавался непрерывно.

Хотя вы говорите, что передаете 8-байтовое целое число, вы также передаете срез массива?

У нас (PGI) здесь есть серьезные проблемы. "Решением" для нас было бы создать подпрограммы времени выполнения на стороне устройства, которые имитируют поведение, которое мы имеем на хосте. Однако это будет означать, что компилятору может потребоваться затем выделить на устройстве временный массив для каждого потока, скопировать нарезанные данные во временный массив, передать временный массив и затем скопировать обратно результаты в основной массив. Однако это абсолютно убило бы производительность вашего цикла, поэтому мы не хотим этого делать.

Это то, о чем мы спорим внутри страны. Мы хотим, чтобы пользователи могли легче переносить свой код, но знаем, что если мы добавим эту поддержку, это снизит производительность и не будет понятно, почему. Поэтому сейчас мы рекомендуем пользователям избегать передачи фрагментов массива, вместо этого передавая базовый массив и добавляя дополнительные аргументы для индексов.

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

Другие вопросы по тегам