Структура: у меня есть 8 64-битных целых чисел (512 бит = 64 байта, предполагаемая ширина строки кэша), которые я хотел бы сравнить с другим, одним 64-битным целым числом, в свою очередь, без кэш-промахов . Набор данных, к сожалению, абсолютно негибкий — он уже максимально мал.
Шаблон доступа: каждый uint64_t фактически является массивом битов 4x4x4, каждый бит представляет наличие или отсутствие вокселя. Это означает, что иногда я буду использовать половину одного фрагмента и половину другого или даже углы 8 разных 64-битных фрагментов... Я предполагаю, что это означает, что существует высокая вероятность отсутствия выравнивания.
Как это сделать как можно быстрее, т. е. без перегрузки кеша?
P.S. Идея состоит в том, что этот код в конечном итоге будет работать на довольно широком диапазоне архитектур с шириной строки кэша не менее 64 байт, поэтому я бы предпочел, чтобы это было максимально быстро. Это также означает, что я не могу полагаться на MOVNTDQA, который в любом случае может привести к снижению производительности, несмотря на загрузку 9-го элемента непосредственно в ЦП.
П.П.С. Мои познания в этой области довольно ограничены, поэтому, пожалуйста, будьте со мной полегче. Но, пожалуйста, избавьте меня от преждевременных комментариев по оптимизации; будьте уверены, что это 3% этого приложения, которые действительно имеют значение.