Альтернативные подходы к параллелизации: более удобные в использовании и более высокоуровневые
КЭШ 2
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
ЯДРО
Виртуальный физический (hyperthreading) уровень (тот же сервер)
ЯДРО
ЯДРО
ЯДРО
ЯДРО
КЭШ 1
КЭШ 1
КЭШ 1
КЭШ 1
КЭШ 2
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
ЯДРО
ЯДРО
ЯДРО
ЯДРО
ПАМЯТЬ
ЯДРО
ЯДРО
ЯДРО
ЯДРО
Операционная система рассматривает все ядра как одинаковые, о последствиях позже
OpenMP не очень помогает адресовать проблему ясного видения архитектуры
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
ЯДРО
ЯДРО
ЯДРО
ЯДРО
Поток 1
2 потока работают на 1-м физическом ядре
➔ выполнение потоков перемежается==
2-кратное превышение числа потоков
над числом вычислительных модулей
Поток 0
КЭШ 1
КЭШ 1
КЭШ 2
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
Кэш
потока 0
Память
потока 0
Потоки перетасовываются регулярно
➔ дополнительное передача данных в памяти==
неустойчивое время работы программы
Поток 0
КЭШ 1
КЭШ 1
КЭШ 2
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
Кэш
потока 0
Память
потока 0
Локальное относительно потока выделение памяти
увеличивает шанс на то, что данные будут находиться
в правильной части неоднородной памяти
Поток 0
КЭШ 1
КЭШ 1
КЭШ 2
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
ЯДРО
ЯДРО
ЯДРО
ЯДРО
Поток 0
Поток 1
Взаимодействие через медленный общий кэш 2,
но при двукратном увеличении размера кэша 1
КЭШ 1
КЭШ 1
КЭШ 2
КЭШ 2
ПАМЯТЬ
ПАМЯТЬ
ЯДРО
ЯДРО
ЯДРО
ЯДРО
Поток 1
Взаимодействие через межпроцессорный канал,
но доступно в 2 раза больше
кэша 1
кэша 2
памяти
Поток 0
Компиляторы Intel умеют устанавливать привязку разных видов потоков друг к другу
Linux*\OS X*
export KMP_AFFINITY=…
Windows*
set KMP_AFFINITY=…
KMP_AFFINITY=verbose (информация о том, как привязаны потоки)
KMP_AFFINITY не работает для процессоров, произведённых не компанией Intel,
но есть аналогичные инструменты
Гиперсрединг
присутствует
Гиперсрединг включён
Перетасовка потоков включена
Affinity для
производительности
Перетасовка
выключена
KMP_AFFINITY главный инструмент для привязки потоков друг к другу
2 раза посчитал sum, но параллельно!
Сменилось состояние ОС!
2 раза посчитал sum, но параллельно!
Компилятор поработал
Снова компилятор
Flush неявно стоит, например, при входе и выходе из parallel for
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть