Я пытаюсь профилировать некоторый код обработки сигнала, работающий на устройстве, используя инструменты. Код написан на C ++. Ниже представлен выходной профиль в течение нескольких секунд. , ,
Ясно, что вызовы powf занимают большую часть процессорного времени, однако я не могу найти, как определить, какие вызовы powf являются самыми большими нарушителями в моем коде. Я клянусь, что когда я использовал акулу, было очень легко получить номера строк для звонков в источнике. Все, что я могу получить от приборов, это ерунда машинного кода.
Расширяя powf
Треугольник дает следующее. , , ,
Казалось бы, код, содержащий вызовы powf
является частью функции обратного вызова, которую вы передаете в CoreAudio. Инструменты, кажется, не могут символизировать цепочку вызовов для обратного вызова, поэтому вы просто видите необработанные адреса в коде. Это может быть можно идентифицировать эти адреса с помощью подходящего инструмента (например, otool
или аналогичный), но лучшей стратегией в долгосрочной перспективе было бы внедрение тестового жгута, который вызывает ваш код обратного вызова в цикле с фиктивными данными — это, скорее всего, окупится, когда вы будете использовать его для будущих действий по отладке и профилированию. Обратите внимание, что для удобства вы можете просто создать тестовый жгут как исполняемый файл Mac OS X для профилирования / отладки, поскольку ошибки и узкие места производительности, скорее всего, будут похожи на обеих платформах, по крайней мере, в первом приближении.
Других решений пока нет …