Глава описывает любые отличия в поведении системных компонент на Эльбрусе, из-за которых может понадобиться адаптация программ для их корректной работы.
Компилятор lcc стремится к максимальной совместимости с gcc. Версия lcc-1.24 соответствует gcc-7.3.0.
Ряд билтинов (builtin) gcc поддержан с ограничениями. Некоторые из них вызваны особенностями реализации компилятора, другие отсутствием практической необходимости. С выходом новых версий lcc расширяется состав поддержанных билтинов.
Ограничения перечислены в разделе документации на компилятор:
/opt/mcst/doc/builtin_gnu.html.
Информация о поддержанных прагмах в документации компилятора:
/opt/mcst/doc/pragma.html
Для e2k не поддержано в режиме -m128.
Nested параллелизм не поддержан. Если при исполнении уже распараллеленного цикла встречаются циклы, которые нужно распараллелить, то эти (вложенные) циклы будут исполняться последовательно.
Не поддержан clause collapse.
Для C/C++ после директивы #pragma omp всегда должен следовать statement языка.
Проблемы могут возникнуть для #pragma omp barrier и #pragma omp flush, если за ними нет statement’а.
Для обхода проблемы рекомендуется в следующей строке поставить пустой statement, например “0;” или “;”
Переменные, перечисленные в clause’ах private, lastprivate, firstprivate и threadprivate должны иметь скалярный базовый тип или массив скалярного базового типа. В противном случае результат программы неопределен.
Директива #pragma omp for не поддержана для итераторов C++.
Для C/C++ clause’ы if и num_threads своими параметрами могут иметь только константы и переменные целого типа, выражения не допускаются.
Функция makecontext() для управления контекстом пользователя реализована на Эльбрусе с другой семантикой.
Отличия:
Вместо вызова makecontext() необходимо вызывать makecontext_e2k();
В конце области видимости необходимо вызвать freecontext_e2k().
makecontext_e2k() возвращает значение int, а не void.
Значение вызова необходимо проверять на статус ошибки (< 0).
Функции дано другое название, чтобы отображать несовместимость с реализацией на других архитектурах.