Санкт-Петербургский государственный университет
Опубликован: 11.10.2012 | Доступ: свободный | Студентов: 751 / 328 | Длительность: 01:50:00
Лекция 2:

Модели программирования OpenMP и Intel® CilkTM Plus

Аннотация: В этой лекции рассматриваются особенности модели программирования, основанной на параллелизме потоков. Дается обзор OpenMP (модель программы, возможности, проблемы). Дается описание модели программирования Intel® CilkTM Plus.

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

Многопоточная программа

Поток (нить) представляет собой последовательный поток управления (последовательность команд) в рамках одной программы. При создании процесса порождается главный поток, выполняющий инициализацию процесса. Он же начинает выполнение команд.

Поток и процесс соотносятся следующим образом:

  • с процессом ассоциирован главный поток, инициализирующий выполнение команд процесса;
  • любой поток может порождать в рамках одного процесса другие потоки;
  • каждый поток имеет собственный стек;
  • потоки, соответствующие одному процессу, имеют общие сегменты кода и данных.

Конкуренция за ресурсы и параллельное исполнение

Конкуренция за ресурсы (видимый параллелизм)


Реальный параллелизм


Для реализации реального параллелизма требуется соответствующая архитектура – многоядерная или многопроцессорная с общей памятью.

При разработке многопоточных приложений возникают следующие проблемы:

  • гонки за данными;
  • блокировки;
  • несбалансированность загрузки.

Гонки за данными (data races)

Гонки за данными являются следствием зависимостей, когда несколько потоков модифицируют содержимое одной и той же области памяти. Наличие гонок за данными не всегда является очевидным. Они могут приводить к конфликтам двух типов:

  1. конфликт "чтение-запись";
  2. конфликт "запись-запись".

Борьба с гонками за данными:

  • использование преимущественно локальных по отношению к потоку, а не разделяемых переменных;
  • управление доступом к разделяемым переменным с помощью различных средств синхронизации (они могут быть реализованы с помощью семафоров, событий, критических секций, взаимных блокировок - мьютексов).

Блокировки

Блокировка (тупик) возникает, если поток ожидает выполнение условия, которое не может быть выполнено. Обычно возникновение тупиковой ситуации является следствием конкуренции потоков за ресурс, который удерживается одним из них.

Условия возникновения тупика

  • доступ к ресурсу эксклюзивен (возможен только одним потоком);
  • поток может удерживать ресурс, запрашивая другой;
  • ни один из конкурирующих потоков не может освободить запрашиваемый ресурс.

Масштабируемость

Число программных потоков должно совпадать с числом аппаратных потоков. Зависимость ускорения от числа потоков для теста на 2-ядерной архитектуре:


Программные инструменты реализации многопоточного параллелизма

POSIX Threads Windows API низкоуровневые инструменты
OpenMP OpenCL Intel® CilkTM Plus высокоуровневые инструменты