Напротив кэш предвыборки намек

есть ли подсказка, которую я могу поместить в свой код, указывающий, что строка должна быть удалены из кэша? В отличие от подсказки prefetch, которая указывала бы, что мне скоро понадобится строка. В моем случае я знаю, когда мне не понадобится линия на некоторое время, поэтому я хочу иметь возможность избавиться от нее, чтобы освободить место для линий, которые мне нужны.

1 ответов


clflush, clflushopt

Invalidates от каждого уровня иерархии кэша в домене когерентности кэша строка кэша, содержащая линейный адрес, заданный с помощью операнда памяти. Если эта строка кэша содержит измененные данные на любом уровне иерархия кэша, эти данные записываются обратно в память.

они доступны не на каждом процессоре (в частности,clflushopt доступно только для 6-го поколения и позже). Чтобы быть уверенным, вы должны использовать CPUID чтобы проверить их наличие:

в наличии CLFLUSH указывается наличием флага функции CPUID CLFSH (С CPUID.01H: EDX[бит 19]).

в наличии CLFLUSHOPT указано на наличие CPUID характеристика флага CLFLUSHOPT (С CPUID.(EAX=7, ECX=0): EBX[бит 23]).

если возможно, вы должны использовать clflushopt. Он превосходит clflush при промывке буферы больше 4KiB (64 линии).

это эталон от руководство по оптимизации Intel:clflush (modified) is 111 cycles/line, clflush (shared) is 38 cycles/line, clflushopt (modified) is 17 cycles/line, clflushopt (shared) is 4 cycles/line

для информационных целей (предполагая, что вы работаете в привилегированном контексте), вы также можете использовать invd (в качестве опции nuke-from-orbit). Это:

аннулирует (сбрасывает) внутренние кэши процессора и выдает цикл шины специальной функции, который направляет внешний схрона также смыть себя. Данные, хранящиеся во внутренних кэшах, не записываются обратно в основную память.

или wbinvd, где:

записывает все измененные строки кэша во внутреннем кэше процессора в основную память и аннулирует (сбрасывает) внутренний кэш. Затем инструкция выдает цикл шины специальной функции, который направляет внешние кэши также на запись назад измененные данные и другой цикл шины, чтобы указать, что внешний тайники должны быть признаны недействительными.

будущая инструкция, которая может сделать это в ISA club. Хотя это не будет соответствовать вашей потребности (потому что это не обязательно аннулирует линию), это стоит упомянуть для полноты. Это:

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