Это первый раз, когда я пытаюсь профилировать многопоточную программу.Как я рассматриваю проблемы многопоточности?
Я подозреваю, что проблема в том, что она чего-то ждет, но я понятия не имею, что программа никогда не достигает 100% от процессора, графического процессора, ОЗУ или использования ввода-вывода.
До недавнего времени я работал только с проектами с однопоточными или там, где потоки были очень простыми (например, обычно это дополнительный поток, чтобы гарантировать, что пользовательский интерфейс не заблокирован во время работы программы или когда я сделал игровой движок с отдельным потоком для обработки музыкальных файлов .XM и .IT, чтобы основной поток мог делать все, в то время как другой поток в другом ядре мог позаботиться об декодировании этих файлов).
Эта программа имеет несколько потоков, и они не выполняют параллельную работу над одними и теми же задачами, каждый поток имеет свою собственную отдельную цель (например, один поток предназначен для обработки всех вызовов API, связанных с звуком, в ОС) ,
Я загрузил инструменты производительности Microsoft, есть блог сотрудника ex-Valve, который объясняет, что они работают, чтобы сделать это, но хотя мне даже удалось создать некоторые профили и еще много чего, я не совсем понимаю, что я видя, это всего лишь кучка хороших графиков для меня (за исключением графика использования процессора, о котором я уже знал, начиная с создания профилей на основе однопроцессорных приложений), так, как я нахожу, почему программа чего-то ждет? Или как я нахожу, чего это ждет? Как я нахожу, какой поток блокирует других?
Следуйте за этим для анализа WAIT: https: //channel9.msdn.com/Показывает/Defrag-Tools/Defrag-Tools-43-WPT-Wait-Analysis – magicandre1981
вы пробовали WPA? – magicandre1981
Вы имеете в виду Windows Performance Analyzer, который поставляется с инструментами производительности Microsoft? Речь идет о них, о которых я говорю в своем посте. – speeder