Справочная информация: Я реализовал стохастический алгоритм, который требует случайного упорядочения для лучшей сходимости. Однако это явно разрушает локальность памяти. Я обнаружил, что при предварительной выборке данных следующей итерации падение производительности сводится к минимуму.
Я могу предварительно выбрать n строк кэша, используя _mm_prefetch
простым, в основном ОС + переносимым компилятором способом - но какова длина строки кэша? Прямо сейчас я использую жестко запрограммированное значение 64, что в настоящее время является нормой для процессоров x64, но я не знаю, как это обнаружить во время выполнения, и вопрос об этом в прошлом году не нашел простого решение .
Я видел GetLogicalProcessorInformation на окнах, но я опасаюсь использовать такой сложный API для чего-то такого простого, и это не сработает на Mac или Linux.
Возможно, есть какой-то совершенно другой API / встроенный модуль, который может предварительно выбирать область памяти, определяемую в виде байтов (или слов, или чего-то еще), и позволяет мне выполнять предварительную выборку, не зная длины строки кэша?
В принципе, есть ли разумная альтернатива _mm_prefetch
с #define CACHE_LINE_LEN 64
?