четверг, апреля 29, 2010

Несколько ссылок на материалы про кэш

Производительность программы можно улучшить, если знать как именно происходит работа с кэшем, тогда можно минимизировать промахи кэша (cache miss). Несколько ссылок про это.

Be nice to your cache - небольшая вводная статья
Gallery of Processor Cache Effects - большая подробная статья
Pitfalls of OOP - очень известные слайды с картинками

Updated 05.05.2010:
At Least We Aren’t Doing That: Real Life Performance Pitfalls - слайды+аудио про производительность, в том числе про кэш

Если вам интересно еще почитать про кэш, поищите по ключевым словам cache-aware и cache-oblivious.
По cache-aware вы найдете про затачивание алгоритмов и структур данных под какой-то конкретный процессор, а по cache-oblivious - про затачивание под кэш в принципе.

Но не забывайте, что преждевременная оптимизацая есть зло. :-)

12 коммент.:

Alex Ott комментирует...

а также незабвенный труд U. Drepper'а - What Every Programmer Should Know About Memory

Гиркин Михаил комментирует...

Спасибо, отличные ссылки. Хоть я и не С++-программист, но меня очень впечатлило.

Андрей комментирует...

А кэш всех касается, не только C++

Andrey комментирует...

Алена, спасибо большое за ссылки.Данная тема очень актуальна, причем единицы программистов на C/C++ знают такие вещи.

adontz комментирует...

Блин, на недельку бы раньше :-)

Anton Chikin комментирует...

Алёна, а вы не в курсе, что автор последних слайдов имел в виду, когда говорил "Don't test for exceptions –sort by them." на 111 странице?

Alena комментирует...

2Anton Chikin:

Алёна, а вы не в курсе, что автор последних слайдов имел в виду, когда говорил "Don't test for exceptions –sort by them." на 111 странице?

Не-а, не знаю.

Nick комментирует...

2Anton Chikin
Я думаю, что автор имел в виду следующее:
Вместо цикла, внутри которого будет проверка на какой-то особый случай для каждого элемента контейнера в отдельности - лучше или 1) изначально держать эти элементы в контейнерах так, чтобы эта проверка в теле цикла была не нужна или 2) отсортировать по соответствующему критерию.
Насчет 2), я не уверен, что это часто будет лучше, а вот 1) - вполне.

san комментирует...

http://rus-linux.net/lib.php?name=/MyLDP/hard/memory/memory.html

Anton Chikin комментирует...

To Nick : А, энлайтмент. Речь шла об экспериментах с dirty flag в начале статьи, когда они получили выигрыш засчёт избавления от ветвления в коде.

Dmitry Vyukov комментирует...

"cache-aware" так же зачастую называется "cache-conscious".

Руслан комментирует...

Отличные ссылки. Для меня сейчас очень актуальны!