#clang #openmp #libgomp #gcc11
Вопрос:
Спецификация OpenMP версии 5.0 определяет интерфейс OMPT, позволяющий внешним инструментам запрашивать среду выполнения openmp.
Я хотел попробовать, но я действительно не понимаю, как основные компиляторы на самом деле поддерживают это.
- GCC-11 утверждает, что имеет расширенную поддержку поддержки openmp 5.0, но в отношении OMPT я не смог найти соответствующий
ompt.h
файл заголовка (в моем случае пакет Ubuntulibgcc-11-dev
предоставляетomp.h
). - clang-12 предоставляет
ompt.h
(пакетlibomp-12-dev
), однако компиляция примеров программ завершается неудачно, первая ошибкаunknown type name 'ompt_invoker_t'
, и действительно, эта структура не может быть найденаompt.h
.
Нынешнее состояние поддержки мне очень неясно. Я не смог найти точный статус GCC, в то время как clang предоставляет эту информацию https://clang.llvm.org/docs/OpenMPSupport.html из чего я не могу понять, что стоит за в основном сделанным.
Может ли кто-нибудь помочь мне найти актуальную информацию или какой-либо намек на это ?
Ответ №1:
Примеры OMPT, приведенные выше, относятся к ранней стадии OMPT (~OpenMP TR6). Несколько деталей в интерфейсе изменились до окончательной версии в OpenMP 5.0. В настоящее время у меня есть студент, работающий над обновлением примеров OMPT.
В качестве справочного инструмента OMPT я всегда предлагаю посмотреть на:
https://github.com/llvm/llvm-project/blob/main/openmp/runtime/test/ompt/callback.h
Этот инструмент всегда будет синхронизирован с реализацией LLVM OMPT, так как этот инструмент используется для тестирования CI. Файл заголовка OMPT был переименован в omp-tools.h (см. спецификацию OpenMP). Это было просто для удобства, чтобы файл все еще был там. Я думаю, нам следует добавить предупреждение об устаревании в этот файл, а не хранить копию в LLVM.
Что касается поддержки компилятора: LLVM и Intel совместно используют поддержку OMPT. Все другие компиляторы на основе LLVM также могут совместно использовать поддержку OMPT.
Для компиляторов GNU может сработать связывание кода с-lomp, а также получение прибыли от поддержки OMPT в LLVM. Проверьте с помощью ldd, что libomp и libgomp не связаны с приложением.
«в основном сделано» означает, что все, кроме ПРОПУСКОВ для конструкций устройств и подпрограмм устройств, считается реализованным. Если вы обнаружите некоторые проблемы в реализации, пожалуйста, зарегистрируйте ошибку в LLVM/OpenMP/runtime.
Комментарии:
1. Большое спасибо Иоахиму за вашу чрезвычайно полезную информацию, о которой конечные пользователи не могут догадаться, пока OMPT не стабилизируется.
2. Примеры и слайды на git.rwth-aachen.de/OpenMPTools/OMPT-Examples обновлены сейчас, и по крайней мере 1-4 должны отлично работать с последней версией LLVM сейчас.