Как я могу сделать очистку кэша ЦП в x86 Windows?

Важно иметь в виду, что MVC и WebForms не конкурируют, и каждый не лучше, чем другой. Они - просто различные инструменты. Большинство людей, кажется, приближается к MVC по сравнению с WebForms как, "нужно быть лучшим молотком, чем другой". Это неправильно. Каждый - молоток, другой отвертка. Оба используются в процессе соединения вещей, но имеют различные достоинства и недостатки.

, Если Вы оставили Вас с дурным тоном, Вы, вероятно, пытались использовать отвертку для обстрела гвоздя. Определенные проблемы являются громоздкими с WebForms, которые становятся изящными и простыми с MVC, и наоборот.

46
задан Ciro Santilli 新疆改造中心法轮功六四事件 8 November 2015 в 10:31
поделиться

3 ответа

К счастью, есть несколько способов явно очистить кеши.

Инструкция «wbinvd» записывает обратно измененное содержимое кеша и помечает кеши как пустые. Он выполняет цикл шины, чтобы внешние кэши сбрасывали свои данные. К сожалению, это привилегированная инструкция. Но если есть возможность запустить тестовую программу под чем-то вроде DOS, это правильный путь. Это имеет то преимущество, что объем кэша «ОС» остается очень маленьким.

Кроме того, есть инструкция «invd», которая делает недействительными кеши без сброса их обратно в основную память. Это нарушает согласованность основной памяти и кеша, поэтому вам придется позаботиться об этом самостоятельно. Не рекомендуется.

Для целей сравнительного анализа самое простое решение, вероятно, скопировать большой блок памяти в область, отмеченную WC (объединение записи) вместо WB. Область графической карты с отображением памяти является хорошим кандидатом, или вы можете самостоятельно пометить область как WC через регистры MTRR.

Вы можете найти некоторые ресурсы по тестированию коротких процедур на Тестовые программы для измерения тактовых циклов и мониторинг производительности.

52
ответ дан 26 November 2019 в 20:36
поделиться

Существуют инструкции сборки x86, заставляющие ЦП очищать определенные строки кэша (например, CLFLUSH ), но они довольно неясны. CLFLUSH, в частности, сбрасывает только выбранный адрес из кешей L1.

что-то столь же хитрое, как выполнение, скажем, большой копии памяти?

Да, это самый простой подход, который гарантирует, что ЦП очищает все уровни кеша. Просто исключите время очистки кеша из ваших тестов, и вы получите хорошее представление о том, как ваша программа работает под давлением кеша.

8
ответ дан 26 November 2019 в 20:36
поделиться

К сожалению, нет возможности явно очистить кеш. Вот несколько вариантов:

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

2.) Включите отключение кеша в регистрах управления x86 и протестируйте это. Это, вероятно, также отключит кэш инструкций, что может быть не тем, что вам нужно.

3.) Реализуйте часть вашего кода для тестирования (если это возможно), используя Non-Temporal инструкции . Хотя это всего лишь подсказки процессору об использовании кеша, он все еще может делать то, что хочет.

1, вероятно, самый простой и достаточный для ваших целей.

Править : Упс, стою исправлюсь есть инструкция сделать недействительным кеш x86,

2
ответ дан 26 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: