Есть ли способ сохранить горячий фронт в пустом циклическом буфере наддува?

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

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

Есть ли какое-либо действие с использованием открытого интерфейса, которое, когда циклический буфер пуст, будет сохранять горячую точку вставки в кеше?

0

Решение

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

Если вы можете получить указатель на переднюю часть контейнера, вы можете использовать __builtin_prefetch на нем, чтобы принести его в кэш. С другой стороны, push а также pop элемент.

1

Другие решения

Возможно, вы захотите изучить использование CAT (Cache Allocation Technology). Я не уверен, где это в данный момент, но посмотрим https://lwn.net/Articles/694800/ где Linux был с ним в июле 2016 года.

CAT — это технология Intel для разделения частей кеша и выделения их для различных целей. Потоки, которым назначен один фрагмент кэша, не могут высвобождать данные, принадлежащие другим фрагментам, хотя я полагаю, что они все еще могут использовать его для чтения.

0