Мотивация этого вопроса - понять, как предварительная загрузка памяти программного обеспечения влияет на мою программу.
Я создаю многопоточный разделитель данных.Каждый поток последовательно читает локальный исходный массив и случайным образом записывает в другой локальный целевой массив.Поскольку содержимое исходного массива не будет использоваться в ближайшем будущем, я бы хотел использовать инструкцию prefetchtnta
, чтобы избежать их роста внутри кэшей.С другой стороны, каждый поток имеет локальный объединитель записи, который объединяет записи и фиксирует в локальном массиве назначения, используя _mm_stream_si64
.Интуиция и цель - убедиться, что каждый поток имеет фиксированный размер кэша данных для работы и никогда не занят неиспользуемыми битами.
Является ли этот дизайн разумным?Я не знаком с тем, как работает процессор, и не могу быть уверен, что эта стратегия на самом деле отключает аппаратные средства предварительной выборки, которые предположительно лишают законной силы этот подход.Если это просто я наивный, каков правильный путь для достижения этой цели?