1. введем N из диапазона 1 <= N <= 40
2. введем N > 40
В первом случае зависимости по переменной A для цикла нет, то есть, при одновременном выполнении витков цикла не будет чтения и записи одного и того же элемента массива A на разных витках. Но во втором случае частичный динамический анализ фиксирует зависимость. Этот простой пример показывает несовершенство динамического анализа и необходимость полного тестового покрытия выполнения анализируемой программы.
Результаты тестирования гибридного анализа отражены в Таблице 2:
Таблица 2
Примеры: | База данных статического анализа | База данных частичного динамического анализа | Модифицированная база данных | ||
Число возможных зависимостей | Число реальных зависимостей | Число утвержденных зависимостей | Число возможных зависимостей | Число реальных зависимостей | |
JACK | 1 | 16 | 1 | 0 | 17 |
Косвенная индексация | 1 | 0 | 1 | 0 | 1 |
Ввод параметра цикла | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 |
В данной работе исследованы методы статического и динамического анализа зависимостей по данным для последовательных программ. Разработан и реализован алгоритм гибридного анализа, объединяющий достоинства обоих методов.
Для реализации гибридного анализа понадобилось:
1. Разработать и реализовать алгоритм сбора информации в базе данных САПФОР о возможных зависимостях по данным между итерациями циклов.
2. Разработать алгоритм частичного динамического анализа последовательной программы и реализовать его на базе уже существующей библиотеки функций динамического анализа
3. Разработать и реализовать алгоритм коррекции одной базы данных САПФОР с использованием информации из другой.
Полученные программные реализации протестированы на реальных примерах и в будущем могут быть включены в качестве анализатора в систему автоматизации распараллеливания САПФОР. Общий объем разработанного программного кода превышает 7000 строк на языке Си++.