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