Я сделал это много. Если у вас есть IDE или ICE, есть метод , который требует ручного усилия, но работает без сбоев.
Предупреждение: современные программисты ненавидят это, и я собираюсь понизиться. Они любят свои инструменты. Но это действительно работает, и у вас не всегда есть хорошие инструменты.
Я предполагаю, что в вашем случае код является чем-то вроде DSP или видео, которое работает по таймеру и должно быть быстрым. Предположим, что вы запускаете на каждом такте таймера подпрограмму A. Напишите некоторый тестовый код для запуска подпрограммы A в простом цикле, скажем 1000 раз или достаточно долго, чтобы заставить вас ждать не менее нескольких секунд.
Пока он работает, случайным образом остановите его клавишей паузы, сэмплируйте стек вызовов (а не только счетчик программы) и запишите его. (Это часть руководства.) Делайте это несколько раз, например, 10. Одного раза недостаточно.
Теперь ищите сходства между образцами стека. Ищите любую инструкцию или инструкцию вызова, которая появляется по крайней мере на 2 образцах. Их будет много, но некоторые будут в коде, который вы могли бы оптимизировать.
Сделайте это, и вы получите хорошее ускорение, гарантированное. 1000 итераций займут меньше времени.
Причина, по которой вам не нужно много образцов, заключается в том, что вы не ищете мелочи. Например, если вы видите конкретную инструкцию вызова на 5 из 10 выборок, она отвечает примерно за 50% общего времени выполнения. Больше образцов скажут вам более точно, каков процент, если вы действительно хотите знать. Если вы похожи на меня, все, что вы хотите знать, это где оно находится, так что вы можете исправить это и перейти к следующему.
Делайте это до тех пор, пока вы не сможете найти что-то еще для оптимизации, и вы достигнете максимальной скорости или приблизитесь к ней.