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