Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






В: Проблема эффективности кода для систем с симметричной многопроцессорностью и для гибридных систем. Подходы к её решению






О: Симметричная мультипроцессорность (SMP) — архитектура многопроцессорных компьютеров, в которой два или более одинаковых процессора сравнимой производительности подключаются единообразно к общей памяти (и периферийным устройствам) и выполняют одни и те же функции. В этом классе систем процессоры тесно связаны друг с другом через общую шину и имеют равный доступ ко всем ресурсам вычислительной системы (памяти и устройствам ввода-вывода) и управляются все одной копией операционной системы.

SMP — простой и экономически выгодный способ масштабирования вычислительной системы.

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

Также поддержка SMP должна быть встроена в операционную систему, иначе дополнительные процессоры будут бездействовать, и система будет работать как однопроцессорная.

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

Для решения проблемы эффективности кода также применяют параллелизм на уровне инструкций

Возьмем простенькую программу:

a = 1

b = 2

c = a + b

Первые две инструкции вполне можно выполнять параллельно, только третья от них зависит. А значит — всю программу можно выполнить за два шага, а не за три. Процессоры с таким функционалом называются суперскалярными.

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

Пример кода, который успешно векторизуется компилятором:

for (int i = 0; i < n; i++)

c[i] = a[i] * b[i] + a[i];

---------------------------------------------------------------------------------------------

Увеличение потока обращений процессора к памяти:

• Многофазность операций ввода-вывода для порождения множества параллельных обращений к памяти:

o выставление чтения (read issue)

o передача (yield)

o завершение чтения (read complete)

 

• Загрузка глобально-адресуемых данных может проводиться отдельными программными потоками или аппаратно-реализованными алгоритмами, но механизм внесёт задержки при обращении к данным на том же узле, то есть задержки должны быть допустимыми

 

• МЕТОД МНОГОФАЗНОГО ЧТЕНИЯ Реализация механизма многофазного чтения — через легковесные потоки, не требующие переключения контекста процессора.Один из методов введения легковесных потоков — применение сопрограмм (coroutines).

 

Предлагаемые принципы:

 

• Исходный̆ код должен оставаться на высоком уровне абстракции

• Исходный̆ код больше не должен зависеть от архитектуры, как сейчас он не зависит от системы команд

• Исходный̆ код должен не компилироваться, а транслироваться на многопоточную и гибридную архитектуру — C, OpenCL,... — используя формальные методы и затем потом компилироваться

РЕШЕНИЕ — трансляторы с высокопроизводительных языков на языки программирования и библиотеки низкого уровня






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.