Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК 2 Лекционный курс.doc
Скачиваний:
12
Добавлен:
16.08.2019
Размер:
3.92 Mб
Скачать

4.4.2.Необходимое программное обеспечение

Для исполнения примеров, приведённых в следующих разделах, на графических процессорах SM3 необходимо следующее программное и аппаратное обеспечение:

 Видеокарта с поддержкой Shader Model 3.0;

 Драйвер с поддержкой соответствующего GPU;

 Microsoft Windows XP SP2 (или новее);

 Microsoft DirectX 9.0c (или новее);

 Microsoft .NET Framework 2.0 (или новее);

 Microsoft XNA Game Studio Express 2.0;

Средства разработки:

 Текстовый редактор для написания шейдеров на языке HLSL (к сожалению, специализированных сред для написания программ на HLSL нет);

 Microsoft Visual C# 2005 Express или Microsoft Visual Studio 2005 для написания оболочки на C#.

4.5.Области использования графических процессоров

На графических процессорах могут эффективно решаться очень многие задачи, в которых много вычислений, но сравнительно мало условий и коммуникаций. Среди областей применения графических процессоров:

 Матричные преобразования;

 Молекулярная динамика;

 Астрофизические расчёты;

 Глобальная оптимизация;

 Дискретное преобразование Фурье (в частности, обработка сигналов в реальном времени);

 Кодирование видео;

 Визуализация (томография, нанотехнологии);

 Нейронные сети;

 Биофизические расчёты.

5.Применение графических процессоров на примерах сложения матриц и решения дифференциальных уравнений

5.1.Распараллеливание независимых вычислений

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

.

Центральный процессор персонального компьютера (CPU) решает эту задачу последовательным сложением всех компонент векторов и :

.

Для упрощения примера, мы не учитываем здесь то, что современные CPU являются суперскалярными, то есть – могут одновременно складывать несколько пар чисел, поскольку большого количества параллельных потоков данных они не обеспечивают. Без распараллеливания алгоритм программы для CPU имеет вид цикла:

Рис. 5.1. Последовательное сложение векторов

С другой стороны, при наличии N процессоров, работающих параллельно, эту же задачу можно было бы решить в N раз быстрее, сложив на каждом из процессоров по одной из компонент векторов:

При меньшем, чем N количестве параллельных процессоров m < N сложение векторов всё равно возможно выполнить параллельно. Для этого можно разбить векторы на блоки по m чисел (что эквивалентно преобразованию векторов в двухмерные матрицы):

.

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

Принцип распараллеливания однотипных и независимых вычислений - как раз и реализован на графических процессорах. Эти процессоры включают в себя десятки параллельных графических конвейеров, специально предназначенных для параллельного проведения одинаковых операций над числами с плавающей точкой.

В примере - ко всем элементам матриц применяется одна и та же операция сложения. Это – пример принципа параллельного программирования называют SIMD (Single Instruction Multiple Data, одна инструкция для множества данных, см. раздел 4.3.4). Помимо собственно распараллеливания, этот принцип вычислений имеет и то преимущество, что позволяет избавиться от операций изменения управляющих переменных цикла (i в примере выше), проверки условия завершения цикла и выхода за границы массивов.

Частичное разворачивание циклов (например, обработка в теле цикла сразу 4-х элементов) используется и для оптимизации вычислений на центральных процессорах, в частности - позволяет компилятору задействовать расширенные наборы SIMD команд типа SSE и 3dNow!. Всё же, на графических процессорах принцип SIMD реализован в гораздо более полной мере.