Производительность программы можно улучшить, если знать как именно происходит работа с кэшем, тогда можно минимизировать промахи кэша (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 - про затачивание под кэш в принципе.
Но не забывайте, что преждевременная оптимизацая есть зло. :-)
а также незабвенный труд U. Drepper'а - What Every Programmer Should Know About Memory
ОтветитьУдалитьСпасибо, отличные ссылки. Хоть я и не С++-программист, но меня очень впечатлило.
ОтветитьУдалитьА кэш всех касается, не только C++
ОтветитьУдалитьАлена, спасибо большое за ссылки.Данная тема очень актуальна, причем единицы программистов на C/C++ знают такие вещи.
ОтветитьУдалитьБлин, на недельку бы раньше :-)
ОтветитьУдалитьАлёна, а вы не в курсе, что автор последних слайдов имел в виду, когда говорил "Don't test for exceptions –sort by them." на 111 странице?
ОтветитьУдалить2Anton Chikin:
ОтветитьУдалитьАлёна, а вы не в курсе, что автор последних слайдов имел в виду, когда говорил "Don't test for exceptions –sort by them." на 111 странице?
Не-а, не знаю.
2Anton Chikin
ОтветитьУдалитьЯ думаю, что автор имел в виду следующее:
Вместо цикла, внутри которого будет проверка на какой-то особый случай для каждого элемента контейнера в отдельности - лучше или 1) изначально держать эти элементы в контейнерах так, чтобы эта проверка в теле цикла была не нужна или 2) отсортировать по соответствующему критерию.
Насчет 2), я не уверен, что это часто будет лучше, а вот 1) - вполне.
http://rus-linux.net/lib.php?name=/MyLDP/hard/memory/memory.html
ОтветитьУдалитьTo Nick : А, энлайтмент. Речь шла об экспериментах с dirty flag в начале статьи, когда они получили выигрыш засчёт избавления от ветвления в коде.
ОтветитьУдалить"cache-aware" так же зачастую называется "cache-conscious".
ОтветитьУдалитьОтличные ссылки. Для меня сейчас очень актуальны!
ОтветитьУдалить