Как измерить?

Когда я выполнил настройку производительности, я сначала буду работать на высоком уровне и попытаться ответить, это привязана к Cpu или IO?

когда я убеждаюсь, что это cpu-bound, тогда я попытаюсь найти точку доступа, добавив некоторый код таймера. Это хорошо, но мне не удалось выяснить эти проблемы:

  • промахи кэша
  • Эффект контекста потока.

Есть ли кто-нибудь знает, как измерить эти элементы?

Ответ 1

Вы открываете для себя другой подход к настройке производительности? Он не смотрит на I/O vs CPU bound, hotspots и timers.

Во-первых, подумайте только об одном потоке. Выполнение потока очень похоже на дерево. Существует основная функция (багажник). Есть пункты, когда вызываются подпрограммы (ветки). Существуют терминальные инструкции (листья) и блокировка вызовов, таких как ввод-вывод (фрукты). Общее время выполнения программы - это сумма всех листьев и всего плода.

Что вы хотите сделать, это обрезать дерево, сделав его максимально легким, не убивая его.

То, что многие люди делают, это взвешивать (время) все это, а затем взвешивать их части и т.д. и надеяться найти горячие точки (листовые ветки), которые, возможно, они могут обрезать.

Другой способ: 1) выбрать произвольные листья или фрукты. 2) от каждого листа или плода, покрасьте линию от него вдоль ветки, на которой он находится, полностью назад к стволу. 3) Обратите внимание на ветки, на которых нарисованы > 1 строчка. 4) Спросите: "Мне нужна эта ветка?". Если вы можете обрезать его, сделайте это. Вы устраните весь вес ветки, и вы сделали это, не взвешивая ее. Затем начните.

Это идея случайной приостановки. Есть определенные проблемы, которые он не найдет, но большинство из них он найдет, быстро, включая любые, которые могут найти временные потоки.

Ответ 2

1) Используйте cachegrind/callgrind/kcachegrind http://valgrind.org/info/tools.html#cachegrind

довольно полезно с точки зрения анализа локальности памяти при определенных наборах допущений.

2) Резьба действительно очень болезненна для правильного профиля. Играйте с помощью cpusets и сродства процессов, на современных системах NUMA он становится критическим быстро.