Многопоточное программирование: передовые технологии

Опубликовано: 24 июля 2007 г. | Последние Изменения: 2 сентября 2008 г.
Введение
Автор: Аарон Коди (Aaron Coday)

Данный курс написан для подробного ознакомления как с типовыми, так и с расширенными приемами организации поточной обработки данных и технологии разделения потоков OpenMP*. Усвоив приемы явной организации поточной обработки данных, Вы сможете сократить время отклика графического интерфейса пользователя в приложении Apfel*, а также улучшить скорость выполняемых этой программой расчетов фракталов. Курс включает лабораторные работы.

Для выполнения лабораторных работ по теме Advanced Multi-Threading (передовые методы организации многопоточной обработки данных), включенной в этот курс, Вам потребуются следующие инструментальные средства:

Загрузите исходный код программы Apfel и другие файлы, необходимые для выполнения лабораторных работ. Перед тем как продолжить изучение курса, установите эти файлы.

Настоящий курс разделен на две части, каждая из которых построена вокруг одной из лабораторных работ по многопоточной обработке данных. Каждый раздел посвящен определенной проблеме организации многопоточной обработки данных и начинается с ее описания. Далее следует детальный набор инструкций по ее возможному решению. Затем в каждом из двух разделов предусмотрена лабораторная работа, в которой Вы должны реализовать предложенное многопоточное решение.


Описание



Часть 1: скорость отклика
Установка
  1. Запустите Microsoft Visual Studio*
  2. Откройте проект, расположенный по адресу C:\Lab\CONTEST\apfel\apfel.dsw.
  3. Проверьте, выбран ли Intel Compiler в качестве используемого компилятора.
  4. Скомпонуйте приложение, выбрав Release build, затем Build (клавиша F7).
  5. Запустите приложение, нажав Ctrl-F5.
Добавление потоковой функции в класс CApfelRun

По существу, Вы добавляете потоковую функцию к классу CApfelRun, после чего нужно только позаботиться о запуске и передаче необходимой информации в поток. Новый поток отвечает за выполнение метода DoRun.

Часть 2: производительность

Резюме
Вы можете использовать многопоточную обработку данных для расширения функциональных возможностей, для повышения производительности или для достижения обеих целей. Вы должны знать и уметь использовать как явное разделение на потоки (Win32*), так и технологию OpenMP*.


Вспомогательные материалы
Инструменты Intel® для разделения потоков

  • ПО Intel® Thread Checker

  • утилита Thread Profiler,

  • Анализатор производительности Intel® VTune™
ПО Intel® Thread Checker

  • Локализует ошибки при организации многопоточной обработки в приложениях для систем, построенных на базе архитектуры IA-32 и работающих под управлением Windows*.

  • Для поиска ошибок в приложениях с многопоточной обработкой данных, выполняющихся системами на базе архитектуры IA-32 или Itanium® под управлением ОС Linux*, используйте дистанционные средства сбора информации.
Работа с приложением Intel® Thread Checker

  1. Статистика собирается анализатором производительности VTune™
    • Компилируйте приложения с помощью строки icl /Qopenmp_profile (/MD /Qopenmp)
  2. Статистика собирается за пределами анализатора производительности VTune
    • Компилируйте приложения с помощью строки icl /Qopenmp_profile
    • Запустите программу вне среды анализатора VTune
    • Импортируйте файл статистики guide.gvs в анализатор VTune
Чтобы импортировать файлы guide.gvs, воспользуйтесь командой «File/Open File» и выберите тип «OpenMP Statistics (*.gvs) files».

Инструментальное средство Thread Profiler

  • Для ОС Windows* позволяет отыскивать «узкие места», снижающие эффективность работы многопоточных приложений на платформе Win32* с использованием технологии OpenMP*
  • Для ОС Linux* теперь Вы сможете отыскать «узкие места», снижающие эффективность работы многопоточных приложений на платформе POSIX* с использованием технологии OpenMP, прямо из среды Windows
  • Просмотр графической информации, на которой отображается состояние каждого потока и параллельно-последовательных переходов, позволяет проверить, достигнута ли ожидаемая производительность приложения, или обнаружить места, где она недостаточна, а также помогает определить проблемы, на которых следует сосредоточить свое внимание для достижения оптимальной производительности
Анализатор производительности Intel® VTune™

Список ошибок

  • Настраиваемый
  • Ссылки для просмотра исходного кода
Просмотр исходного кода

  • Контекст ошибки
  • Локализация ошибок
  • Трассировка стека

Нажмите, чтобы увеличить

Приложение – Потоки Win32
Ниже представлен обзор наиболее общеупотребительных потоковых функций платформы Win32.

Создание потоков Win32*

Ожидание объектов ядра

Это важнейшая функция для синхронизации.

DWORD WaitForSingleObject (
	HANDLE hHandle,
	DWORD dwMilliseconds);
	// Timeout (0 .. INFINITE)

HANDLE CWnd->PostMessage(
	UINT message,
	// Message (WM_DONE)
	WPARAM wParam,
	LPARAM lParam );
	// Additional Message info



Post a comment If you have any questions, please contact our support team.