Многие обучающие программы OpenACC предполагают, что компилятор/ускоритель проверяет правильность, автоматически проверяя зависимости и гарантируя, что цикл фактически параллелизуем. Однако спецификация OpenACC, похоже, ничего не говорит об обязательном анализе корректности. Являются ли компиляторы OpenACC ОБЯЗАННЫ проверять, действительно ли циклы являются параллелизуемыми и сдаются, если они не являются?Обязателен ли анализ зависимости для компиляторов OpenACC?
0
A
ответ
2
Компилятор должен анализировать циклы, чтобы определить, являются ли они независимыми от данных, когда используется «авто» предложение директивы «loop». (См. Раздел 2.9.6 стандарта OpenACC).
Для циклов внутри конструкции «ядра» по умолчанию включено «авто», если не используются «независимые» или «секционные» предложения.
Для директив «loop» внутри «параллельной» конструкции «авто» не включен по умолчанию, поэтому декорированные циклы считаются независимыми.
Это немного сильнее, чем это. В параллельном регионе декорированные циклы неявно имеют «независимое» предложение, и компилятору не нужно выполнять какой-либо анализ. Для неразделенных контуров внутри параллельной области - до компилятора. Компилятор не обязан анализировать неразделенные циклы в параллельной области, но часто это делают. – jefflarkin