Опубликован: 19.10.2012 | Доступ: свободный | Студентов: 301 / 65 | Длительность: 05:51:00
Самостоятельная работа 6:

Знакомство с различными способами распараллеливания приложений с помощью Intel® CilkTM Plus на примере алгоритма Флойда поиска кратчайшего пути на графе

Аннотация: Содержание работы составляет сравнительное исследование эффективности распараллеливания алгоритма Флойда с помощью OpenMP и Intel® CilkTMPlus, а также исследование масштабируемости обоих подходов.
Ключевые слова: set, AS, project

Материалы к лабораторной работе Вы можете скачать здесь.

Задание 1 – Последовательная реализация алгоритма Флойда поиска кратчайших путей на графе

Время на выполнение задания 15 минут
Цель Измерение производительности последовательной реализации алгоритма Флойда поиска кратчайших путей на графе

Подготовка

Скопируйте папку cilk_lab6 с файлами демонстрационной программы поиска кратчайших путей на графе из папки classfiles/Lab06/WTemplates в папку classfiles/Lab06/Explorations.

Компиляция и запуск последовательной реализации алгоритма Флойда

  1. Перейдите в каталог classfiles/Lab06/Explorations/cilk_lab6 и откройте файл с решением Microsoft® Visual Studio 2010 cilk_lab6.sln. Скомпилируйте проекты в приложении, выбрав кнопку меню Build—>Build Solution.
  2. Убедитесь, что активным проектом является проект floyd_serial (щелчок правой кнопкой по проекту—>Set as a StartUp Project)
  3. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения:________________________________________________. Повторите 3) не менее 5 раз и найдите среднее время выполнения:________________.
  4. Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Floyd_serial.cpp) измените строку: const int N = 500;

Задание 2 – Параллельная реализация алгоритма Флойда поиска кратчайших путей на графе с использованием OpenMP

Время на выполнение задания 25 минут
Цель Измерение производительности параллельной реализации (с использованием OpenMP) алгоритма Флойда поиска кратчайших путей на графе

Подготовка

Убедитесь, что активным проектом является проект floyd_tasks (щелчок правой кнопкой по проекту—>Set as a StartUp Project)

Запуск параллельной (с использованием OpenMP) реализации алгоритма Флойда

  1. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения:________________________________________________. Повторите 1) не менее 5 раз и найдите среднее время выполнения:________________.
  2. Замените число потоков на 2. Повторите 2) не менее 5 раз и найдите среднее время выполнения:________________.
  3. Повторите 2) для нескольких значений числа потоков.
  4. Постройте график зависимости ускорения от числа потоков.
  5. Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Floyd_tasks.cpp) измените строку: const int N = 500;
  6. Сравните результаты заданий 1 и 2. Сделайте выводы об эффективности последовательной и параллельной реализаций.

Задание 3 – Параллельная реализация алгоритма Флойда поиска кратчайших путей на графе с использованием Intel® Cilk TM Plus

Время на выполнение задания 30 минут
Цель Измерение производительности параллельной реализации (с использованием Intel® CilkTM Plus) алгоритма Флойда поиска кратчайших путей на графе

Подготовка

Убедитесь, что активным проектом является проект floyd_cilk_for (щелчок правой кнопкой по проекту—>Set as a StartUp Project)

Запуск параллельной (с использованием Cilk) реализации алгоритма Флойда

  1. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения:________________________________________________. Повторите 1) не менее 5 раз и найдите среднее время выполнения:________________.
  2. Замените число потоков на 2. Для изменения числа потоков пользуйтесь строчкой кода __cilkrts_set_param("nworkers","N"); Повторите 2) не менее 5 раз и найдите среднее время выполнения:________________.
  3. Повторите 2) для нескольких значений числа потоков.
  4. Постройте график зависимости ускорения от числа потоков.
  5. Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Floyd_cilk_for.cpp) измените строку: const int N = 500;
  6. Повторите пункты 1-5 для проекта floyd_cilk_spawn.
  7. Сравните результаты заданий 1, 2 и 3. Сделайте выводы об эффективности различных параллельных реализаций.