ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
3
Рис. 2. Схема генерации и обработки событий
Средства динамического поиска гонок в настоящее время обычно
строят на основе анализа отношения предшествования. Подход на
базе отношения предшествования сообщает о найденной гонке, если
два потока или более используют общую память, причем доступы к
памяти причинно неупорядочены по определению из [5]. Выполне-
ние программы разбивается на сегменты, которые определяют обла-
сти потока выполнения, содержащие только обращения к памяти.
Динамические анализаторы требуют поддержки журнала обра-
щений для каждой области памяти, к которой выполнялся доступ. С
увеличением размера журналов это создает дополнительные наклад-
ные расходы как памяти, так и при анализе существования гонки.
Пусть
R
— множество сегментов, в которых осуществлялось чтение
некоторой области памяти
m
, а
W
— множество сегментов, в которых
осуществлялось обращение на запись к этой же области памяти
m.
Для уменьшения размеров хранимой истории в списке сегментов
R
хранятся только сегменты, отвечающие условию: любой сегмент из
множества
R
произошел после любого сегмента из множества
W
или
параллелен с ними, а в списке сегментов присутствуют
W
только по-
парно неупорядоченные сегменты [6].
Анализатор гонок с использованием системы LLVM.
Разрабо-
танный анализатор состоит из следующих компонентов (рис. 3):
– модуль компилятора для модификации генерируемого машин-
ного кода;
– библиотека переопределенных функций POSIX для работы с
потоками и примитивами синхронизации;
– библиотека регистрации событий;
– библиотека, содержащая реализацию гибридного алгоритма
поиска гонок.