Обсуждение:Эльбрус/архитектура: различия между версиями

Материал из ALT Linux Wiki
(нач)
 
м (→‎выравнивание: дополнил)
Строка 6: Строка 6:
   
   
  В общем, делайте выравнивание на 16 – не ошибётесь.
  В общем, делайте выравнивание на 16 – не ошибётесь.
Если в исходниках работают с 256 и 512 битными регистрами AVX, то выравнивание
там должно быть 32 и 64 соответственно, - так и оставляйте это (вряд ли будет
лучше, если уменьшить до безопасных 8 или 16 для эльбрусов).
(вроде компилятору нужно еще постараться задать выравнивание более 16, что-то
там в ir мало бит под это свойство отвели – переделывать накладно/лень, пока
никто не занялся убежать в важности этого, точнее бага была, но бодаться было лень).
А так невыровненные обращения e2k переживёт, это не спарк... Одно на кластер
в широкой команде ещё нормально и почти даром, а дальше очень большие штрафы
были у e2k до 4 версии включительно (до полусотни тактов). В пятой начали это
улучшать, в 6й должно быть совсем хорошо.
Проблема в то, что компилятор лепит обращения к памяти в широкой команде как
получается, он не следит за возможными невыровненными обращениями и часто просто
не имеет такой информации. (Как-то предлагалось поддержать атрибут __unaligned
как у Microsoft, да как-то не прижилось).
  -- Alexander Troosh в e2k_chat
  -- Alexander Troosh в e2k_chat

Версия от 23:02, 12 октября 2020

выравнивание

На до E2Kv5 достаточно, чтоб выравнивание адресов было на 8.
А для E2Kv5 и для E2Kv6 – 16. Да и у E2Kv7 изменений не планируется,
регистры там останутся 128-битными.

В общем, делайте выравнивание на 16 – не ошибётесь.
Если в исходниках работают с 256 и 512 битными регистрами AVX, то выравнивание
там должно быть 32 и 64 соответственно, - так и оставляйте это (вряд ли будет
лучше, если уменьшить до безопасных 8 или 16 для эльбрусов).

(вроде компилятору нужно еще постараться задать выравнивание более 16, что-то
там в ir мало бит под это свойство отвели – переделывать накладно/лень, пока
никто не занялся убежать в важности этого, точнее бага была, но бодаться было лень).

А так невыровненные обращения e2k переживёт, это не спарк... Одно на кластер
в широкой команде ещё нормально и почти даром, а дальше очень большие штрафы
были у e2k до 4 версии включительно (до полусотни тактов). В пятой начали это
улучшать, в 6й должно быть совсем хорошо.
Проблема в то, что компилятор лепит обращения к памяти в широкой команде как
получается, он не следит за возможными невыровненными обращениями и часто просто
не имеет такой информации. (Как-то предлагалось поддержать атрибут __unaligned
как у Microsoft, да как-то не прижилось).

-- Alexander Troosh в e2k_chat