Обсуждение:Эльбрус/архитектура: различия между версиями
м (→выравнивание: дополнил) |
м (→выравнивание) |
||
Строка 6: | Строка 6: | ||
В общем, делайте выравнивание на 16 – не ошибётесь. | В общем, делайте выравнивание на 16 – не ошибётесь. | ||
Если в исходниках работают с 256 и 512 битными регистрами AVX, то выравнивание | Если в исходниках работают с 256 и 512 битными регистрами AVX, то выравнивание | ||
там должно быть 32 и 64 соответственно, - так и оставляйте это (вряд ли будет | там должно быть 32 и 64 соответственно, - так и оставляйте это (вряд ли будет | ||
Строка 19: | Строка 19: | ||
были у e2k до 4 версии включительно (до полусотни тактов). В пятой начали это | были у e2k до 4 версии включительно (до полусотни тактов). В пятой начали это | ||
улучшать, в 6й должно быть совсем хорошо. | улучшать, в 6й должно быть совсем хорошо. | ||
Проблема в то, что компилятор лепит обращения к памяти в широкой команде как | Проблема в то, что компилятор лепит обращения к памяти в широкой команде как | ||
получается, он не следит за возможными невыровненными обращениями и часто просто | получается, он не следит за возможными невыровненными обращениями и часто просто |
Версия от 23:03, 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