Знакомство с различными способами распараллеливания приложений с помощью Intel® CilkTM Plus на примере алгоритма Флойда поиска кратчайшего пути на графе
Материалы к лабораторной работе Вы можете скачать здесь.
Задание 1 – Последовательная реализация алгоритма Флойда поиска кратчайших путей на графе
Время на выполнение задания | 15 минут |
---|---|
Цель | Измерение производительности последовательной реализации алгоритма Флойда поиска кратчайших путей на графе |
Подготовка
Скопируйте папку cilk_lab6 с файлами демонстрационной программы поиска кратчайших путей на графе из папки classfiles/Lab06/WTemplates в папку classfiles/Lab06/Explorations.
Компиляция и запуск последовательной реализации алгоритма Флойда
- Перейдите в каталог classfiles/Lab06/Explorations/cilk_lab6 и откройте файл с решением Microsoft® Visual Studio 2010 cilk_lab6.sln. Скомпилируйте проекты в приложении, выбрав кнопку меню Build—>Build Solution.
- Убедитесь, что активным проектом является проект floyd_serial (щелчок правой кнопкой по проекту—>Set as a StartUp Project)
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения:________________________________________________. Повторите 3) не менее 5 раз и найдите среднее время выполнения:________________.
- Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Floyd_serial.cpp) измените строку: const int N = 500;
Задание 2 – Параллельная реализация алгоритма Флойда поиска кратчайших путей на графе с использованием OpenMP
Время на выполнение задания | 25 минут |
---|---|
Цель | Измерение производительности параллельной реализации (с использованием OpenMP) алгоритма Флойда поиска кратчайших путей на графе |
Подготовка
Убедитесь, что активным проектом является проект floyd_tasks (щелчок правой кнопкой по проекту—>Set as a StartUp Project)
Запуск параллельной (с использованием OpenMP) реализации алгоритма Флойда
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения:________________________________________________. Повторите 1) не менее 5 раз и найдите среднее время выполнения:________________.
- Замените число потоков на 2. Повторите 2) не менее 5 раз и найдите среднее время выполнения:________________.
- Повторите 2) для нескольких значений числа потоков.
- Постройте график зависимости ускорения от числа потоков.
- Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Floyd_tasks.cpp) измените строку: const int N = 500;
- Сравните результаты заданий 1 и 2. Сделайте выводы об эффективности последовательной и параллельной реализаций.
Задание 3 – Параллельная реализация алгоритма Флойда поиска кратчайших путей на графе с использованием Intel® Cilk TM Plus
Время на выполнение задания | 30 минут |
---|---|
Цель | Измерение производительности параллельной реализации (с использованием Intel® CilkTM Plus) алгоритма Флойда поиска кратчайших путей на графе |
Подготовка
Убедитесь, что активным проектом является проект floyd_cilk_for (щелчок правой кнопкой по проекту—>Set as a StartUp Project)
Запуск параллельной (с использованием Cilk) реализации алгоритма Флойда
- Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения:________________________________________________. Повторите 1) не менее 5 раз и найдите среднее время выполнения:________________.
- Замените число потоков на 2. Для изменения числа потоков пользуйтесь строчкой кода __cilkrts_set_param("nworkers","N"); Повторите 2) не менее 5 раз и найдите среднее время выполнения:________________.
- Повторите 2) для нескольких значений числа потоков.
- Постройте график зависимости ускорения от числа потоков.
- Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Floyd_cilk_for.cpp) измените строку: const int N = 500;
- Повторите пункты 1-5 для проекта floyd_cilk_spawn.
- Сравните результаты заданий 1, 2 и 3. Сделайте выводы об эффективности различных параллельных реализаций.