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

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

Аннотация: На примере задачи о поиске кратчайшего пути на графе рассматривается организация параллельных вычислений с помощью Intel® CilkTM Plus и OpenMP. Предлагается сравнить эффективность этих подходов между собой и с эффективностью последовательной реализации.

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

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

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

Подготовка

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

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

  1. Перейдите в каталог classfiles/Lab05/Explorations/cilk_lab5 и откройте файл с решением Microsoft® Visual Studio 2010 cilk_lab5.sln. Скомпилируйте проекты в приложении, выбрав кнопку меню Build—>Build Solution.
  2. Убедитесь, что активным проектом является проект dijkstra_serial (щелчок правой кнопкой по проекту—>Set as a StartUp Project)
  3. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging.

    Запишите время выполнения:________

    Повторите 3) не менее 5 раз и найдите среднее время выполнения:______.

  4. Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Dijkstra_serial.cpp) измените строку: const int N = 500;

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

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

Подготовка

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

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

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

Задание 3 - Параллельная реализация алгоритма Дейкстры поиска кратчайших путей на графе с использованием Intel® CilkTM Plus

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

Подготовка

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

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

  1. Запустите приложение, выбрав кнопку меню Debug—>Start Without Debugging. Запишите время выполнения: . Повторите 1) не менее 5 раз и найдите среднее время выполнения:_______ .
  2. Замените число потоков на 2. Для изменения числа потоков пользуйтесь строчкой кода
    cilkrts_set_param("nworkers","N");
    Повторите 2) не менее 5 раз и найдите среднее время выполнения: .
  3. Повторите 3) для нескольких значений числа потоков.
  4. Постройте график зависимости ускорения от числа потоков.
  5. Повторите для различных размеров графа (вплоть до 5000). Для того, чтобы сделать это, в файле с исходным текстом программы (Dijkstra_cilk.cpp) измените строку:
    const int N = 500;
  6. Сравните результаты заданий 1, 2 и 3. Сделайте выводы об эффективности обеих параллельных версий программы.
Дмитрий Кифель
Дмитрий Кифель
Казахстан, Темиртау
Эдуард Рагимов
Эдуард Рагимов
Грузия, Тюилиси, №83, 1997