- •Курс лекций
- •Оглавление
- •1. Архитектура и принципы работы обычных эвм с центральным процессором (cpu) 9
- •2. Методы повышения производительности традиционных эвм 27
- •3. Типы архитектур высокопроизводительных вычислительных систем 45
- •4. Потоковые параллельные вычисления для физического моделирования 62
- •5. Применение графических процессоров на примерах сложения матриц и решения дифференциальных уравнений 82
- •6. Молекулярная динамика на графическом процессоре 100
- •7. Высокоскоростное моделирование систем с дальнодействием 125
- •8. Восстановление потенциалов межчастичных взаимодействий по температурной зависимости периода решетки методами высокоскоростного мдм на графических процессорах 145
- •9. Базовые особенности программирования графических процессоров шейдерной модели 4.0 160
- •Введение
- •1.Архитектура и принципы работы обычных эвм с центральным процессором (cpu)
- •1.1.Структура традиционной эвм
- •1.2.Организация работы эвм
- •1.3.Иерархия памяти компьютера
- •1.4. Выполнение команд
- •1.5.Требования к коммуникационным линиям
- •1.6.Устройства ввода-вывода
- •2.Методы повышения производительности традиционных эвм
- •2.1. Распараллеливание расчетов
- •2.2.Конвейерная обработка данных и команд
- •2.3.Высокопроизводительные процессоры
- •2.3.1.Суперскалярные процессоры
- •2.3.2.Процессоры risc с сокращенным набором команд
- •2.3.3.Процессоры со сверхдлинным командным словом
- •2.3.4.Векторные процессоры
- •2.3.5.Процессоры для параллельных компьютеров
- •2.3.6.Процессоры с многопоточной архитектурой
- •2.3.7.Технология Hyper-Threading
- •2.4.Требования к памяти высокопроизводительных эвм
- •2.5.Коммуникационная сеть высокопроизводительных эвм
- •2.5.1.Статические и динамические топологии и маршрутизация коммуникационных систем
- •2.5.2.Многокаскадные сети и методы коммутации
- •2.6.Классификация архитектур параллельных компьютеров
- •3.Типы архитектур высокопроизводительных вычислительных систем
- •3.1.Simd архитектура (с разделяемой и распределенной памятью)
- •3.2. Mimd архитектура с разделяемой и распределенной памятью
- •3.3. Комбинированные системы
- •3.4. Мультипроцессорные и мультикомпьютерные системы
- •3.5.Кластеры пэвм и рабочих станций
- •3.6.Особенности параллельного программирования
- •4.Потоковые параллельные вычисления для физического моделирования
- •4.1.Общие принципы распараллеливания расчётов
- •4.2.Обмен данными между процессором и памятью
- •4.3.Графические процессоры как вычислительные системы для поточно-параллельных расчётов
- •4.3.1.Вычислительные возможности центральных процессоров общего назначения и графических процессоров
- •4.3.2.Графический конвейер
- •4.3.3.История программируемости графических процессоров
- •4.3.4.Требования к алгоритмам для gpu, поддерживающих шейдерную модель 3.0
- •4.3.5.Возможности gpu в рамках шейдерной модели 3.0 и взаимодействие gpu с памятью
- •4.3.6.Проблема одинарной точности
- •4.4.Средства программирования графических процессоров
- •4.4.1.Общая структура программы для физического моделирования на графическом процессоре
- •4.4.2.Необходимое программное обеспечение
- •4.5.Области использования графических процессоров
- •5.Применение графических процессоров на примерах сложения матриц и решения дифференциальных уравнений
- •5.1.Распараллеливание независимых вычислений
- •5.2.Используемый графический процессор
- •5.3.Представление данных для графического процессора
- •5.4.Программирование вычислительного ядра
- •5.5.Взаимодействие центрального и графического процессоров
- •5.5.1.Функции центрального процессора
- •5.5.2.Пример программы
- •6.Молекулярная динамика на графическом процессоре
- •6.1.Принципы моделирования ионных кристаллов методом молекулярной динамики
- •6.2.Программирование графического процессора для расчёта действующих на ионы результирующих сил
- •6.2.1.Исходные данные
- •6.2.2.Представление исходных данных для gpu
- •6.2.3.Алгоритм расчёта результирующих сил с использованием графического процессора
- •6.2.4.Шейдер для расчёта результирующей силы
- •6.3.Исполнение шейдера из программы мд-моделирования на c#
- •6.3.1.Этапы алгоритма моделирования, исполняемые на cpu
- •6.3.2.Процедуры на c#, обеспечивающие работу с графическим процессором
- •6.4.Постановка граничных условий и стабилизация макросостояния молекулярно-динамической системы
- •6.4.1.Компенсация импульса и момента импульса
- •6.4.2.Стабилизация температуры
- •7.Высокоскоростное моделирование систем с дальнодействием
- •7.1.Актуальность моделирования
- •7.2.Высокоскоростные алгоритмы моделирования систем с дальнодействующими силами
- •7.3.Методика высокоскоростного молекулярно-динамического моделирования диоксида урана
- •7.4.Экспериментальные результаты и их обсуждение
- •7.5.Анализ зависимостей среднего квадрата смещений ионов кислорода от времени
- •8.Восстановление потенциалов межчастичных взаимодействий по температурной зависимости периода решетки методами высокоскоростного мдм на графических процессорах
- •8.1.Задача восстановления потенциалов межчастичных взаимодействий в кристаллах
- •8.2.Исходные данные и метод восстановления потенциалов
- •8.3.Модель и детали реализации
- •9.Базовые особенности программирования графических процессоров шейдерной модели 4.0
- •9.1.Предпосылки появления новой шейдерной модели
- •9.2.Архитектура gpu шейдерной модели 4.0. Преимущества этой модели
- •9.2.1.Иерархия вычислительных блоков и памяти в шейдерной модели 4.0
- •9.2.2.Конвейерная обработка данных на gpu sm4
- •9.2.3.Логическая структура вычислений на gpu sm4
- •9.2.4.Преимущества gpu шейдерной модели 4.0
- •9.3.Средства высокоуровневого программирования gpu шейдерной модели 4.0
- •9.3.1.Совместимость с шейдерной моделью 3.0
- •9.3.2.Специальные средства программирования gpu sm4. Cuda
- •9.3.3.Средства для написания и компиляции программ на cuda
- •9.3.4.Структура программы на cuda
- •9.4.Перемножение матриц на cuda
- •9.4.1.Алгоритм перемножения матриц
- •9.4.2.Процедура перемножения матриц на gpu sm4
- •9.4.3.Вызов процедуры перемножения матриц из программы на c
- •9.5.Молекулярная динамика на cuda
- •9.5.1.Алгоритм с использованием разделяемой памяти
- •9.5.2.Расчёт сил на gpu с использованием 3-го закона Ньютона
- •Библиографический список
- •Приложение 1 Операторы и функции языка hlsl, использованные в курсе лекций п.1.2. Типы данных
5.2.Используемый графический процессор
Здесь мы рассматриваем программирование графических процессоров, поддерживающих шейдеры модели 3.0. Эти процессоры имеют по два набора параллельных конвейеров, предназначенных для проведения двух расчётов (обработки двух наборов данных). Такая архитектура обусловлена тем, что графические процессоры предназначены для использования на видеокартах и, соответственно, для вывода сложных изображений на экран. При формировании изображения первая группа процессоров – вершинные конвейеры - рассчитывает координаты вершин примитивов (обычно – треугольников), из которых состоит изображение, а вторая группа – пиксельные конвейеры – наносит на эти примитивы текстуру (определяет цвета).
Для проведения физических расчётов достаточно использования процессоров только одного типа. В физическом моделировании мы использовали пиксельные конвейеры, поскольку их больше, чем вершинных.
Характеристики некоторых конкретных графических процессоров приведёны в табл. 4.2. Бóльшая часть расчётов проведена нами на процессоре Radeon X1900 XT, который имеет 48 суперскалярных (4-векторных) пиксельных конвейеров. Наш опыт показал, что при МД-расчётах этот графический процессор обгоняет одноядерный (но тоже суперскалярный) CPU (AMD Athlon64 2100 МГц) более чем в 100 раз, несмотря на более низкую частоту. Настолько большое приращение обусловлено не только большим количеством конвейеров, но и тем, что в GPU оптимизировано взаимодействие с памятью при проведении поточных вычислений.
5.3.Представление данных для графического процессора
Центральные процессоры персональных компьютеров в большинстве случаев обрабатывают данные последовательно. Поэтому естественно то, что данные в оперативной памяти компьютера представлены в форме одномерных массивов: адрес каждой ячейки памяти представляется одним шестнадцатеричным числом, а последовательным ячейкам памяти соответствуют последовательные адреса. Даже если объектами моделирования являются многомерные структуры данных, такие как матрицы:
,
фактически их элементы всё равно хранятся и обрабатываются как одномерные последовательности:
.
В отличие от CPU, графические процессоры изначально предназначены для параллельной обработки данных, поэтому для них естественно обращаться к памяти, где данные хранятся в форме двумерных массивов и адресуются двумя координатами. Именно так устроена видеопамять, размещаемая на видеокартах (рис. 5.2). Данные в видеопамять записывает центральный процессор, с помощью драйвера видеокарты, который копирует эти данные из оперативной памяти компьютера. Для представления данных в необходимой для копирования форме можно применять стандартные процедуры библиотек DirectX и OpenGL.
Ещё одно отличие графических процессоров от CPU состоит в том, что при их программировании для адресации элементов массивов (т.е., в качестве номеров элементов) используются не целые числа, а числа с плавающей точкой, которые при обработке графики напрямую задавали бы координаты закрашиваемых областей на экране (рис. 5.2).
Перед началом исполнения шейдера в ячейки видеопамяти (рис. 5.2) должны быть записаны исходные данные (здесь – элементы матриц ). Затем с помощью драйвера видеокарты центральный процессор запускает расчёт. В ходе расчёта графический процессор последовательно извлекает эти данные из видеопамяти и применяет ко всем элементам один и тот же набор операций, заданный программой (например, рассчитывает сумму cij = aij+bij). Результаты расчёта (в примере - значения cij) GPU записывает в область видеопамяти, называемую рендер-целью.
Как уже отмечено выше, исходные данные хранятся в виде двумерных массивов, и рендер-цель тоже представляет собой двумерный массив тех же размеров. В рассматриваемом примере с матрицами содержимым ячеек этих массивов являются скалярные числа. Существует также возможность хранить в этих ячейках 4-векторы, которые могут содержать, например, координаты частиц. Последняя возможность была реализована нами в молекулярной динамике (см. следующий пример).
Ячейки массивов с исходными данными и рендер-цели адресуются не целыми числами, а парами чисел с плавающей точкой, задающими координаты центров ячеек (как если бы ячейки являлись участками изображения на экране, а записанные в них данные – характеристиками этих участков). Координаты левых нижних углов ячеек лежат в диапазоне от 0 до 1, а координаты центров таковы, как это показано на рис. 5.2.
Применительно к графическим процессорам используется следующая терминология. Двумерные массивы, в которых хранятся входные данные, называют текстурами, а элементы этих массивов – текселями. Координаты текселей, указывающие на центры ячеек, называют текстурными координатами. Количество текселей равно количеству элементов во входных массивах. Рендер-цель также представляет собой текстуру, количество текселей в которой равно количеству элементов в выходном массиве.
Рис. 5.2. Области координат, которыми адресуются числа, обрабатываемые графическим процессором
Результаты своей работы графический процессор по умолчанию выводит на экран, а точнее - в область памяти, называемую буфером кадра (framebuffer). Тем не менее, вычисления, не отображаемые на экране, также возможны, поскольку существует возможность сохранять результаты в заранее выделенную область памяти, которая как раз и называется рендер-целью (Render Target). Все современные GPU способны выводить данные сразу в несколько рендер-целей (Multiple Render Targets).