Какие инструменты существуют для устранения неполадок параллельных программ?Устранение неполадок параллельного кода
Скажем, у меня есть код, который работает хуже, чем ожидалось (4 раза вместо теоретического 8-кратного серийного исполнения). Я подозреваю, что причиной является либо некоторая блокировка, вызванная потоками, обращающимися к общим переменным (например, смежным элементам общего вектора), либо блокировка, вызванная потоками, обращающимися к куче (что, я полагаю, также является общим ресурсом). Но я не знаю, какие инструменты доступны для проверки того, что может быть причиной чрезмерных спящих потоков, переключения потоков и т. Д. Например. профайлер скажет мне, какая функция занимает много времени, и, возможно, что было много активности, связанной с управлением потоками, но не то, что было причиной и состоянием потоков (или, может быть, я не знаю, как использовать одну скважину).
Я работаю в C++ на OS X.
Приятный, но не помогает без кода. Здесь нет гадалок! –
Я могу опубликовать код ошибки, если больше людей скажут, что это действительно необходимо, но я спрашиваю о доступных инструментах, когда речь идет о семействе проблем, а не о решении конкретной проблемы. – Puchatek
Есть хороший параллельный профилировщик для dotnet в VS (показывает, какой поток ждет чего), но я не знаю такого инструмента для других платформ. Вы всегда можете начинать с выбора каждого потенциально ожидающего кода, например, примитивов синхронизации. Дамп измеряет время ожидания для журнала. Если есть какая-то разногласия, есть шанс, что вы сможете разобраться в деталях. –