Организация параллельных потоков. Часть 1 | страница 14




Дополнительные эксперименты — это использование части вычислительных ядер, доступных на данном компьютере. В простейшем случае мы запускаем программу, затем она ожидает нажатия клавиши. В этот момент мы задаём Affinity, то есть «соответствие» ядер нашему процессу через Диспетчер задач.

Задание. Прогоните параллельную программу, задавая разные ядра в разном количестве. Определите показатели эффективности распараллеливания.


Ещё одна дополнительная сложность при создании параллельных программ — это вмешательство операционной системы (ОС) и попытки оптимизировать работу компьютера в целом. При выполнении многопоточной программы ОС может использовать ядра так, чтобы обеспечить их равномерную загрузку. ОС будет перебрасывать потоки с одного ядра на другое. Это дополнительные затраты вычислительной мощности. Наша цель — обеспечить максимальную загрузку выбранных ядер. Загрузка должна быть 100% во всех экспериментах.

Для этого можно назначать привязку к ядрам как для всего процесса в целом, так и для каждого потока.

Привязкой к ядрам можно управлять с помощью следующих функций:

— GetProcessAffinityMask;

— SetProcessAffinityMask;

— SetThreadAffinityMask.

Маска привязки системы определяет все доступные ядра.

Маска привязки процесса ProcessAffinityMask — это набор битов, разрешающих выполнение текущего процесса на выбранных ядрах (виртуальных процессорах) — из списка доступных.

Маска привязки потока ThreadAffinityMask — это разрешение использовать указанные ядра текущим потоком — в пределах маски процесса.

Задание. Создайте тестовые программы для работы с привязкой процесса и потоков к ядрам.

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

ЛИТЕРАТУРА

1. Воеводин В. В., Воеводин Вл. В. Параллельные вычисления. — СПб.: БХВ-Петербург, 2004. — 608 с.


2. Воеводин Вл. В., Жуматий С. А. Вычислительное дело и кластерные системы. — М.: МГУ, 2007. — 150 с.

Режим доступа:

https://parallel.ru/info/parallel/cluster/


3. Антонов А. С. Введение в параллельные вычисления: Методическое пособие. — М.: МГУ, 2002. — 70 c.

Режим доступа:

https://parallel.ru/news/antonov_intro.html


4. Гергель В. П. Теория и практика параллельных вычислений. — М.: Интуит, 2016. — 501 с.


5. Гергель В. П., Фурсов В. А. Лекции по параллельным вычислениям: Учебное пособие. — Самара: СГАУ, 2009. — 164 с.


6. Гергель В. П.