Производительность программы можно улучшить, если знать как именно происходит работа с кэшем, тогда можно минимизировать промахи кэша (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 - про затачивание под кэш в принципе.
Но не забывайте, что преждевременная оптимизацая есть зло. :-)
Quaternions and spherical trigonometry
3 дня назад
12 коммент.:
а также незабвенный труд 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".
Отличные ссылки. Для меня сейчас очень актуальны!
Отправить комментарий