Как стать автором
Обновить

5 советов, которые помогут при переносе кода на платформы, отличные от х86

Время на прочтение8 мин
Количество просмотров3.5K
Всего голосов 21: ↑20 и ↓1+19
Комментарии15

Комментарии 15

Всегда было интересно пощупать POWER как раз для целей масштабного распараллеливания.

Понятно, что IBM'у сам бог велел портировать на Power. Но простым смертным сейчас ARM куда актуальнее…

Ну вот смотрите, методы то универсальны. К примеру PAGE_SIZE 16 КБ на ARM64.

Не упомянуто главное отличие x86 от других популярных архитектур - memory ordering model.

x86 реализует сильную модель - Total Store Ordering, и очень многие программисты вообще не представляют, что бывают более слабые модели, и если на это не расчитывать, то в однопотоке вроде бы все хорошо, а многопоточный софт сразу приходит в полную небоеготовность. Какие там размеры кэш-линий и страниц памяти, если у вас любой забытый memory barrier в дальнем углу приводит к полной жопе неразберихе...

Вот почитайте лучше Linux Journal в двух частях, а то осатанеете свой многопоточный софт портировать намного раньше, чем вас более широкая кэш-линия начнет за производительность кусать.

Круть, спасибо за дополнение!

А разве c/c++ memory model не дает абстракцию от конкретной архитектуры?

Языки как раз дают универсальные абстракции, подходящие для "слабых" моделей, но программисты часто ими пренебрегают и ориентируются только на "сильные " модели.

Так да, и вывод такой, что при написании перформанс многопотока надо ориентироваться на memory model языка а не архитектуры.

НЛО прилетело и опубликовало эту надпись здесь

ещё бывают проблемы с порядком байт в слове (так же известные, как endianness). Правда, все популярные платформы сегодня остроконечники, но можно нарваться. Чтобы уберечься, соблюдайте размерность типов и не обращайтесь к байтам слова по адресам. Всегда используйте сдвиги.

Более простой (и предпочтительный) способsysconf(_SC_LEVEL2_CACHE_LINESIZE);

Для программистов на C++17 предпочтительнее будет std::hardware_constructive_interference_size

Странно, что ничего не сказано про выравнивание. х86, по умолчанию, позволяет доступ к не выровненным данным, тогда как многие другие платформы жестко требуют выравнивания.

ничего не сказано про выравнивание

Да там как то и тему с endianness обошли стороной, а сразу с козырей зашли, cache line, pagesize, etc.

Ладно порядок, даже размер слова и байта пропустили.

У вас в одном байте не 8 бит? Тогда мы идём к вам ;-)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий