0

Я пытаюсь измерить, сколько времени программа проводит в своих синхронизированных частях, например. критические разделы, защищенные блокировками (или любой другой формой контроля параллелизма).Как определить синхронизацию потоков в программе в моем прохождении LLVM?

Я смущен о том, как это сделать, и о том, как определить методы контроля параллелизма в программе, которую я выполняю через мой пропуск llvm.

ответ

2

Я написал tool, Contech, в инструмент LLVM IR для сбора информации о синхронизации (а также других данных). Существует также инструмент, Harmony, который позволяет LLVM IR измерять аналогичную информацию.

Я расскажу о трех компонентах, которые вам потребуются, чтобы написать собственный пропуск LLVM.

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

Во-вторых, для идентификации операций управления синхронизацией пропуск LLVM должен будет вставить необходимое оборудование для записи важной информации об этой операции синхронизации, такой как ее идентификатор (то есть адрес) и временная метка.

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

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