и делая cflush можно сказать что данные были в кэше
пример:
time = rdtsc(); // чтение счетчика
maccess(&data[0x300]) //
delta = rdtsc() - time
и можно сказать были ли данные по адресу в кше
ЧТобы понять - поговорим про предсказание ветвлений
может встретится место в виде:
if (raining) { take_umbrella(); } else { do_something_else(); };
if (raining) { take_umbrella(); } else { do_something_else(); };
а можно попытаться предсказать куда мы пойдем дальше
процессор переходит в специальный режим - speculation
каждая инструкция анотируется флагом (speculative)
если процессор угадал - он работает быстрее
и если вдруг мы ошиблись и пошли не по той ветке - то происходит сброс данных
если не угадал - то данные удалятся и мы пойдем по другой ветке
и это не замедлит процессор по сравнению со случаем когда мы бы остановились
если мы выполним невилидные инструкции - то ничего не случится пока не поймем в какую втеку попали
Предполагается что из кода программы не узнать было ли предсказание успешным или нет
Предсказатель ветвлений так или иначе записывает историю