Поддерживаются ли производные типы, содержащие размещаемые массивы, в каких-либо существующих компиляторах OpenACC?

Существуют ли какие-либо компиляторы OpenAcc, поддерживающие копирование производных типов, содержащих выделяемые массивы, в/из графического процессора и их использование в ускоренном коде?

Спецификация OpenACC (v2.0) утверждает, что это возможно, но я нигде не могу найти его реализованным в компиляторе. Компилятор PGI поддерживает производные типы, но, по-видимому, не те, которые содержат выделяемые массивы (см. страницу на форуме PGI). Хотя это могло измениться с тех пор, похоже, это нигде не афишируется.


person mjm26    schedule 04.02.2014    source источник
comment
AFAIK, PGI, Cray и CAPS являются компиляторами Fortran, которые разрешают директивы OpenACC. Последний из этих 3 утверждают, что совместимы с OpenACC 2.0, но не уверены в двух других (хотя первое — это то, что вы уже исследовали)   -  person Kyle Kanos    schedule 04.02.2014
comment
Слайд 12 этой презентации предполагает, что компилятор Cray может работать. Я посмотрю, смогу ли я получить его в свои руки, и отчитаюсь.   -  person mjm26    schedule 04.02.2014


Ответы (2)


На данный момент я не могу получить доступ к компиляторам Cray или CAPS, а компилятор PGI не поддерживает эту функциональность. Кажется, подходящим обходным путем является создание указателя на выделяемый массив в производном типе и копирование его в графический процессор с помощью предложения copy. Если будущие версии компилятора PGI будут поддерживать такую ​​​​глубокую копию, я обновлю ответ.

person mjm26    schedule 06.02.2014

Как вы думаете, где об этом говорится в OpenACC 2.0?

Относительные ссылки, которые я нахожу в версии 2.0 за июнь 2013 года:

Страница 13 "Полная поддержка производных типов Fortran и членов производных типов, включая распределяемые элементы и элементы-указатели".

Страница 26-27 «В Fortran, если указана переменная или массив с производным типом, все члены этого производного типа выделяются и копируются соответствующим образом. Если какой-либо член имеет выделяемый или указательный атрибут, данные к которым осуществляется доступ через этот элемент, не копируются».

Во второй ссылке явно указано, что копирование памяти для выделяемых объектов и объектов-указателей внутри производного типа в настоящее время не поддерживается.

Технический комитет работает над «исправлением этой проблемы», однако решение еще не выпущено.

Cray предоставляет параметр командной строки для включения поддержки «глубокого копирования». Это расширение Cray, поэтому оно не является переносимым решением.

person user3813378    schedule 07.07.2014
comment
Если это то, что указано в спецификации, то, думаю, я буду ждать дольше. Обходной путь, который я опубликовал, по-прежнему кажется достойным решением. - person mjm26; 09.07.2014