Что нужно, чтобы разгрузка OpenACC/OpenMP4.0 на nvidia/mic работала с GCC?
Я пытаюсь понять, как именно я могу использовать OpenACC для выгрузки вычислений на мой графический процессор nvidia на GCC 5.3. Чем больше я гуглю, тем больше путаюсь. Все руководства, которые я нахожу, включают перекомпиляцию всего gcc вместе с двумя библиотеками под названием nvptx-tools
а также nvptx-newlib
, Другие источники говорят, что OpenACC является частью библиотеки GOMP. Другие источники сообщают, что разработка поддержки OpenACC будет продолжаться только в GCC 6.x. Также я прочитал, что поддержка OpenACC находится в основной ветке GCC. Однако, если я скомпилирую программу с -fopenacc
а также -foffload=nvptx-non
просто не будет работать. Может кто-нибудь объяснить мне, что именно нужно компилятору и запустить код OpenACC с gcc 5.3+?
- Почему некоторые руководства требуют (пере) составления
nvptx-tools
,nvptx-newlib
и GCC, если, как говорят некоторые интернет-источники, поддержка OpenACC является частью основной ветви GCC? - Какова роль библиотеки GOMP во всем этом?
- Правда ли, что разработка поддержки OpenACC теперь будет вестись только для GCC 6+?
- Когда созревает поддержка OpenACC, стоит ли включать ее аналогичным образом, как мы включаем OpenMP (то есть, просто добавляя пару флагов компилятора)?
- Может ли кто-нибудь также предоставить ответы на все вышеперечисленное после замены "OpenACC" на "возможность разгрузки графического процессора / микрофона OpenMP 4.0"?
заранее спасибо
1 ответ
Ссылка ниже содержит скрипт, который скомпилирует gcc для поддержки OpenACC.
OpenACC является частью основного филиала GCC, но есть некоторые моменты, на которые следует обратить внимание. Даже если есть библиотеки, которые являются частью gcc, при компиляции gcc вы должны указать, какие библиотеки компилировать. Не все из них будут скомпилированы по умолчанию. Для OpenACC есть дополнительная проблема. Поскольку драйверы NVIDIA не имеют открытого исходного кода, GCC не может компилировать OpenACC напрямую в двоичные файлы. Необходимо скомпилировать OpenACC с промежуточными инструкциями NVPTX, которые будут обрабатываться средой выполнения Nvidia. Поэтому вам также необходимо установить библиотеки nvptx.
Библиотека GOMP - это промежуточная библиотека, которая обрабатывает как OpenMP, так и OpenACC.
Да, я думаю, что разработка OpenACC будет происходить только в GCC 6, но она все еще может быть перенесена в GCC 5. Но лучше всего будет использовать GCC 6.
Хотя я не могу комментировать то, что решают делать разработчики GCC, я думаю, что в первом пункте я уже изложил, в чем заключаются проблемы. Если NVIDIA не сделает свои драйверы с открытым исходным кодом, я думаю, что дополнительный шаг всегда будет необходим.
Я считаю, что сейчас OpenMP планируется только для CPU и MIC. Я считаю, что поддержка OpenMP для обоих, вероятно, станет поведением по умолчанию. Я не уверен, являются ли OpenMP, предназначенные для графических процессоров NVIDIA, неотъемлемой частью их цели, но поскольку GCC использует GOMP как для OpenMP, так и для OpenACC, я полагаю, что в конечном итоге они смогут это сделать. Кроме того, GCC также нацелен на HSA с использованием OpenMP, так что в основном AMD APU. Я не уверен, будут ли графические процессоры AMD работать так же, но это возможно. Поскольку AMD делает свои драйверы с открытым исходным кодом, я считаю, что их, возможно, легче интегрировать в поведение по умолчанию.