Сетевое издание
Международный студенческий научный вестник
ISSN 2409-529X

HETEROGENEOUS PARALLEL CALCULATIONS ON THE EXAMPLE OF SOLVING THE COMPLETE SYSTEM OF NAVIER-STOKES EQUATIONS BY THE METHOD OF FINITE DIFFERENCES

Markin E.E. 1 Skachkov P.P. 1
1 Ural state University of railway engineering
The aim of the paper is to develop a multithreaded program for the complete Navier Stokes equations system[1], whose solutions describe two-dimensional flows of a compressible viscous heat-conducting ideal gas at constant values of the viscosity and thermal conductivity coefficients. The method of computation consists in constructing solutions using an explicit difference scheme. The solution of systems of partial differential equations by the grid method requires a large expenditure of computer time. In recent years, methods have been developed [3] using graphics processors in the hardware-software computational method. In this paper, graphics cards are used to implement mass-parallel computations of general purpose. An example of this technology is NVidia CUDA (Compute Unified Device Architecture) - software and hardware architecture for parallel computing on the NVidia GPU. It is shown that the acceleration of calculations depends on the dimension of the grid and can reach hundreds of times relative to the usual parallelization on the CPU. With the help of this technology calculations are made of the specific volume, pressure and velocity components. In the work animation of the process of the protester in the system is carried out and a video of the corresponding wave phenomena is shown.
complete navier-stokes equations system
cuda
gpu
cpu
stream
thread

Решение полной системы уравнений Навье-Стокса методом сеток

Рассматривается полная система уравнений Навье Стокса, решения которой описывают течения сжимаемого вязкого теплопроводного идеального газа. В системе выполнен переход от переменной плотности и температуры к удельному объему и давлению. Это позволяет решать систему уравнений с частными производными в нормальной форме относительно производных по времени.

В двухмерном случае для безразмерных переменных эта система имеет вид [1]:

(1)

Здесь – время, – независимые пространственные переменные. Далее, – удельный объем газа, – плотность газа, – давление, – вектор скорости газа с его проекциями на декартовы оси координат . Постоянные коэффициенты в уравнениях – коэффициенты вязкости и теплопроводности, – показатель политропы идеального газа с уравнениями состояния, записанными в безразмерных переменных Для системы (1) рассматривается начально-краевая задача. В области задаются начальные условия вида

(2)

А также краевые условия

(3)

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

При построении решений с помощью разностных схем по пространственным переменным вводится равномерная сетка , . Для дискретизации производных выбираются следующие стандартные выражения (4).

(4)

Равенство нулю производной температуры на границах области аппроксимируется уравнениями:

(5)

Схема решения задачи на GPU c распараллеливанием

Некоторые понятия[2].

· хост (host) = центральный процессор (CPU);

· устройство (device) = графический процессор (GPU);

· поток (stream) - логическая последовательность зависимых асинхронных операций, независимая от операций в других потоках;

· нить (thread) - элементарный параллельный процесс. Все нити группируются в иерархию - grid/block/thread

· грид(grid) - множество процессов, порождаемых запуском ядра

· блок (block) - множество нитей, в рамках блока нити могут быть синхронизованы, и могут иметь общую разделяемую (shedder) память.

Нити в блоках и блоки в гриде могут быть представлены в виде одно-, двух- или трёхмерной решетки, мы будем рассматривать одномерный грид и блок.

· варп (warp) - группа нитей, размер варпа 32 нити. Все нити одного варпа выполняются одновременно и синхронно (SIMD) на своём мультипроцессоре.

· ядро (kernel) - функция, параллельно выполняемая потоками на GPU;

Программа состоит из двух частей:

· host-кода (управляющего кода) написанного на обычном С/С++, выполняется на CPU

· device-кода (аппаратного кода) на GPU исполняются специальные функции – ядра(kernel) и функции, вызываемые внутри них.

Ядро является потоковой (stream) функцией – большое количество нитей (threads) параллельно исполняют тело ядра(kernel). Ядро вызывается со стороны CPU, при этом указывается количество блоков и количество нитей в каждом блоке, которые будут его исполнять, а так же номер потока в котором будет выполняться ядро. Если номер потока не указан, то ядро будет выполнено в нулевом потоке. Нулевой поток всегда синхронен.

