-
FIXED(N, K): Использует
intN_tдля представления чисел с фиксированной точкой, где:Nопределяет количество битов (8, 16, 32, 64).Kзадает количество бит для дробной части.
-
FAST_FIXED(N, K): Аналогично FIXED(N, K), но вместо
intN_tиспользуетсяint_fastN_t, что может быть быстрее на некоторых архитектурах.
- При компиляции программы заранее создаются версии симуляции для различных размеров поля.
- Если размеры поля, указанные во время выполнения, совпадают с предкомпилированными, используются статические массивы (
std::array). - Для остальных размеров поля применяются динамические массивы (
std::vector).
- FluidSim: Новый шаблонный класс для симуляции воды.
- Параметры шаблона:
- Тип данных для плотности (p-type).
- Тип данных для скорости (v-type).
- Тип данных для потока скорости (v-flow-type).
- Размер поля (опционально).
- Параметры шаблона:
- --p-type: Тип данных для плотности.
- --v-type: Тип данных для скорости.
- --v-flow-type: Тип данных для потока скорости.
- --field-path: Путь к файлу с полем для инициализации симуляции.
- Во время выполнения программы при нажатии CTRL-C:
- Текущие данные симуляции сохраняются в файл.
- Путь к файлу сохраняемого состояния выводится в консоль.
- Продолжается работа симуляции.
- Для загрузки состояния симуляции:
- Укажите путь к сохраненному состоянию с помощью аргумента командной строки --load-path.
-
Для задания доступных типов необходимо использовать флаг компиляции -DTYPES:
-DTYPES=FIXED(64,10), DOUBLE, FLOAT, FAST_FIXED(32,16), ...(Важно: без пробелов после запятой внутри скобок).
-
Для задания статических размеров используйте флаг компиляции -DSIZES:
-DSIZES=S(34,86), S(64,128), ...(Важно: без пробелов после запятой внутри скобок).
cmake -S . \
-B build \
-DTYPES="FAST_FIXED(32,16), FIXED(64,8)" \
-DSIZES="S(10,10), S(34,86)"
cmake --build build./build/Fluid --p-type="FAST_FIXED(32,16)" \
--v-type="FAST_FIXED(32,16)" \
--v-flow-type="FAST_FIXED(32,16)" \
--field-path=base_field./build/Fluid --load-path=saved_state- Нажмите CTRL-C во время работы программы.
- Пример вывода:
Simulation saved to save_1545
- Добавлена поддержка многопоточности.
- Количество потоков задается через аргумент командной строки --num-threads:
- Если аргумент не указан, программа запускается в одном потоке.
- Пример запуска:
./build/Fluid --p-type="FAST_FIXED(32,16)" \ --v-type="FAST_FIXED(32,16)" \ --v-flow-type="FAST_FIXED(32,16)" \ --field-path=base_field \ --num-threads=10
- Использование типа FAST_FIXED:
Улучшена производительность операций за счет замены типов данных на
FAST_FIXED. - Ускорение поиска индекса в
deltas: Реализована более быстрая структура данных для ускорения поиска. - Оптимизация обмена ячеек:
В функции
swap_withвыполняется обмен сразу двух ячеек в один этап, вместо использования дополнительных переменных в два этапа.
- Выполнено сравнение времени выполнения кода для 1000 тиков поля из условия до и после оптимизаций в однопоточном режиме.

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

./build/Fluid --p-type="FAST_FIXED(32,16)" \
--v-type="FAST_FIXED(32,16)" \
--v-flow-type="FAST_FIXED(32,16)" \
--field-path=test_field \
--num-threads=8