Реализация метода решетки Больцмана на нескольких устройствах с использованием OpenCL сочинение пример

ООО "Сочинения-Про"

Ежедневно 8:00–20:00

Санкт-Петербург

Ленинский проспект, 140Ж

magbo system

Сочинение на тему Реализация метода решетки Больцмана на нескольких устройствах с использованием OpenCL

Научно-вычислительное сообщество тесно связано с высокопроизводительными вычислениями (HPC), которые были привилегией ограниченной группы ученых. В последнее время, с быстрым развитием графических процессоров (GPU), возможности параллельной обработки высокопроизводительных компьютеров были применены к каждому обычному настольному компьютеру, что снижает стоимость научных вычислений. В этой статье мы разрабатываем код Lattice Boltzmann общего назначения, который выполняется на обычном компьютере с несколькими разнородными устройствами, поддерживающими спецификацию OpenCL. Были исследованы различные подходы к реализации кода решетки Больцмана на обычных компьютерах с несколькими устройствами. Результаты моделирования для различных реализаций кода на нескольких устройствах сравнивались друг с другом, с результатами, полученными для реализации на одном устройстве, и с результатами из литературы. Результаты моделирования для платформ аппаратного компьютерного оборудования с несколькими устройствами показали значительное улучшение скорости по сравнению с моделированием, выполненным на одном устройстве.

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

В последнее время решеточный метод Больцмана (LBM) стал альтернативным методом для вычислительной гидродинамики (CFD) и доказал свою способность моделировать большое разнообразие потоков жидкости. LBM требует больших вычислительных затрат и памяти, но потому, что он является явным и локальное свойство доминирующих уравнений (требуется только информация о ближайшем соседе), этот метод очень подходит для параллельных вычислений с использованием многоядерных и многоядерных аппаратных архитектур.

Графический процессор (GPU) – это многопоточная архитектура, которая широко используется для графических и неграфических вычислений. Основным преимуществом графических процессоров является их способность выполнять значительно больше операций с плавающей запятой (FLOP) за единицу времени, чем процессорам.

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

Использование полного потенциала современных многоядерных процессоров и многоядерных графических процессоров сопряжено со значительными расходами. Последовательный код должен быть (пере) написан для явного раскрытия алгоритмического параллелизма. Были созданы различные модели программирования, которые часто зависят от поставщика.

Основная цель настоящей работы – реализовать метод решетчатого Больцмана в соответствии со спецификацией OpenCL, где наиболее интенсивные в вычислительном отношении части алгоритма выполняются на нескольких гетерогенных устройствах, что приводит к ускорению моделирования по сравнению с реализацией для одного устройства. Кроме того, одна из целей состоит в том, чтобы показать, что с помощью языка программирования Java и OpenCL все устройства, доступные на аппаратном оборудовании, могут быть использованы для ускорения научных симуляций.

Кроме того, созданы две разные реализации для обычного компьютера с несколькими гетерогенными устройствами, и сравниваются их характеристики. Реализации разрабатываются с использованием: языка программирования Java для хоста (управляющая программа) и спецификации OpenCL для ядер (написанных для распараллеливания частей алгоритма на двух или более разнородных устройствах). Связывание между программами хоста (Java) и ядра (OpenCL) осуществляется библиотекой Java (JOCL). Моделирование было выполнено на трех различных товарных аппаратных платформах. Исполнения реализаций конкурируют, и делается вывод, что реализации, работающие на двух или более устройствах OpenCL, имеют лучшие характеристики, чем реализации, представленные при работе только на одном устройстве.

Реализация LBM с использованием нескольких графических процессоров с использованием CUDA широко обсуждалась в литературе.

представлена ​​реализация потока в полости, использующая модель решетки D3Q19, приближение мульти-релаксации по времени (MRT) и CUDA. Симуляция была протестирована на одном узле, состоящем из шести Tesla C1060, а поток POSIX используется для реализации параллелизма. описал поток в полости для различных соотношений глубины и ширины с использованием модели D3Q19 и приближения MRT. Моделирование распараллеливается с использованием OpenMP и тестируется на системе с одним GPU, состоящей из трех устройств nVIDIA M2070 или трех устройств nVIDIA GTX560. представил реализацию LBM для потока жидкости через пористую среду на мульти-GPU, также используя CUDA и MPI. Некоторые стратегии оптимизации на основе структуры данных и макета также предлагаются. Реализация тестируется на одноузловом кластере, оснащенном четырьмя Tesla C1060.

авторы приняли технику интерфейса передачи сообщений (MPI) для управления графическим процессором для кластера графических процессоров и исследовали ускорение реализации потока в резонаторе, используя перекрытие связи и вычислений. В этой ссылке также используются модель D3Q19 и приближение MRT. Сиань описал реализацию CUDA обтекания сферы с использованием модели D3Q19 и приближения MRT. Параллелизм кода основан на библиотеке MPI. Сокращение времени общения достигается с помощью метода разделения области решения или с использованием вычислений и связи несколькими потоками. Для расчетов используется суперкомпьютер, оснащенный 170 узлами Tesla S1070 (680 графических процессоров). реализованы однофазные, многофазные и многокомпонентные LBM на кластерах с несколькими GPU с использованием CUDA и OpenMP.

До настоящего времени в литературе описано очень мало реализаций LB-кодов в OpenCL.

Сравнивает реализации CUDA и OpenCL LBM на одном вычислительном блоке и показывает, что правильно структурированный код OpenCL достигает уровней производительности, близких к уровням, достигнутым архитектурой CUDA.

Насколько известно автору, не было опубликовано ни одной статьи, касающейся реализации LBM с использованием Java и OpenCL на нескольких устройствах обычных компьютеров.

<Р> а. Решеточное уравнение Больцмана

В методе решетки Больцмана движение жидкости моделируется движением частиц и столкновением на однородной решетке, а жидкость моделируется одной функцией распределения частиц. Эволюция функции распределения регулируется решеточным уравнением Больцмана:

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

Модель столкновения была предложена (BGK) для упрощения анализа решеточного уравнения Больцмана. Используя уравнение аппроксимации LB-BGK (1) можно записать как

Вышеуказанное уравнение является хорошо известной моделью ЛБГК, и оно согласуется с уравнением Навье-Стокса для потока жидкости в пределе малого числа Маха и потока несжимаемой жидкости. В уравнении (2) приводится распределение локального равновесия, и это единственный параметр релаксации, связанный с релаксацией столкновения с локальным равновесием.

При применении необходимо выбрать решеточную модель Больцмана. Большинство исследовательских работ сделано с моделью D2Q9. Модель D2Q9 также использовалась в этой работе. Название подразумевает, что модель предназначена для двух измерений, и в каждой точке решетки имеется девять скоростей (N = 9), в которых может перемещаться частица. Равновесная функция распределения частиц для модели D2Q9 определяется как

Где и – макроскопические скорость и плотность, соответственно, которые имеют величину, равную единице в этой модели, и являются весами и задаются для. Дискретные скорости для D2Q9 определяются как

Макроскопические величины и могут быть оценены как

Макроскопическая кинематическая вязкость определяется как

Уравнение (2) обычно решается путем принятия в соответствии со следующими двумя этапами, где: обозначает функцию распределения после столкновения и является значением функции распределения после завершения как потоковой, так и операции столкновения.

Третий этап внедрения LBM – это определение граничных условий. В настоящей работе для стен было применено граничное условие обратного хода, поскольку оно имеет простую реализацию и приемлемые результаты в простой ограниченной области. Для движущейся крышки была использована схема равновесия.

Решения метода Больцмана для нескольких гетерогенных устройств показаны в этом разделе. Основное различие между этими реализациями заключается в передаче данных от и к разнородным устройствам OpenCL.

Обе реализации используют одни и те же ядра OpenCL. Модель D2Q9 используется для представления данных, функции распределения частиц представлены девятью массивами. Поскольку OpenCL не поддерживает двумерные массивы, данные отображаются из двумерного в одномерный массив. Двухрешеточный алгоритм используется для обеих реализаций решетчатого метода Больцмана. Поскольку этот алгоритм обрабатывает зависимость данных путем сохранения значений распределения в дублированных решетках для фазы потоковой передачи, создается призрачный слой массивов для функций распределения частиц.

Созданные массивы разделены на субдомены, по одному для каждого (многоядерного / многоядерного) устройства в направлении X. Размер поддоменов зависит от характеристик каждого (многоядерного / многоядерного) устройства. Домен разделен на (многоядерные / многоядерные) устройства. Поскольку информацию о границах после фазы потоковой передачи необходимо обменивать между итерациями решателя, создается еще один побочный слой. Этот слой используется для обмена данными о функциях распределения частиц между устройствами и содержит только информацию о границах, которой необходимо обмениваться. Это делается для минимизации количества данных, копируемых с устройства на хост и с хоста на следующее устройство, и используется для каждого субдомена. Массивы, содержащие входные параметры (такие как: размер по оси x, размер по оси y, количество устройств, u0, alpha…), используются всеми устройствами, эти данные не разделяются на поддомены, поскольку они должны отправляться на все устройства. Реализация состоит из пяти этапов.

Первым шагом в реализации является выделение памяти на хосте, все необходимые массивы выделяются и указатели на них создаются с использованием библиотеки org.jocl.Pointer.

Второй шаг – создание объектов OpenCL и разделение данных на поддоменах. Этот шаг может быть реализован двумя различными способами; данные могут быть разделены на субдомены до и после создания объектов OpenCL.

В первой реализации (в т.ч. вспомогательный буфер) для каждого ранее созданного указателя создается один объект OpenCL с использованием функции clCreateBuffer. Затем объекты OpenCL разделяются на частичные объекты с помощью функции clCreateSubbufer. Из каждого объекта создается один новый массив, состоящий из частичных объектов. Метод createInfo возвращает указатель на структуру, которая определяет подмножество буфера для суббуфера, все частичные объекты являются псевдонимами для соответствия глобальным буферам, и новое пространство памяти не выделяется. Количество частичных объектов, созданных из одного объекта OpenCL, равно количеству устройств OpenCL. Кроме того, дается разделение одной функции распределения частиц по поддоменам с использованием подбуферов.

Во второй реализации (включая указатель) данные разбиваются на поддомены перед созданием объектов OpenCL. Для каждого указателя, который указывает на один глобальный буфер с помощью метода org.jocl.Pointer.withByteOffset, создается новый массив указателей. Метод withByteOffset возвращает новый частичный указатель со смещением на указанное количество байтов. Размер каждого созданного массива указателей равен количеству доступных устройств OpenCL. Для каждого созданного частичного указателя создается один объект OpenCL с использованием функции clCreateBuffer. Следующие строки показывают разделение одной функции распределения частиц по поддоменам с использованием org.jocl.Pointer. Значение flagPtr зависит от используемого устройства OpenCL, если устройство является хостом и вычислительным устройством одновременно, значение CL_MEM_USE_HOST_PTR, если устройство является только вычислительным устройством, тогда значение CL_MEM_COPY_HOST_PTR.

Третий шаг – доступ к доступным устройствам OpenCL на платформе. На этом этапе создается один контекст, устройства связываются с контекстом путем получения идентификатора устройств, и для каждого устройства создается одна очередь команд. Во время выполнения программа создается и строится из исходного кода. Один экземпляр каждого ядра создается для каждого устройства, и соответствующие объекты памяти задаются в качестве аргументов для каждого экземпляра ядер.

Четвертый шаг – симуляция. Первое выполненное ядро ​​вычисляет значения для возврата, макроскопических величин и столкновений. Эти операции являются чисто локальными, они требуют только локальных вычислений, и каждая ячейка может выполнять эти процессы независимо.

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

Зарегистрируйся, чтобы продолжить изучение работы

    Поделиться сочинением
    Ещё сочинения
    Нет времени делать работу? Закажите!

    Отправляя форму, вы соглашаетесь с политикой конфиденциальности и обработкой ваших персональных данных.