Самое быстрое и наиболее эффективное в использовании памяти программное обеспечение Boltzmann CFD на решетке, работающее на всех графических процессорах через OpenCL. Бесплатно для некоммерческого использования.
(нажмите на изображения, чтобы просмотреть видео на YouTube)
v1.0 (04.08.2022) изменения (публичный релиз)
публичный релиз
v1.1 (29.09.2022) изменения (вокселизация GPU)
добавлена сплошная вокселизация на графическом процессоре (медленный алгоритм)
добавлен инструмент для печати текущего положения камеры (клавиша G )
исправление незначительной ошибки (обходной путь для ошибки драйвера Intel iGPU с рендерингом треугольников)
v1.2 (24.10.2022) изменения (расчет силы/момента)
добавлены функции для расчета силы/крутящего момента на объектах
добавлена функция перевода сетки
добавлена настройка проверки перетаскивания Стокса
v1.3 (10.11.2022) изменения (исправления мелких ошибок)
добавлены функции преобразования единиц крутящего момента
FORCE_FIELD
и VOLUME_FORCE
теперь можно использовать независимо.
незначительное исправление ошибки (обходной путь для ошибки устаревшего драйвера AMD с литералами двоичных чисел)
v1.4 (14.12.2022) изменения (графика Linux)
полная переработка графической библиотеки C++ для минимизации зависимостей API.
добавлен интерактивный графический режим в Linux с X11
исправлена ошибка упрощенной визуализации в 2D
Изменения v2.0 (09.01.2023) (обновление до нескольких графических процессоров)
добавлена (межвендорная) поддержка нескольких графических процессоров на одном узле (ПК/ноутбук/сервер)
v2.1 (15.01.2023) изменения (быстрая вокселизация)
молниеносно выполнил сплошную вокселизацию на графическом процессоре (новый алгоритм, от минут до миллисекунд)
v2.2 (20.01.2023) изменения (скоростная вокселизация)
добавлена возможность вокселизации движущейся/вращающейся геометрии на графическом процессоре с автоматической инициализацией скорости для каждой точки сетки на основе центра вращения, линейной скорости и скорости вращения.
ячейки, которые преобразуются из твердого тела в жидкость во время повторной вокселизации, теперь правильно инициализируют свои DDF.
добавлена опция отключения автоматического масштабирования сетки во время read_stl(...)
с отрицательным параметром size
добавлено ядро для рендеринга границ твердого тела с помощью марширующих кубов
v2.3 (30.01.2023) изменения (частицы)
добавлены частицы с помощью метода погруженных границ (пассивного или двухстороннего, поддерживается только с одним графическим процессором)
незначительная оптимизация алгоритма вокселизации графического процессора (потоки рабочей группы за пределами ограничивающей рамки сетки возвращаются после того, как были найдены пересечения сетки лучей)
отображаемый размер выделенной памяти графического процессора теперь полностью точен
исправлена ошибка в функции write_line()
в src/utilities.hpp
удалено расширение файла .exe
для Linux/macOS
v2.4 (11.03.2023) изменения (улучшения пользовательского интерфейса)
добавлено меню справки с клавишей H , которое показывает элементы управления клавиатурой/мышью, настройки визуализации и статистику моделирования.
улучшения в управлении клавиатурой/мышью ( +/- для масштабирования, щелчок мышью освобождает/блокирует курсор)
добавлено предложение максимально возможного разрешения сетки, если разрешение установлено больше, чем позволяет память
незначительные оптимизации взаимодействия между несколькими графическими процессорами (незначительная разница в производительности)
исправлена ошибка в функции температурного равновесия для расширения температуры
исправлен ошибочный двойной литерал для iGPU Intel в функциях цвета Skybox
исправлена ошибка в make.sh, из-за которой идентификаторы устройств с несколькими графическими процессорами не пересылались в исполняемый файл.
исправлены мелкие ошибки в графическом движке (свободный курсор не центрируется при вращении, метки в режиме VR)
исправлена ошибка в стандартной инициализации параметра размера LBM::voxelize_stl()
v2.5 (11.04.2023) изменения (переработка трассировки лучей)
реализовано поглощение света в жидкости для графики трассировки лучей (без влияния на производительность)
улучшена частота кадров трассировки лучей, когда камера находится внутри жидкости
исправлены артефакты мерцания столба скайбокса
исправлена ошибка, из-за которой перемещение объектов во время повторной вокселизации оставляло за собой ошибочный след из сплошных ячеек сетки.
v2.6 (16.04.2023) изменения (патч Intel Arc)
исправлены проблемы OpenCL графических процессоров Intel Arc: теперь возможно выделение видеопамяти >4 ГБ и сообщается правильная емкость видеопамяти
v2.7 (29.05.2023) изменения (обновление визуализации)
добавлена визуализация срезов (режимы клавиш 2 /клавиши 3 , затем переключайте режимы срезов клавишей T , перемещайте срез клавишами Q / E )
сделал каркас флага / ядра визуализации твердой поверхности, переключаемые клавишей 1
добавлена визуализация поверхностного давления (ключ 1 , когда FORCE_FIELD
включен и вызывается lbm.calculate_force_on_boundaries();
)
добавлена функция экспорта двоичных .vtk
для сеток с помощью lbm.write_mesh_to_vtk(Mesh* mesh);
добавлен time_step_multiplicator
для integrate_particles()
в расширении PARTICLES
исправление неправильных отчетов по памяти в Intel Arc стало более надежным.
исправлена ошибка в функциях шаблона write_file()
вернулся к отдельному cl::Context
для каждого устройства OpenCL, поскольку в противном случае общий контекст выделил бы дополнительную видеопамять на всех других неиспользуемых графических процессорах Nvidia.
удалены конфигурации отладки и x86 из файла решения Visual Studio (на одну сложность компиляции меньше)
исправлена ошибка, из-за которой частицы могли подойти слишком близко к стенам и застрять или покинуть жидкую фазу (добавлена граничная сила)
v2.8 (24.06.2023) изменения (документация + доработка)
наконец-то добавлено больше документации
очищены все примеры настроек в setup.cpp
для большего удобства для новичков и добавлены необходимые расширения в defines.hpp
в качестве комментариев ко всем настройкам.
улучшена загрузка составных геометрий .stl
за счет добавления возможности пропустить автоматическое изменение положения сетки, добавлена дополнительная функциональность в структуру Mesh
в файле utilities.hpp
добавлена функция uint3 resolution(float3 box_aspect_ratio, uint memory)
для вычисления разрешения окна моделирования на основе соотношения сторон окна и занятости видеопамяти в МБ.
добавлена функция bool lbm.graphics.next_frame(...)
для экспорта изображений для указанной длины видео в цикле вычислений main_setup
добавлен макрос VIS_...
для упрощения настройки режимов визуализации в режиме безголовой графики в lbm.graphics.visualization_modes
Размеры поля моделирования теперь автоматически делятся на равные области для моделирования с несколькими графическими процессорами.
исправлено форматирование сообщений информации/предупреждений/ошибок при загрузке файлов, а метки сообщений информации/предупреждений/ошибок стали цветными.
добавлена настройка тела Ахмеда в качестве примера расчета сил тела и коэффициента сопротивления.
добавлены настройки Cessna 172 и Bell 222 для демонстрации загрузки составных геометрий .stl и ревокселизации движущихся частей.
добавлен дополнительный полупрозрачный режим рендеринга ( #define GRAPHICS_TRANSPARENCY 0.7f
в defines.hpp
)
исправлено мерцание упрощенной визуализации в интерактивной графике
улучшено плавное позиционирование линий тока в режиме среза
исправлена ошибка, при которой mass
и massex
в расширении SURFACE
также распределялись в оперативной памяти ЦП (не обязательно)
исправлена ошибка при рендеринге данных гало по Q-критерию в режиме нескольких графических процессоров, уменьшена ширина разрыва между доменами
удалена оптимизация общей памяти из ядра вокселизации сетки, так как она дает сбой на графических процессорах Nvidia с новыми драйверами графического процессора и несовместима со старыми графическими процессорами OpenCL 1.0.
исправлен цвет затухания трассировки лучей, когда на стенках бокса симуляции нет поверхности с периодическими границами
v2.9 (31.07.2023) изменения (многопоточность)
добавлена кросс-платформенная реализация parallel_for
в utilities.hpp
с использованием std::threads
значительно (>4 раза) более быстрый запуск моделирования благодаря многопоточной инициализации геометрии и проверке работоспособности
более быстрые функции calculate_force_on_object()
и calculate_torque_on_object()
с многопоточностью
добавлено общее время выполнения и время выполнения LBM в lbm.write_status()
исправлена ошибка в направлении луча вокселизации при повторной вокселизации вращающихся объектов
исправлена ошибка в Mesh::get_bounding_box_size()
исправлена ошибка в функции print_message()
в utilities.hpp
v2.10 (05.11.2023) изменения (отсечение фруструма)
улучшена производительность растеризации за счет отсеивания усеченных пирамид, когда видна только часть поля моделирования
улучшено переключение между режимами центральной/свободной камеры
переработанная библиотека рендеринга OpenCL
Коэффициенты пересчета единиц измерения теперь автоматически печатаются в консоли при использовании units.set_m_kg_s(...)
более быстрое время запуска теста FluidX3D
исправление ошибки майнера в ядре voxelize_mesh(...)
исправлена ошибка в shading(...)
заменена медленная (в многопоточности) функция std::rand()
на стандартную C99 LCG
более надежное исправление неправильных отчетов о емкости VRAM на графических процессорах Intel Arc.
исправлены некоторые незначительные предупреждения компилятора
v2.11 (07.12.2023) изменения (улучшенная графика Linux)
интерактивная графика в Linux теперь также работает в полноэкранном режиме, что полностью соответствует Windows.
значительно ускоряется инициализация буфера CPU/GPU с помощью std::fill
и enqueueFillBuffer
(в целом запуск симуляции ускоряется примерно на 8%)
добавлена информация об операционной системе в распечатку версии драйвера устройства OpenCL
исправлено мерцание с отсечкой фруструма в очень маленьком поле зрения
исправлена ошибка, из-за которой визуализированный/экспортированный кадр не обновлялся при изменении visualization_modes
v2.12 (18.01.2024) изменения (ускоренный запуск)
Примерно в 3 раза быстрее компиляция исходного кода в Linux с использованием нескольких ядер ЦП, если установлен make
.
значительно более быстрая инициализация моделирования (~ 40% для одного графического процессора, ~ 15% для нескольких графических процессоров)
небольшое исправление ошибки в функции Memory_Container::reset()
v2.13 (11.02.2024) изменения (улучшен экспорт .vtk)
данные в экспортированных файлах .vtk
теперь автоматически конвертируются в единицы СИ.
Экспорт .vtk
~ в 2 раза быстрее благодаря многопоточности
добавлены функции преобразования единиц измерения для расширения TEMPERATURE
исправлены графические артефакты с камерой, выровненной по оси, при трассировке лучей
исправлен get_exe_path()
для macOS
исправлены проблемы с несколькими мониторами X11 в Linux
обходной путь для ошибки драйвера Nvidia: enqueueFillBuffer
не работает для больших буферов на графических процессорах Nvidia
исправлены проблемы медленного числового смещения, вызванные -cl-fast-relaxed-math
исправлено неправильное сообщение о максимальном размере выделения в LBM::write_status()
исправлено отсутствие масштабирования координат в единицах СИ в LBM::write_mesh_to_vtk()
v2.14 (03.03.2024) изменения (обновление визуализации)
Цвет теперь можно переключать между скоростью/плотностью/температурой с помощью клавиши Z.
единые улучшенные цветовые палитры для визуализации скорости/плотности/температуры
цветовая шкала с автоматическим преобразованием единиц теперь может отображаться с помощью клавиши H
Режим срезов для визуализации полей теперь рисует полностью заполненные срезы, а не только линии для векторов скорости.
затенение в режимах VIS_FLAG_SURFACE
и VIS_PHI_RASTERIZE
теперь более плавное
make.sh
теперь автоматически определяет операционную систему и поддержку X11 в Linux и запускает FluidX3D только в том случае, если последняя компиляция прошла успешно.
исправлены предупреждения компилятора на Android
исправлен сбой make.sh
в некоторых системах из-за нестандартного пути интерпретатора
исправлено, что make
не компилировался с несколькими ядрами на некоторых системах
v2.15 (09.04.2024) изменения (увеличение частоты кадров)
устранена одна копия памяти кадра и одна операция очистки кадра в цепочке рендеринга, что позволило повысить частоту кадров на 20–70 % как в Windows, так и в Linux.
включена оптимизация компилятора g++
для более быстрого запуска и более высокой частоты кадров рендеринга.
исправлена ошибка в многопоточных проверках работоспособности
исправлено неправильное преобразование единиц измерения коэффициента теплового расширения
преобразование фиксированной плотности в давление в единицах LBM
исправлена ошибка, из-за которой ядро трассировки лучей могло блокировать симуляцию
исправлены незначительные визуальные артефакты при трассировке лучей
исправлено, что консоль иногда не очищалась перед началом рендеринга INTERACTIVE_GRAPHICS_ASCII
v2.16 (02.05.2024) изменения (исправления ошибок)
упрощена реализация маршевых кубов на 10% быстрее с 1D-интерполяцией по краям вместо 3D-интерполяции, что позволяет избавиться от таблицы ребер
добавлен более быстрый и упрощенный вариант марширующих кубов для рендеринга твердой поверхности, где края всегда находятся посередине между ячейками сетки.
рефакторинг в ядрах рендеринга OpenCL
исправлена ошибка вокселизации в среде выполнения процессора Intel OpenCL из-за доступа к массиву за пределами массива.
исправлено, что вокселизация не всегда давала идентичные двоичные результаты в многочиповом процессоре по сравнению с однографическим процессором
исправлена ошибка, из-за которой вокселизация скорости не удавалась при моделировании свободной поверхности.
исправлена ужасная производительность на графических процессорах ARM путем замены макроса Fused-multiply-add ( fma
) на a*b+c
исправлено неправильное расположение клавиш Y / Z для раскладки клавиатуры QWERTY
в Linux.
исправлено, что скорость свободного движения камеры в наложении справки не обновлялась на неподвижном изображении при прокрутке
исправлено, что курсор иногда мерцал при прокрутке на трекпадах с интерактивной графикой Linux-X11.
исправлено мерцание интерактивного рендеринга с использованием нескольких графических процессоров, когда камера не перемещается
исправлен отсутствующий вызов XInitThreads()
, который мог привести к сбою интерактивной графики Linux в некоторых системах.
исправлена z-конфликт между ядрами graphics_rasterize_phi()
graphics_flags_mc()
v2.17 (05.06.2024) изменения (неограниченное разрешение домена)
домены больше не ограничены 4,29 миллиардами (2³², 1624³) ячеек сетки или 225 ГБ памяти; если используется больше, код OpenCL автоматически компилируется с 64-битной индексацией.
новая, более быстрая визуализация полей на основе трассировки лучей для моделирования с одним графическим процессором
в документацию добавлены инструкции по установке драйвера графического процессора и среды выполнения OpenCL.
рефакторинг INTERACTIVE_GRAPHICS_ASCII
исправлена утечка памяти в деструкторах floatN
, floatNxN
, doubleN
, doubleNxN
(все не используются)
движение/поворот/масштаб камеры сделано независимым от частоты кадров
исправлено, что smart_device_selection()
выводило неправильное предупреждение, если устройство сообщает о тактовой частоте 0 МГц.
v2.18 (21.07.2024) изменения (больше исправлений ошибок)
добавлена поддержка мониторов с высокой частотой обновления в Linux
более компактные сценарии установки OpenCL Runtime в документации
инструкции по установке драйвера/среды выполнения теперь будут выводиться на консоль, если устройства OpenCL недоступны.
добавлена информация о домене в LBM::write_status()
добавлена функция LBM::index
для входного параметра uint3
исправлена ошибка, из-за которой очень большие симуляции иногда не отображались должным образом из-за увеличения максимального расстояния рендеринга с 10 000 до 2,1 м.
исправлено заикание ввода с помощью мыши при высокой частоте обновления экрана в Linux
исправлены графические артефакты при трассировке лучей по свободной поверхности в среде выполнения процессора Intel для OpenCL.
исправлена оценка времени выполнения, отображаемая в консоли для настроек с несколькими вызовами lbm.run(...)
фиксированные колебания плотности в выборочных установках (слишком большой lbm_u
)
исправлены незначительные графические артефакты в raytrace_phi()
исправлены незначительные графические артефакты в ray_grid_traverse_sum()
исправлен неправильный отсчет шага времени при настройке образца дождевой капли.
v2.19 (07.09.2024) изменения (сплайны камеры)
камера теперь может летать по плавному пути через список предоставленных положений камеры по ключевым кадрам, используя сплайны Catmull-Rom.
более точная оценка оставшегося времени выполнения, включая время, затраченное на рендеринг
по умолчанию включено сжатие памяти FP16S
расположение камеры, напечатанное с помощью клавиши G , теперь отформатировано для упрощения копирования/вставки.
добавлена контрольная диаграмма в Readme с использованием диаграммы Ганта русалки
информация о выделении памяти во время запуска симуляции размещена в более удобном месте
исправлен конфликт потоков между INTERACTIVE_GRAPHICS
и lbm.graphics.write_frame();
исправлен максимальный размер выделения буфера для графических процессоров AMD и в среде выполнения процессора Intel для OpenCL.
исправлена неправильная распечатка информации Re<Re_max
для 2D-моделирования.
незначительное исправление в bandwidth_bytes_per_cell_device()
Прочтите документацию FluidX3D!
стриминг (часть 2/2)
ж 0 темп ( Икс , т ) знак равно ж 0 ( Икс , т )
ж я temp ( x , t ) знак равно f ( t %2 ? i : ( я %2 ? i +1 : я -1)) ( я %2 ? x : x - e i , t ) для i ∈ [1 , q -1]
столкновение
ρ ( Икс , т ) знак равно ( Σ я ж я темп ( Икс , т )) + 1
ты ( Икс , т ) знак равно 1 ∕ ρ ( Икс , т ) Σ я c я ж я темп ( Икс , т )
ж я eq-сдвинутый ( Икс , т ) знак равно ш я ρ · ( ( ты ° c я ) 2 ∕ (2 c 4 ) - ( ты ° ты ) ∕ (2c 2 ) + ( ты ° c я ) ∕ c 2 ) + w i ( ρ -1)
ж я темп ( Икс , т +Δ т ) знак равно ж я темп ( Икс , т ) + Ω я ( ж я темп ( Икс , т ), ж я экв.-сдвинутый ( Икс , т ), τ )
стриминг (часть 1/2)
ж 0 ( Икс , т +Δ т ) знак равно ж 0 темп ( Икс , т +Δ т )
f ( t %2 ? ( i %2 ? i +1 : я -1) : i ) ( i %2 ? x + e i : x , t +Δ t ) = fi temp ( x , t +Δ t ) для i ∈ [1, q -1]
переменная | единицы СИ | определяющее уравнение | описание |
---|---|---|---|
х | м | х = (х, у, z) Т | Трехмерное положение в декартовых координатах |
т | с | - | время |
ρ | кг ∕ м³ | ρ знак равно (Σ я ж я )+1 | массовая плотность жидкости |
п | кг ∕ м·с² | р = с² ρ | давление жидкости |
ты | м ∕ с | ты знак равно 1 ∕ ρ Σ я c я ж я | скорость жидкости |
ν | м² ∕ с | ν = µ ∕ ρ | кинематическая сдвиговая вязкость жидкости |
мкм | кг ∕ м·с | ц = ρ ν | динамическая вязкость жидкости |
я | кг ∕ м³ | - | функции распределения смещенной плотности (DDF) |
Δ х | м | Δ х = 1 | постоянная решетки (в единицах LBM) |
Δ т | с | Δ т = 1 | шаг времени моделирования (в единицах LBM) |
с | м ∕ с | с знак равно 1 ∕ √3 Δ x ∕ Δ t | решёточная скорость звука (в единицах LBM) |
я | 1 | 0 ≤ я < д | Индекс направления потоковой передачи LBM |
д | 1 | q ∈ { 9,15,19,27 } | количество направлений потоковой передачи LBM |
е я | м | Д2К9/Д3К15/19/27 | Направления потоковой передачи LBM |
с я | м ∕ с | c я знак равно е я ∕ Δ т | Скорость потока LBM |
я | 1 | Σ я ш я знак равно 1 | Вес набора скоростей LBM |
Ом я | кг ∕ м³ | СРТ или ТРТ | Оператор столкновения LBM |
τ | с | τ = ν ∕ c ² + Δ t ∕ 2 | Время релаксации LBM |
наборы скоростей: D2Q9, D3Q15, D3Q19 (по умолчанию), D3Q27.
операторы столкновений: одно время релаксации (SRT/BGK) (по умолчанию), два времени релаксации (TRT)
Сдвиг DDF и другая алгебраическая оптимизация для минимизации ошибки округления
??????????????????????????????????????????????????? ?????
(плотность ?, скорость ?, флаги ?, DDF ?; каждый квадрат = 1 байт)
позволяет использовать 19 миллионов ячеек на 1 ГБ видеопамяти
потоковая передача на месте с помощью Esoteric-Pull: устраняет избыточное копирование функций распределения плотности (DDF) в памяти; почти вдвое снижает потребность в памяти и немного повышает производительность за счет неявных границ возврата; предлагает оптимальные шаблоны доступа к памяти для потоковой передачи одной ячейки на месте
разделенная арифметическая точность (FP32) и точность памяти (FP32 или FP16S или FP16C): вся арифметика выполняется в FP32 для совместимости со всем оборудованием, но файлы DDF в памяти можно сжать до FP16S или FP16C: почти вдвое сокращается потребность в памяти и почти удваивает производительность, не влияя на общую точность для большинства настроек
TYPE_S
(стационарные или движущиеся) сплошные границы
Границы равновесия TYPE_E
(приток/отток)
TYPE_T
температурные границы
TYPE_F
свободная поверхность (жидкость)
TYPE_I
свободная поверхность (интерфейс)
TYPE_G
свободная поверхность (газ)
TYPE_X
осталось для индивидуального использования или дальнейших расширений
TYPE_Y
осталось для индивидуального использования или дальнейших расширений
(плотность ?, скорость ?, флаги ?, 2 копии DDF ?/?; каждый квадрат = 1 байт)
позволяет использовать 3 миллиона ячеек на 1 ГБ видеопамяти
традиционный LBM (D3Q19) с FP64 требует ~344 байт/ячейку
FluidX3D (D3Q19) требует всего 55 байт на ячейку с Esoteric-Pull+FP16.
большая экономия средств: сравнение максимального разрешения сетки одного графического процессора для D3Q19 LBM
Объем видеопамяти графического процессора | 1 ГБ | 2 ГБ | 3 ГБ | 4ГБ | 6 ГБ | 8 ГБ | 10 ГБ | 11 ГБ | 12 ГБ | 16 Гб | 20 ГБ | 24 ГБ | 32 ГБ | 40 ГБ | 48 ГБ | 64 ГБ | 80 ГБ | 94 ГБ | 128 ГБ | 192 ГБ | 256 ГБ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
приблизительная цена графического процессора | 25 долларов США ГТ 210 | 25 долларов США ГТХ 950 | 12 долларов США ГТХ 1060 | 50 долларов США ГТ 730 | 35 долларов США ГТХ 1060 | 70 долларов США РХ 470 | 500 долларов США РТХ 3080 | 240 долларов США видеокарта GTX 1080 Ти | 75 долларов США Тесла М40 | 75 долларов США Инстинкт МИ25 | 900 долларов США RX 7900 XT | 205 долларов США Тесла П40 | 600 долларов США Инстинкт МИ60 | 5500 долларов США А100 | 2400 долларов США РТХ 8000 | 10 тысяч долларов Инстинкт МИ210 | 11 тысяч долларов А100 | >40 тысяч долларов Н100 НВЛ | ? Графический процессор Макс. 1550 | ~$10 тыс. МИ300Х | - |
традиционный LBM (FP64) | 144³ | 182³ | 208³ | 230³ | 262³ | 288³ | 312³ | 322³ | 330³ | 364³ | 392³ | 418³ | 460³ | 494³ | 526³ | 578³ | 624³ | 658³ | 730³ | 836³ | 920³ |
ЖидкостьX3D (FP32/FP32) | 224³ | 282³ | 322³ | 354³ | 406³ | 448³ | 482³ | 498³ | 512³ | 564³ | 608³ | 646³ | 710³ | 766³ | 814³ | 896³ | 966³ | 1018³ | 1130³ | 1292³ | 1422³ |
ЖидкостьX3D (FP32/FP16) | 266³ | 336³ | 384³ | 424³ | 484³ | 534³ | 574³ | 594³ | 610³ | 672³ | 724³ | 770³ | 848³ | 912³ | 970³ | 1068³ | 1150³ | 1214³ | 1346³ | 1540³ | 1624³ |
декомпозиция домена позволяет объединять VRAM из нескольких графических процессоров для гораздо большего разрешения сетки
Графические процессоры не обязательно должны быть идентичными (даже от одного и того же производителя), но рекомендуется использовать одинаковую емкость/пропускную способность видеопамяти.
архитектура связи домена (упрощенная)
++ .----------------------------------------------- ------------------. ++++ | графический процессор 0 | ++++ | LBM Домен 0 | ++++ '--------------------------------------------- --------------------' ++++ | выборочный /| ++++ |/ Копия в VRAM | ++++ .--------------------------------------------- ----------. ++++ | GPU 0 — буфер передачи 0 | ++++ '--------------------------------------------- ----------' ++!! | PCIe /| !!!! |/копировать | !!@@ .-------------------------. .-------------------------. @@@@ | ЦП — буфер передачи 0 | | ЦП — буфер передачи 1 | @@@@ '-------------------------' /'----------------- --------' @@@@ указатель X swap @@@@ .-------------------------./ .- ------------------------. @@@@ | ЦП — буфер передачи 1 | | ЦП — буфер передачи 0 | @@@@ '-------------------------' '------------------ -------' @@!! /| PCIe | !!!! | копировать |/ !!++ .------------------------------------------ -------------. ++++ | GPU 1 — буфер передачи 1 | ++++ '--------------------------------------------- ----------' ++++ /| выборочный | ++++ | копия в VRAM |/ ++++ .--------------------------------------- --------------------------. ++++ | графический процессор 1 | ++++ | LBM Домен 1 | ++++ '--------------------------------------------- --------------------' ++## | #### барьер синхронизации домена #### | ##|| -------------------------------------------------- -----------> время ||
архитектура связи домена (подробно)
++ .----------------------------------------------- ------------------. ++++ | графический процессор 0 | ++++ | LBM Домен 0 | ++++ '--------------------------------------------- --------------------' ++++ | селективное в- /| | селективное в- /| | селективное в- /| ++++ |/ Копия VRAM (X) | |/ Копия VRAM (Y) | |/ Копия VRAM (Z) | ++++ .---------------------.---------------------.- --------------------. ++++ | Графический процессор 0 – ТБ 0X+ | графический процессор 0 – ТБ 0Y+ | графический процессор 0 – ТБ 0Z+ | ++++ | графический процессор 0 - ТБ 0X- | ГПУ 0 - ТБ 0Y- | ГПУ 0 - ТБ 0Z- | ++++ '---------------------'---------------------'- --------------------' ++!! | PCIe /| | PCIe /| | PCIe /| !!!! |/копировать | |/копировать | |/копировать | !!@@ .---------. .---------.---------. .---------.---------. .---------. @@@@ | ЦП 0X+ | | ЦП 1X- | ЦП 0Y+ | | ЦП 3Y- | ЦП 0Z+ | | ЦП 5Z- | @@@@ | ЦП 0X- | | ЦП 2X+ | ЦП 0Y- | | Процессор 4 года+ | ЦП 0Z- | | ЦП 6Z+ | @@@@ '--------- /---------'--------- /---------'----- ---- /---------' @@@@ указатель X поменять (X) указатель X поменять (Y) указатель X поменять (Z) @@@@ .-------- -/ ---------.---------/ ---------.---------/ ---------. @@@@ | ЦП 1X- | | ЦП 0X+ | ЦП 3Y- | | ЦП 0Y+ | ЦП 5Z- | | ЦП 0Z+ | @@@@ | ЦП 2X+ | | ЦП 0X- | Процессор 4 года+ | | ЦП 0Y- | ЦП 6Z+ | | ЦП 0Z- | @@@@ '---------' '---------'---------' '---------'--- ------' '---------' @@!! /| PCIe | /| PCIe | /| PCIe | !!!! | копировать |/ | копировать |/ | копировать |/ !!++ .----..----------------------------------- -..--------------------. ++++ | графический процессор 1 — ТБ 1X- || ГПУ 3 - ТБ 3Y- || ГПУ 5 - ТБ 5Z- | ++++ :===================::====================:: ====================: ++++ | Графический процессор 2 – ТБ 2X+ || GPU 4 – ТБ 4 года+ || Графический процессор 6 – ТБ 6Z+ | ++++ '--------------------''---------------------'' --------------------' ++++ /| селективное в- | /| селективное в- | /| селективное в- | ++++ | Копия VRAM (X) |/ | Копия VRAM (Y) |/ | Копия VRAM (Z) |/ ++++ .----..---------------- -----..--------------------. ++++ | графический процессор 1 || графический процессор 3 || графический процессор 5 | ++++ | LBM Домен 1 || LBM Домен 3 || LBM Домен 5 | ++++ :===================::====================:: ====================: ++++ | графический процессор 2 || графический процессор 4 || графический процессор 6 | ++++ | LBM Домен 2 || LBM Домен 4 || LBM Домен 6 | ++++ '--------------------''---------------------'' --------------------' ++## | | | #### | барьеры синхронизации доменов | #### | | | ##|| -------------------------------------------------- -----------> время ||
тесты с одним графическим процессором/процессором
тесты с несколькими графическими процессорами
Подсетка D3Q7 для тепловых DDF
потоковая передача на месте с помощью Esoteric-Pull для термических DDF-файлов
дополнительное сжатие FP16S или FP16C для термических DDF со сдвигом DDF
модель объема жидкости
полностью аналитический PLIC для эффективного расчета кривизны
улучшенное сохранение массы
сверхэффективная реализация всего с 4 ядрами в дополнение к stream_collide()
дополнительный расчет сил со стороны жидкости на твердых границах
стационарные границы возврата в среднюю сетку (стационарные твердые границы)
перемещение границ отскока в середине сетки (перемещение сплошных границ)
границы равновесия (неотражающий приток/отток)
температурные границы (фиксированная температура)
типы границ
глобальная сила на объем (принуждение Го), может быть изменена «на лету»
локальная сила на объем (силовое поле)
современная реализация LBM со свободной поверхностью (FSLM):
тепловой LBM для моделирования тепловой конвекции
Модель LES подсеточной турбулентности Смагоринского-Лилли для обеспечения стабильности моделирования с очень большим числом Рейнольдса.
Π αβ знак равно Σ я е яα е iβ ( ж я - ж я эквально-сдвинутый )
Q = Σ αβ Π αβ 2
______________________
τ знак равно ½ (τ 0 + √ τ 0 2 + (16√2) ∕ ( 3π 2 ) √Q ∕ ρ )
частицы с методом погруженных границ (пассивный или двусторонний, только с одним графическим процессором)
FluidX3D может выполнять моделирование настолько большого размера, что сохранение объемных данных для последующего рендеринга становится неуправляемым (например, 120 ГБ для одного кадра, сотни терабайт для видео).
вместо этого FluidX3D позволяет визуализировать необработанные данные моделирования непосредственно во VRAM, поэтому не нужно экспортировать большие объемные файлы на жесткий диск (см. мой технический доклад).
рендеринг настолько быстрый, что работает в интерактивном режиме в реальном времени как для растеризации, так и для трассировки лучей.
растеризация и трассировка лучей выполняются в OpenCL и работают на всех графических процессорах, даже без ядер трассировки лучей RTX/DXR или вообще без какого-либо оборудования для рендеринга (например, A100, MI200, ...)
если монитор недоступен (например, на удаленном сервере Linux), существует режим рендеринга ASCII для интерактивной визуализации моделирования в терминале (даже в WSL и/или через SSH).
рендеринг полностью распараллелен на нескольких графических процессорах посредством плавной растеризации декомпозиции домена.
при отключенном режиме интерактивной графики разрешение изображения может быть настолько большим, насколько позволяет VRAM (4K/8K/16K и выше)
(интерактивные) режимы визуализации:
пометить каркас/твердую поверхность (и векторы силы на твердые ячейки или поверхностное давление, если используется расширение)
Поле скоростей (с режимом среза)
оптимизация (с режимом среза)
Изоповерхность Q-критерия, окрашенная в цвет скорости
растеризованная свободная поверхность с маршевыми кубами
Свободная поверхность с трассировкой лучей, быстрым обходом сетки лучей и марширующими кубами, 1–4 луча на пиксель или 1–10 лучей на пиксель.
FluidX3D написан на OpenCL 1.2, поэтому работает на любом оборудовании всех производителей (Nvidia, AMD, Intel, ...):
самые быстрые в мире графические процессоры для центров обработки данных: MI300X, H100 (NVL), A100, MI200, MI100, V100(S), GPU Max 1100, ...
игровые графические процессоры (настольные компьютеры/ноутбуки): Nvidia GeForce, AMD Radeon, Intel Arc
Графические процессоры для профессиональных/рабочих станций: Nvidia Quadro, AMD Radeon Pro / FirePro, Intel Arc Pro
интегрированные графические процессоры
Процессоры (требуется установка Intel CPU Runtime для OpenCL)
Intel Xeon Phi (требуется установка среды выполнения Intel CPU для OpenCL)
графические процессоры ARM для смартфонов
Собственная реализация нескольких графических процессоров от разных производителей
использует связь PCIe, поэтому SLI/Crossfire/NVLink/InfinityFabric не требуется
одноузловое распараллеливание, поэтому установка MPI не требуется
Графические процессоры даже не обязательно должны быть от одного и того же производителя, но рекомендуется использовать одинаковый объем памяти и пропускную способность.
работает в Windows и Linux с C++17, с ограниченной поддержкой также для macOS и Android
поддерживает импорт и вокселизацию треугольных сеток из двоичных файлов .stl
с быстрой вокселизацией на графическом процессоре.
поддерживает экспорт объемных данных в виде двоичных файлов .vtk
поддерживает экспорт треугольных сеток в виде двоичных файлов .vtk
поддерживает экспорт визуализированных изображений в файлы .png
/ .qoi
/ .bmp
; кодирование выполняется параллельно на процессоре, в то время как моделирование на графическом процессоре может продолжаться без задержки
Вот тесты производительности на различном оборудовании в MLUP/с или сколько миллионов ячеек решетки обновляются в секунду. Для теста используются настройки D3Q19 SRT без включенных расширений (только LBM с неявными границами отскока в середине сетки), а установка представляет собой пустую кубическую коробку достаточного размера (обычно 256³). Без расширений для одной ячейки решетки требуется:
объем памяти 93 (FP32/FP32) или 55 (FP32/FP16) байт.
пропускная способность памяти 153 (FP32/FP32) или 77 (FP32/FP16) байт на такт
363 (FP32/FP32) или 406 (FP32/FP16S) или 1275 (FP32/FP16C) флопс на такт (операции FP32+INT32 считаются вместе)
Как следствие, арифметическая интенсивность этой реализации составляет 2,37 (FP32/FP32) или 5,27 (FP32/FP16S) или 16,56 (FP32/FP16C) флоп/байт. Таким образом, производительность ограничена только пропускной способностью памяти. В таблице в трех левых столбцах показаны характеристики оборудования, указанные в технических характеристиках (теоретическая пиковая вычислительная производительность FP32, объем памяти, теоретическая пиковая пропускная способность памяти). В трех правых столбцах показаны измеренные характеристики FluidX3D для настроек точности с плавающей запятой FP32/FP32, FP32/FP16S, FP32/FP16C, при этом (эффективность модели линии крыши) в круглых скобках указывается, какой процент теоретической пиковой пропускной способности памяти используется. .
Если вашего графического процессора/процессора еще нет в списке, вы можете сообщить о своих тестах здесь.