по горькому опыту знаю что одной этой dll бы не обошлось, а скопировав все не обязательно бы заработало (там какие-то проблемы со встроенным манифестов) — качать редистрибьютабл само простое и подразумевающееся майкрософтом.
> Если вы будете запускать её самостоятельно, имейте в виду: она довольно чувствительна к помехам, вносимым в графики фоновой нагрузкой. Чтобы получить более достоверные результаты, закройте все остальные программы на время замера.
Кроме прикладных программ, в системе осанутся фоновые службы, работа которых также вероятно исказит статистику. Вы не оценивали степень данных искажений, можно ли их считать существенными?
Для маленьких массивов, помещающихся в L2, работа фоновых служб практически не искажает график, поскольку нагрузка бенчмарка приходится на сам процессор и на системную шину, а службы их нагружают мало.
Для массивов в несколько мегабайт становится существенно, чьи данные будут загружены в физическую память — бенчмарка или фоновых служб. Современные версии Windows, по слухам, «подыгрывают» системным службам, и дают им приоритет при выделении физической памяти. Получается, даже редкие обращения к памяти со стороны служб будут выгружать из физической памяти данные бенчмарка, и вносить в график помехи, связанные с повторной загрузкой данных из свопа.
Из-за этого правая часть графика во всех случаях испещрена скачками, затрудняющими точное определение характеристик L2 и TLB.
Предположительно, политика выделения физической памяти в Linux (использовалась серверная версия) ориентирована на повышение производительности системы, тогда как в десктопной версии Windows — на повышение отзывчивости; поэтому Windows отбирает физическую память у неинтерактивной программы в пользу интерактивных.
При случае протестирую свою программу на Windows Server.
Интересная программа. Буду брать с собой в магазин при выборе ноутбука :)
А при сборке из исходников не надо никаких дополнительных параметров, там ничего лишнего не соптимизируется?
Никаких дополнительных параметров; разве что, нужно обязательно собирать как Release, а не Debug — иначе внутри основного цикла будут лишние инструкции, кроме самого обращения к памяти.
Если кто-то хочет глубже разобраться в особенностях работы кешей и подсистемы памяти вцелом, есть отличная остатья «What every programmer should know about memory». В каком-то смысле она уже стала классической.
Если еще не читали, очень советую теорию почитать, начиная прям с классической работы portal.acm.org/citation.cfm?doid=363095.363141. Это если вы наукой действительно будете заниматься или занимаетесь. Ежели уже читали, вобще отлично, пишите — могу накидать интересных ссылок и сами документы на значимые работы по изучению кэш-памяти и локальности обращений. Если у вас есть такие — кидайте тоже :-)
Я предлагаю замерять минимальное значение времени, а не среднее, т.к. все внешние помехи время только увеличивают, реальное же значение должно быть очень близко к минимальному.
Экспериментальное определение характеристик кэш-памяти: практикум