четверг, апреля 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 комментариев:

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

    ОтветитьУдалить
  2. А кэш всех касается, не только C++

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

    ОтветитьУдалить
  4. Блин, на недельку бы раньше :-)

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

    ОтветитьУдалить
  6. 2Anton Chikin:

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

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

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

    ОтветитьУдалить
  8. Анонимный3/5/10 02:53

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

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

    ОтветитьУдалить
  10. "cache-aware" так же зачастую называется "cache-conscious".

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

    ОтветитьУдалить