Автор работы: Пользователь скрыл имя, 04 Октября 2012 в 14:53, курсовая работа
В рамках данной работы будут рассмотрены аппаратные реализации параллельных вычислений:
многопроцессорные системы;
кластерные системы;
облачные вычисления;
векторные процессоры;
параллельные вычисления с использованием графических процессоров (CUDA).
Введение…………………………………………………………………………. ..3стр.
1 Общие сведения о параллельных вычислениях………………………………4 стр.
2 Многопроцессорные системы …………………………………………………5 стр.
2.1 Общие требования, предъявляемые к многопроцессорным системам 5стр.
2.2 Многопроцессорные системы с общей памятью ……………………...9 стр.
2.3 Многопроцессорные системы с локальной памятью ………………..19 стр.
2.4 Области применения многопроцессорных систем …………………..21стр.
3 Кластерные системы …………………………………………………………..22 стр.
3.1 Отказоустойчивые кластеры …………………………………………..25 стр. 3.2 Высокопроизводительные кластеры ……………………………………..27 стр.
4 Облачные вычисления ………………………………………………………...29 стр.
4.1 "Облачные" вычисления - достоинства и недостатки ………………31 стр.
5 Векторные процессоры ……………………………………………………….35 стр.
5.1 Структуры типа “память-память” и “регистр-регистр”…………… 42стр.
5.2 Обработка длинных векторов и матриц …………………………….43 стр.
6 Параллельные вычисления с использованием графических процессоров (CUDA) …………………………………………………………………………...44 стр.
Заключение ………………………………………………………………………51 стр.
C = A1B1 + A5B5 + A9B9 + A13 B
+ A2B2 + A6B6 + A10 B10 + A14
+ A3B3 + A7B7 + A11 B11 + A15
+ A4B4 + A8B8 + A12 B12 + A16
Когда больше не остается членов
для сложения, система заносит
в умножитель четыре нуля. При этом
в четырех сегментах конвейера
сумматора содержатся четыре скалярных
произведения, соответствующие четырем
суммам, приведенным в четырех
строках показанного выше уравнения.
Далее четыре частичных суммы
Программа для вычисления
скалярного произведения векторов А и В, хранящихся в областях
V_load VA, adrA
V_load VB, adrB
V_multiply VC, VA, VB
Первые две векторные
команды V_load загружают векторы из памяти
в векторные регистры VA и VB.
Векторная команда умножения V_multiply вычисляет
произведение для всех пар одноименных
элементов векторов и записывает полученный
Важным элементом векторного
процессора (ВП) является регистр длины вектора. Этот
регистр определяет, сколько элементов
фактически содержит обрабатываемый в
данный момент вектор, то есть, сколько
индивидуальных операций с элементами
нужно сделать. В некоторых ВП присутствует
также регистр максимальной
длины вектора, определяющий максимальное
число элементов вектора, которое может
быть одновременно обработано аппаратурой
процессора. Этот регистр используется
при разделении очень длинных векторов
на сегменты, длина которых соответствует
максимальному числу элементов,
Часто приходится выполнять такие операции, в которых участвуют не все элементы векторов. Векторный процессор обеспечивает данный режим с помощью регистра маски вектора. В этом регистре каждому элементу вектора соответствует один бит. Установка бита в единицу разрешает запись соответствующего элемента вектора результата в выходной векторный регистр, а сброс в ноль – запрещает.
Элементы векторов в памяти
расположены регулярно и при
выполнении векторных операций достаточно
указать значение шага по индексу. Существуют
случаи, когда необходимо обрабатывать
только ненулевые элементы векторов.
Для поддержки подобных операций
в системе команд ВП предусмотрены
операции упаковки/распаковки (
Применение векторных
команд окупается по двум причинам.
Во-первых, вместо многократной выборки
одних и тех же команд достаточно
произвести выборку только одной
векторной команды, что позволяет
сократить издержки за счет устройства
управления и уменьшить требования к пропускной
способности памяти. Во-вторых, векторная
команда обеспечивает процессор упорядоченными
данными. Когда инициируется векторная
команда, ВС знает, что ей нужно извлечь n пар операндов,
расположенных в памяти регулярным образом.
Таким образом, процессор может указать
памяти на необходимость начать извлечение
таких пар. Если используется память с
чередованием адресов, эти пары могут
быть получены со скоростью одной пары
за цикл процессора и направлены для обработки
в конвейеризированный функциональный
блок. При отсутствии чередования адресов
или других средств извлечения операндов
с высокой скоростью
5.1 Структуры типа “память-
Принципиальное различие архитектур
векторных процессоров проявляется в
том, каким образом осуществляется доступ
к операндам. При организации «память-память» эл
Преимущество
ВП с режимом «память-память» состоит
в возможности обработки длинных векторов,
в то время как в процессорах типа «регистр-регистр»
приходится разбивать длинные векторы
на сегменты фиксированной длины. К сожалению,
за гибкость режима «память-память» приходится
расплачиваться относительно большим временем запуска,
представляющим собой временной интервал
между инициализацией команды и моментом,
когда первый результат появится на выходе
конвейера. Большое время запуска в процессорах
типа «память-память» обусловлено скоростью
доступа к памяти, которая намного меньше
скорости доступа к внутреннему регистру.
Однако когда конвейер заполнен, результат
формируется в каждом цикле. Модель времени
работы векторного
где s – время запуска, α – константа, зависящая от команды (обычно 1/2, 1 или 2) и N – длина вектора.
Архитектура типа «память-память»
реализована в векторно-
В вычислительных системах
типа «регистр-регистр» векторы имеют
сравнительно небольшую длину (в ВС семейства
Cray – 64), но время запуска значительно
меньше, чем в случае “память-память».
Этот тип векторных систем гораздо более
эффективен при обработке коротких векторов,
но при операциях над длинными векторами
векторные регистры должны загружаться
сегментами несколько раз. В настоящее
время ВП типа «регистр-регистр» доминируют
на компьютерном рынке. Это вычислительные
системы фирмы Cray Research Inc., в частности модели
Y-MP и C-90. Аналогичный подход заложен в
ВС фирм Fujitsu, Hitachi и NEC. Время цикла в современных
ВП варьируется от 2,5 нс (NEC SX-3) до 4,2 нс (Cray
C-90), а производительность, измеренная
по тесту LINPACK, лежит в диапазоне
5.2 Обработка длинных векторов
Аппаратура векторных процессоров типа
“регистр-регистр» ориентирована на обработку
векторов, длина которых совпадает с длиной
векторных регистров (ВР), поэтому обработка
коротких векторов не вызывает проблем – дос-таточно
Если размер векторов превышает емкость ВР, используется техника разбиения исходного вектора на сегменты одинаковой длины, совпадающей с емкостью векторных регистров (последний сегмент может быть короче), и последовательной обработки полученных сегментов. В английском языке этот прием называется stripmining. Процесс разбиения обычно происходит на стадии компиляции, но в ряде ВП данная процедура производится по ходу вычислений с помощью аппаратных средств на основе информации, хранящейся в регистре максимальной длины вектора.
6 Параллельные вычисления с использованием графических процессоров (CUDA)
Технология CUDA (англ. Compute Unified Device Architecture) -
программно-аппаратная архитектура, позволяющая
производить вычисления с использованием
графических процессоров NVIDIA, поддерживающих
технологию GPGPU (произвольных вычислений
на видеокартах). Архитектура CUDA впервые
появились на рынке с выходом чипа NVIDIA
восьмого поколения - G80 и присутствует
во всех последующих сериях графических
чипов, которые используются в семействах
ускорителей GeForce, ION, Quadro и Tesla.
CUDA SDK позволяет программистам реализовывать
на специальном упрощённом диалекте языка
программирования Си алгоритмы, выполнимые
на графических процессорах NVIDIA и включать
специальные функции в текст программы
на Cи. CUDA даёт разработчику возможность
по своему усмотрению организовывать
доступ к набору инструкций графического
ускорителя и управлять его памятью, организовывать
на нём сложные параллельные вычисления.
Области применения параллельных расчётов
на GPU.
При переносе
вычислений на GPU, во многих задачах достигается
ускорение в 5-30 раз, по сравнению с быстрыми
универсальными процессорами. Самые большие
цифры (порядка 100-кратного ускорения и
даже более!) достигаются на коде, который
не очень хорошо подходит для расчётов
при помощи блоков SSE, но вполне удобен
для GPU.
Это лишь некоторые примеры ускорений
синтетического кода на GPU против SSE-векторизованного
кода на CPU (по данным NVIDIA):
флуоресцентная микроскопия: 12x; молекулярная
динамика (non-bonded force calc): 8-16x; электростатика
(прямое и многоуровневое суммирование
Кулона):40-120x и 7x.
Перечень
основных приложений, в которых применяются
вычисления на GPU: анализ и обработка изображений
и сигналов, симуляция физики, вычислительная
математика, вычислительная биология,
финансовые расчёты, базы данных, динамика
газов и жидкостей, криптография, адаптивная
лучевая терапия, астрономия, обработка
звука, биоинформатика, биологические
симуляции, компьютерное зрение, анализ
данных (data mining), цифровое кино и телевидение,
электромагнитные симуляции, геоинформационные
системы, военные применения, горное планирование,
молекулярная динамика, магнитно-резонансная
томография (MRI), нейросети, океанографические
исследования, физика частиц, симуляция
свёртывания молекул белка, квантовая
химия, трассировка лучей, визуализация,
радары, гидродинамическое моделирование
(reservoir simulation), искусственный интеллект,
анализ спутниковых данных, сейсмическая
разведка, хирургия, ультразвук, видеоконференции.
Преимущества
и ограничения CUDA.
С точки зрения программиста, графический конвейер является набором стадий обработки. Блок геометрии генерирует треугольники, а блок растеризации - пиксели, отображаемые на мониторе. Традиционная модель программирования GPGPU представлена на рис. 4.
Рис. 4 Традиционная модель программирования GPGPU
Чтобы перенести вычисления на GPU в рамках такой модели, нужен специальный подход. Даже поэлементное сложение двух векторов потребует отрисовки фигуры на экране или во внеэкранный буфер. Фигура растеризуется, цвет каждого пикселя вычисляется по заданной программе (пиксельному шейдеру). Программа считывает входные данные из текстур для каждого пикселя, складывает их и записывает в выходной буфер. И все эти многочисленные операции нужны для того, что в обычном языке программирования записывается одним оператором.
Поэтому,
применение GPGPU для вычислений общего
назначения имеет ограничение в виде слишком
большой сложности обучения разработчиков.
Да и других ограничений достаточно, ведь
пиксельный шейдер - это всего лишь формула
зависимости итогового цвета пикселя
от его координаты, а язык пиксельных шейдеров
- язык записи этих формул с Си-подобным
синтаксисом. Ранние методы GPGPU являются
хитрым трюком, позволяющим использовать
мощность GPU, но без всякого удобства. Данные
там представлены изображениями (текстурами),
а алгоритм - процессом растеризации. Нужно
особо отметить и весьма специфичную модель
памяти и исполнения.
Программно-аппаратная архитектура для
вычислений на GPU компании NVIDIA отличается
от предыдущих моделей GPGPU тем, что позволяет
писать программы для GPU на настоящем языке
Си со стандартным синтаксисом, указателями
и необходимостью в минимуме расширений
для доступа к вычислительным ресурсам
видеочипов. CUDA не зависит от графических
API, и обладает некоторыми особенностями,
предназначенными специально для вычислений
общего назначения.
Преимущества
CUDA перед традиционным подходом к GPGPU вычислениям.
CUDA обеспечивает доступ к разделяемой
между потоками памяти размером в 16 Кб
на мультипроцессор, которая может быть
использована для организации кэша с широкой
полосой пропускания, по сравнению с текстурными
выборками:
- более эффективная передача данных между
системной и видеопамятью;
- отсутствие необходимости в графических
API с избыточностью и накладными расходами;
- линейная адресация памяти, и gather и scatter,
возможность записи по произвольным адресам;
- аппаратная поддержка
целочисленных и битовых
Основные ограничения CUDA:
- отсутствие поддержки рекурсии
для выполняемых функций;
- минимальная ширина
блока в 32 потока;
- закрытая архитектура CUDA, принадлежащая NVIDIA.
Слабыми
местами программирования при помощи
предыдущих методов GPGPU является то, что
эти методы не используют блоки исполнения
вершинных шейдеров в предыдущих неунифицированных
архитектурах, данные хранятся в текстурах,
а выводятся во внеэкранный буфер, а многопроходные
алгоритмы используют пиксельные шейдерные
блоки. В ограничения GPGPU можно включить:
недостаточно эффективное использование
аппаратных возможностей, ограничения
полосой пропускания памяти, отсутствие
операции scatter (только gather), обязательное
использование графического API.
Основные
преимущества CUDA по сравнению с предыдущими
методами GPGPU вытекают из того, что эта
архитектура спроектирована для эффективного
использования неграфических вычислений
на GPU и использует язык программирования
C, не требуя переноса алгоритмов в удобный
для концепции графического конвейера
вид. CUDA предлагает новый путь вычислений
на GPU, не использующий графические API,
предлагающий произвольный доступ к памяти
(scatter или gather). Такая архитектура лишена
недостатков GPGPU и использует все исполнительные
блоки, а также расширяет возможности
за счёт целочисленной математики и операций
битового сдвига.
CUDA открывает некоторые аппаратные возможности,
недоступные из графических API, такие как
разделяемая память. Это память небольшого
объёма (16 килобайт на мультипроцессор),
к которой имеют доступ блоки потоков.
Она позволяет кэшировать наиболее часто
используемые данные и может обеспечить
более высокую скорость, по сравнению
с использованием текстурных выборок
для этой задачи. Что, в свою очередь, снижает
чувствительность к пропускной способности
параллельных алгоритмов во многих приложениях.
Например, это полезно для линейной алгебры,
быстрого преобразования Фурье и фильтров
обработки изображений.