Соответственно, программа в принципе не знает, где именно сохранены ее оперативные данные, и обращается за ними всегда к процессору, а уже он адресует к конечному местоположению, зная точно в кеше оно, или в ОЗУ?
Программа вообще оперирует только ОЗУ адресами и про кэш вообще не знает ничего.
в программе говорится о том, что надо взять и что-то сотворить с некоторым адресом. Этот адрес всегда живет в памяти, но может быть продублирован в кеше
Это как раз важные детали для понимания вопросов производительности, связанных с работой кэша.
Потому что проблемы с кэшмиссами обычно как раз появляются там, где все эти меры процессора не справляются и он оказывается на текущей (или около) инструкции без нужных данных в кэше.
при этом есть общее правило - если твой код простой и прямолинейный, то скорее всего компилятор сможет его соптимизировать с учетом особенностей процессора
при этом есть общее правило - если твой код простой и прямолинейный, то скорее всего компилятор сможет его соптимизировать с учетом особенностей процессора
Да, и стараться соблюдать локальность, то есть если данные используются вместе, то надо их поближе хранить и обрабатывать их по возможности в один заход.
при этом есть общее правило - если твой код простой и прямолинейный, то скорее всего компилятор сможет его соптимизировать с учетом особенностей процессора
Тут проблема обычно даже не у компилятора, а непосредственно у спекулятивного исполнения и предсказаний переходов у процессора.