2013-02-20 5 views
0

Какие инструменты существуют для устранения неполадок параллельных программ?Устранение неполадок параллельного кода

Скажем, у меня есть код, который работает хуже, чем ожидалось (4 раза вместо теоретического 8-кратного серийного исполнения). Я подозреваю, что причиной является либо некоторая блокировка, вызванная потоками, обращающимися к общим переменным (например, смежным элементам общего вектора), либо блокировка, вызванная потоками, обращающимися к куче (что, я полагаю, также является общим ресурсом). Но я не знаю, какие инструменты доступны для проверки того, что может быть причиной чрезмерных спящих потоков, переключения потоков и т. Д. Например. профайлер скажет мне, какая функция занимает много времени, и, возможно, что было много активности, связанной с управлением потоками, но не то, что было причиной и состоянием потоков (или, может быть, я не знаю, как использовать одну скважину).

Я работаю в C++ на OS X.

+0

Приятный, но не помогает без кода. Здесь нет гадалок! –

+0

Я могу опубликовать код ошибки, если больше людей скажут, что это действительно необходимо, но я спрашиваю о доступных инструментах, когда речь идет о семействе проблем, а не о решении конкретной проблемы. – Puchatek

+1

Есть хороший параллельный профилировщик для dotnet в VS (показывает, какой поток ждет чего), но я не знаю такого инструмента для других платформ. Вы всегда можете начинать с выбора каждого потенциально ожидающего кода, например, примитивов синхронизации. Дамп измеряет время ожидания для журнала. Если есть какая-то разногласия, есть шанс, что вы сможете разобраться в деталях. –

ответ

2

Следующее может представлять интерес

Vampir - стоит денег

DTrace - уже установлена ​​на вашем компьютере, предоставляет инструменты вам нужно, но далеко от вне-коробки решения

TAU

Это всего лишь первые три инструмента, которые приходят на ум, я уверен, что еще один прилежный гуглинг станет больше.

Ваш последний комментарий Возможно, я не знаю, как использовать одну скважину хорошо сделан, эти инструменты обычно требуют значительного обязательства использовать их, понимать, что они говорят вам, и делать соответствующие и улучшающие производительность модификации ваших программ.

Смежные вопросы