Как стать автором
Обновить

Комментарии 21

Отличная статья получилась!
Бинарничек выложите плз, протестирую на Athlon II X3
А можно и MSVCR100.dll приложить?
вообще это нарушает лицензию
гуглите visual studio redistributable 2010 — только его можно передавать
Спасибо, всё заработало.
по горькому опыту знаю что одной этой dll бы не обошлось, а скопировав все не обязательно бы заработало (там какие-то проблемы со встроенным манифестов) — качать редистрибьютабл само простое и подразумевающееся майкрософтом.
Спасибо за обе статьи, добавляю в избранное.

> Если вы будете запускать её самостоятельно, имейте в виду: она довольно чувствительна к помехам, вносимым в графики фоновой нагрузкой. Чтобы получить более достоверные результаты, закройте все остальные программы на время замера.

Кроме прикладных программ, в системе осанутся фоновые службы, работа которых также вероятно исказит статистику. Вы не оценивали степень данных искажений, можно ли их считать существенными?
Для маленьких массивов, помещающихся в L2, работа фоновых служб практически не искажает график, поскольку нагрузка бенчмарка приходится на сам процессор и на системную шину, а службы их нагружают мало.

Для массивов в несколько мегабайт становится существенно, чьи данные будут загружены в физическую память — бенчмарка или фоновых служб. Современные версии Windows, по слухам, «подыгрывают» системным службам, и дают им приоритет при выделении физической памяти. Получается, даже редкие обращения к памяти со стороны служб будут выгружать из физической памяти данные бенчмарка, и вносить в график помехи, связанные с повторной загрузкой данных из свопа.
Из-за этого правая часть графика во всех случаях испещрена скачками, затрудняющими точное определение характеристик L2 и TLB.
Интересно, что график в первой статье, где речь шла о линуксе, таких скачков не содержал.
Да, я тоже обратил на это внимание.

Предположительно, политика выделения физической памяти в Linux (использовалась серверная версия) ориентирована на повышение производительности системы, тогда как в десктопной версии Windows — на повышение отзывчивости; поэтому Windows отбирает физическую память у неинтерактивной программы в пользу интерактивных.

При случае протестирую свою программу на Windows Server.
Интересная программа. Буду брать с собой в магазин при выборе ноутбука :)
А при сборке из исходников не надо никаких дополнительных параметров, там ничего лишнего не соптимизируется?
Никаких дополнительных параметров; разве что, нужно обязательно собирать как Release, а не Debug — иначе внутри основного цикла будут лишние инструкции, кроме самого обращения к памяти.
Откуда у процессора core 2 duo t7200 взялся L3-кеш?
Его нет.
Ниже графика же пояснено, что L3 «примерещился» программе из-за того, что время доступа к TLB одного порядка с погрешностью измерения.
Если кто-то хочет глубже разобраться в особенностях работы кешей и подсистемы памяти вцелом, есть отличная остатья «What every programmer should know about memory». В каком-то смысле она уже стала классической.

www.unilim.fr/sci/wiki/_media/cali/cpumemory.pdf
114 страниц? Прямо не статья, а монография…
Зато обстоятельно и подробно :)
Пролистал… — жаль, что у нас тут нет оценки «бриллиантовая ссылка». Спасибо!
Если еще не читали, очень советую теорию почитать, начиная прям с классической работы portal.acm.org/citation.cfm?doid=363095.363141. Это если вы наукой действительно будете заниматься или занимаетесь. Ежели уже читали, вобще отлично, пишите — могу накидать интересных ссылок и сами документы на значимые работы по изучению кэш-памяти и локальности обращений. Если у вас есть такие — кидайте тоже :-)
Я предлагаю замерять минимальное значение времени, а не среднее, т.к. все внешние помехи время только увеличивают, реальное же значение должно быть очень близко к минимальному.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации