Обсуждение:Эльбрус/архитектура: различия между версиями
(нач) |
м (→выравнивание: дополнил) |
||
Строка 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