- •Курс лекций
- •Оглавление
- •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. Типы данных
6.2.Программирование графического процессора для расчёта действующих на ионы результирующих сил
Расчёт сил, действующих на ионы в молекулярной динамике, мы рассмотрим на конкретном примере нашего решения этой задачи. Структура исходных данных и алгоритм получения результата в данном случае несколько более сложны, чем в предыдущем примере сложения матриц. Прежде, чем переходить к анализу текстов программ, опишем подробнее исходные данные и ожидаемый результат.
6.2.1.Исходные данные
Для расчёта сил, действующих между ионами, необходимы исходные данные трёх типов:
Координаты всех ионов, представляющие собой трёхкомпонентные векторы из чисел с плавающей точкой:
;
Сорта каждой из частиц (ион кислорода, урана, примесь), которые могут быть представлены скалярными числами. Здесь естественным было бы использование целочисленных типов, но графические процессоры работают только с числами с плавающей точкой. Фактически, в нашем алгоритме ионам кислорода будет соответствовать число 0,5, а ионам урана – число 1,5. В случае наличия примесей либо ионов с нестехиометрическими зарядами они кодировались бы числами 2,5, 3,5 и т.д. Важно отметить, что при таком представлении каждая частица полностью характеризуется 4-компонентным вектором (в дальнейшем 4-векторы):
;
Наборы параметров потенциалов взаимодействия – констант для подстановки в формулы типа -. Фактически, в рассматриваемом примере мы пользовались потенциалами Букингема , так что каждой паре сортов частиц соответствовал набор из 4-х параметров потенциала:
.
Эти параметры являются числами с плавающей точкой, а наборы параметров для каждой пары сортов можно рассматривать как 4-векторы.
Видно, что все исходные данные в нашей реализации молекулярной динамики могут быть представлены как 4-векторы, описывающие либо каждую из частиц, либо потенциалы взаимодействия пары сортов частиц. Современные графические процессоры поддерживают параллельную обработку данных в форме 4-векторов, а язык HLSL имеет встроенный тип данных для обработки 4-векторов с плавающей точкой – float4. Именно такой тип имеют данные, записываемые графическим процессором в рендер-цель. Входные данные мы тоже будем представлять в форме 4-векторов.
6.2.2.Представление исходных данных для gpu
В предыдущем примере представление складываемых матриц в виде двухмерных массивов было естественным. Здесь же частицы пронумерованы индексом i от 0 до N-1, так что образуют линейный массив. Для обработки на GPU 4-векторы с координатами и типами частиц необходимо хранить в ячейках двухмерного массива, как это показано на примере -.
1/128 |
Ion[0] |
Ion[64] |
|
Ion[1984] |
|
Ion[4096] |
Ion[4160] |
|
Ion[6080] |
3/128 |
Ion[1] |
Ion[65] |
|
Ion[1985] |
Ion[4097] |
Ion[4161] |
|
Ion[6081] |
|
|
|
|
|
|
|
|
|
|
|
63/128 |
Ion[31] |
Ion[95] |
|
Ion[2015] |
Ion[4127] |
Ion[4162] |
|
Ion[6111] |
|
65/128 |
Ion[32] |
Ion[96] |
|
Ion[2016] |
|
Ion[4128] |
Ion[4163] |
|
Ion[6112] |
67/128 |
Ion[33] |
Ion[97] |
|
Ion[2017] |
Ion[4129] |
Ion[4164] |
|
Ion[6113] |
|
|
|
|
|
|
|
|
|
|
|
127/128 |
Ion[63] |
Ion[127] |
|
Ion[2047] |
Ion[4159] |
Ion[4223] |
|
Ion[6143] |
|
|
1/192 |
3/192 |
|
63/192 |
|
129/192 |
131/192 |
|
191/192 |
Рис 6.2. Массив исходных данных для графического процессора. Слева и внизу указаны текстурные координаты, по которым GPU будет обращаться к ячейкам массива
Размеры создаваемого массива по каждой из размерностей, вообще говоря, могут быть любыми, однако для оптимальной работы GPU лучше выбирать их кратными 32. Такой массив будет до конца заполнен частицами, если N кратно 322. Но даже если это не так, лучше оставить в массиве пустые ячейки, чем подгонять его размеры к реальному количеству частиц. Тип данных в массиве – 4-векторы . В качестве примера, на рис. 6.2. показана структура массива 6496.
В идеальном стехиометрическом ионном кристалле присутствуют частицы двух типов – катионы и анионы. Соответственно, возможны 4 комбинации типов взаимодействующих частиц: анион-анион, анион-катион, катион-анион, катион-катион. Текстура, в которой параметры потенциалов взаимодействия передаются графическому процессору, показана на рис. 6.3. В парах индекс 0 относится к анионам, а индекс 1 – к катионам.
Комбинации анион-катион и катион-анион фактически эквивалентны, так как представляют одну и ту же пару частиц с одним и тем же потенциалом. Однако, при программировании GPU удобнее разместить пары анион-катион и катион-анион в различных ячейках массива входных данных, с одинаковыми параметрами потенциала (рис. 6.3).
-
1/4
Пара (0;0): [A00, B00, C6, 00, C8, 00]
Пара (1;0): [A10, B10, C6, 10, C8, 10]
3/4
Пара (0;1): [A01, B01, C6, 01, C8, 01]
Пара (1;1): [A10, B10, C6, 10, C8, 10]
1/4
3/4
Рис. 6.3. Массив параметров потенциалов взаимодействия для графического процессора. Как и на рис. 6.2., слева и внизу указаны текстурные координаты, по которым GPU будет обращаться к ячейкам массива; [A10, B10, C6, 10, C8, 10] = [A01, B01, C6, 01, C8, 01]