Комментарии 15
Всегда было интересно пощупать POWER как раз для целей масштабного распараллеливания.
Не упомянуто главное отличие x86 от других популярных архитектур - memory ordering model.
x86 реализует сильную модель - Total Store Ordering, и очень многие программисты вообще не представляют, что бывают более слабые модели, и если на это не расчитывать, то в однопотоке вроде бы все хорошо, а многопоточный софт сразу приходит в полную небоеготовность. Какие там размеры кэш-линий и страниц памяти, если у вас любой забытый memory barrier в дальнем углу приводит к полной жопе неразберихе...
Вот почитайте лучше Linux Journal в двух частях, а то осатанеете свой многопоточный софт портировать намного раньше, чем вас более широкая кэш-линия начнет за производительность кусать.
Круть, спасибо за дополнение!
А разве c/c++ memory model не дает абстракцию от конкретной архитектуры?
Языки как раз дают универсальные абстракции, подходящие для "слабых" моделей, но программисты часто ими пренебрегают и ориентируются только на "сильные " модели.
ещё бывают проблемы с порядком байт в слове (так же известные, как endianness). Правда, все популярные платформы сегодня остроконечники, но можно нарваться. Чтобы уберечься, соблюдайте размерность типов и не обращайтесь к байтам слова по адресам. Всегда используйте сдвиги.
Более простой (и предпочтительный) способ
sysconf(_SC_LEVEL2_CACHE_LINESIZE);
Для программистов на C++17 предпочтительнее будет std::hardware_constructive_interference_size
Странно, что ничего не сказано про выравнивание. х86, по умолчанию, позволяет доступ к не выровненным данным, тогда как многие другие платформы жестко требуют выравнивания.
5 советов, которые помогут при переносе кода на платформы, отличные от х86