Что такое OPENMP_DIRECTIVE_EXT и как объявить новый? - PullRequest
0 голосов
/ 22 марта 2020

freecompilercamp.org содержит очень хорошее руководство по определению директив OpenMP. Однако, кроме этого, я не смог найти ни одного хорошего ресурса о том, как добавить новые директивы, условия et c для OpenMP в llvm.

Более того, мне интересно узнать больше о том, что такое OPENMP_DIRECTIVE_EXT и как объявить новый? Любое руководство об этом или о том, как реализовано определенное пользователем сокращение, будет полезным. Даже ссылка на набор исправлений или запрос на добавление, который добавил эту функцию, была бы полезна.

Спасибо!

1 Ответ

0 голосов
/ 31 марта 2020

Цитирование openMP spe c -

Поэтому компиляторы могут игнорировать директивы OpenMP и условно скомпилированный код, если поддержка API OpenMP не предусмотрена или не включена. Совместимая реализация должна предоставлять опцию или интерфейс, который гарантирует, что базовая поддержка всех директив OpenMP и механизмов условной компиляции OpenMP включена. В оставшейся части этого документа фраза OpenMP compilation используется для обозначения компиляции с включенными этими функциями OpenMP.

Другими словами, директивы представляют собой инструмент программирования, позволяющий компиляторам компилировать код под ним. если существующая реализация для такой директивы существует и в противном случае возвращается к компиляции кода, как обычно для процессора. Я также нашел эту страницу IBM , которая объясняет прагмы немного дальше.

Я действительно не нашел другого учебника, кроме того, который вы упомянули. Возможно, вам стоит взглянуть на руководства по Clang на этом сайте. Я думаю, что директивы OpenMP реализованы как синтаксический анализатор внешнего интерфейса. Вам нужно проанализировать структурированный код внутри директивы и добавить новый узел AST. Это будет скомпилировано в LLVM IR и передано в LLVM, где вы можете сделать больше преобразований в IR.

...