Потоки бывают синхронные и асинхронные. Синхронный поток означает, что после вызова ядра, CPU будет ждать, когда GPU завершит работу и после продолжит алгоритм. Если поток асинхронен, то CPU после вызова ядра, продолжит выполнять алгоритм, не дожидаясь завершения работы GPU.

Имеем слой элементов с шагом и соответственно[3,4]. На основании пяти элементов данного слоя с шагом по времени вычисляются элементы следующего слоя. На CPU задача решается введением двойного цикла. Идея решения задачи с распараллеливанием заключена в том, чтобы все элементы слоя были вычислены одновременно, то есть на GPU в рамках первого этапа запускается один поток с количеством нитей равном , которые параллельно вычисляют элементы следующего слоя с шагом . Процесс продемонстрирован на рисунке 1. По цветам, черные – вычисленные, белые – необходимо вычислить, желтые – вычисляются.

3

Рис.1 Первый этап - нахождение элементов в следующем слое на GPU.

2 этап заключается в вычислении граничных элементов. Граничные элементы вычисляются в два асинхронных потока (зеленым выделен первый поток, красным второй поток), первый имеет нитей и каждая нить вычисляет два элемента, второй поток имеет нитей и каждая нить также вычисляет два элемента. Для наглядности процесс показан на рисунке 2.

Untitled Diagram (2) (3) (1) - копия

Рис.2 Второй этап – нахождение краевых элементов на GPU.

Угловые элементы вычисляются в конце второго этапа нитью с глобальным индексом “0”.

Приведем листинг вызова ядер (рис. 3)[5,6], для нахождения элементов слоя. Как видно из листинга первый вызов ядра проходит в нулевом потоке, нулевой поток синхронен, как если бы cudaDeviceSynchronize() (функция синхронизации) вставлен до и после каждой CUDA операции. Второй и третий вызов ядра происходит в асинхронных потоках, то есть они выполняются одновременно.

Рис. 3 – Листинг организации вызова ядер.

Эффективность использования CPU и CPU+GPU

В Табл. 1 приведено программно-аппаратное обеспечение, на котором производились расчеты. В Табл. 2 полученные результаты расчетов.

Программно-аппаратная часть. Таблица 1

Аппаратное обеспечение

Видео адаптер

Nvidia Geforce GTX 650, 1024 Мб DDR5

Центральный процессор

Intel Pentium G3260 3,3 ГГц

Оперативная память

2 ГБ 2хDDR3-1333 ГГц

Программное обеспечение

Операционная система

Windows 7 64 bit

Драйвер

NVIDIA Driver for Windows 381.65

Среда программирования

Microsoft Visual Studio 2015 Enterprise

Версия CUDA Toolkit

CUDA Toolkit 8.0.61 for Windows

 

Сравнение скорости вычислений Таблица 2

N,M

GPU+CPU, мс

CPU, мс

Во сколько раз быстрей

256

0,6

19,9

33,13

512

2,1

117,6

56,00

768

5,1

397,6

77,96

1024

8,5

746,48

87,82

1280

14,1

1204,0

85,39

1536

20,4

1810,5

88,75

1792

27,8

2584,4

92,96

2048

34,1

3432,8

100,67

 

Рис.4 График затраченного времени на вычисление одного слоя.

Как видно из результатов (рис 4), при параллельной работе графического адаптера ускорение обработки данных увеличивается в десятки раз. Отношение времени обработки данных на графическом адаптере и центральном процессоре не постоянно, а зависит от размера задачи. Чем больше объем задачи, тем выгоднее использовать графический процессор.

Результаты моделирования

В соответствии с системой (1), начальными (2) и граничными (3) условиями записываются разностные уравнения. Для конкретного расчета выберем значения переменных для момента времени t=0, и значения констант и шага по времени .

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

Рис. 5 Давление в момент времени t=0

Рис. 6 – Давление в момент времени t=1000

Рис. 7 Давление и распределение скоростей в момент времени t=10

Разница колебаний между минимумом и максимумом давления на покое составляет менее 0,016 (рисунок 6).

Затраченное машинное время на моделирование с использованием GPU 15 часов 30 минут. Всего было найдено 100 млн слоев, такая задача на CPU решалась бы около 3-х недель.

Видео моделирования доступно по ссылке: https://cloud.mail.ru/public/LTLz/BQyLMM3Jf