Эльбрус/оптимизация: различия между версиями
м (→Ссылки: +1) |
м (+-O2) |
||
Строка 2: | Строка 2: | ||
= FAQ = | = FAQ = | ||
== -O2 == | |||
Q: Мой код на x86 собирается с -O2, почему он работает так медленно на "Эльбрусе"? | |||
A1: [[lcc]] осмысленным образом поддерживает уровни оптимизации вплоть до -O4, при этом в дистрибутивах ОС Альт (и вроде как Эльбрус Линукс) штатно применяется -O3; попробуйте указать этот уровень оптимизации для сборки. Вслепую задавать -O4 не следует, т.к. результаты могут быть противоречивыми и обязательно надо смотреть предметно. | |||
A2: Проверьте, что хотя бы -O2 при сборке на e2k "долетело" до компилятора -- {{cmd|make V=1 VERBOSE=1}} в случае {{cmd|cmake}} либо {{cmd|ps auxww | grep -- -O}} в общем случае. Попадались сборочные системы, которые вовсе ничего не передавали, что на lcc равнозначно -O0 (в альте сделана обёртка, которая при отсутствии -O* выставляет -O3, но закладываться на такую подстраховку всё же не следует). | |||
== if-else-if-else vs switch == | == if-else-if-else vs switch == | ||
Q: Если много условий в elseif, то м.б. переделать на switch case, будет быстрее? (Сергей Еронов) | Q: Если много условий в elseif, то м.б. переделать на switch case, будет быстрее? (Сергей Еронов) | ||
A: Если switch сможет соптимизироваться, то да. Если нет - то по скорости будет | A: Если switch сможет соптимизироваться, то да. Если нет - то по скорости будет так же. Так что лучше переделать. | ||
Это к ситуации, если идёт цепочка if-else if-...else if-else. Если подразумевалось много условий внутри одного else if, то неважно. (Alex Markin) | Это к ситуации, если идёт цепочка if-else if-...else if-else. Если подразумевалось много условий внутри одного else if, то неважно. (Alex Markin) |
Версия от 16:35, 14 февраля 2022
Вопросы, ответы и прочие заметки по части оптимизации кода под "Эльбрус".
FAQ
-O2
Q: Мой код на x86 собирается с -O2, почему он работает так медленно на "Эльбрусе"?
A1: lcc осмысленным образом поддерживает уровни оптимизации вплоть до -O4, при этом в дистрибутивах ОС Альт (и вроде как Эльбрус Линукс) штатно применяется -O3; попробуйте указать этот уровень оптимизации для сборки. Вслепую задавать -O4 не следует, т.к. результаты могут быть противоречивыми и обязательно надо смотреть предметно.
A2: Проверьте, что хотя бы -O2 при сборке на e2k "долетело" до компилятора -- make V=1 VERBOSE=1 в случае cmake либо ps auxww | grep -- -O в общем случае. Попадались сборочные системы, которые вовсе ничего не передавали, что на lcc равнозначно -O0 (в альте сделана обёртка, которая при отсутствии -O* выставляет -O3, но закладываться на такую подстраховку всё же не следует).
if-else-if-else vs switch
Q: Если много условий в elseif, то м.б. переделать на switch case, будет быстрее? (Сергей Еронов)
A: Если switch сможет соптимизироваться, то да. Если нет - то по скорости будет так же. Так что лучше переделать.
Это к ситуации, если идёт цепочка if-else if-...else if-else. Если подразумевалось много условий внутри одного else if, то неважно. (Alex Markin)
Ссылки
- эльбрус/lcc
- эльбрус/портирование
- en:Elbrus/optimization
- Руководство по эффективному программированию на платформе «Эльбрус»
- заметки на манжетах (в основном фортран)
- На пути к вершине: Магма и Кузнечик на Эльбрусе и другие заметки Дмитрия Щербакова (КриптоПро):
- Elbrus porting cheat sheet
- Азбука оптимизаций компилятора (дорабатывается) (Алексей Маркин)
- Оптимизация СПО для платформы Эльбрус (видео, слайды)