Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/219: Рейтинг темы: голосов - 219, средняя оценка - 4.60
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57

У меня заработал гидродинамический решатель на видеокарте

25.07.2021, 14:02. Показов 48248. Ответов 57
Метки нет (Все метки)

Всем привет!
Я пишу свою гидродинамическую программу на С/С++, cuda C с 2009 года.
Вот ссылка на мою программу
https://github.com/kirill7785/AliceFlow

В эти выходные используя библиотеку AMGCL разработчика ddemidov из Казани
https://github.com/ddemidov/amgcl

Я смог добиться расчёта на сетках из 700 тысяч неизвестных за один час расчётного времени.

До этого, при расчётах на центральном процессоре, я фактически был ограничен сетками в 200 тысяч неизвестных по времени гидродинамического расчёта.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  
2
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2021, 14:02
Ответы с готовыми решениями:

Проблема с драйверами на видеокарте RX 580 4gb или в самой видеокарте
Добрый день. Столкнулся с такой проблемой. Приобрёл видеокарту на б/у рынке. Пломбы заводские на месте, так что не думаю что бы...

Решатель Sudoku?
Меня интересует такая штука, как код способный решить Sudoku но я просто не знаю что для этого нужно. Писал через StringGrid. Вот я хочу...

Решатель примеров
Пользователь вводит арифметический пример: числа, знаки операций, скобки – и получает ответ. Очень красиво и сложно алгоритмически. ...

57
фрилансер
 Аватар для Алексей1153
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
30.08.2021, 10:24
kirill7785, я тут ещё побурчу ) Пока вчера лазил по коду, видел такое
C++
1
2
3
B[0][0]=1.0; B[0][1]=xP; B[0][2]=xP2;
B[1][0]=1.0; B[1][1]=xE; B[1][2]=xE2;
B[2][0]=1.0; B[2][1]=xEE; B[2][2]=xEE2;
где B - это указатель на указатель, который является частью массива, который и вовсе указатель на указатель на указатель

C++
1
2
3
4
5
6
    Real*** B = new Real**[inumcore];
    for (int tid = 0; tid < inumcore; ++tid) {
        B[tid] = new Real * [3];
        for (int l = 0; l < 3; l++) B[tid][l] = new Real[3];
        for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) B[tid][i][j] = 0.0;
    }
я не вникал, производится ли обращение к B в циклах (то есть интенсивно), и если да - то лучше такой многомерный массив сделать не в виде списков указателей, а в виде одного участка памяти (например, в одномерном векторе), а индексацию сделать в виде пересчёта трёхмерного индекса в индекс вектора. И оформить в виде класса

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

Добавлено через 46 секунд
но если обращение к этому объекту редкое, то можно и не переделывать. Хотя и не очень красиво выглядит
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
11.09.2021, 15:25  [ТС]
По поводу В - внимательно смотрите код. В функцию передается B[tid] где tid это id thread. Соответственно внутри функции обращение к B[][]. Надо смотреть кто кого вызывал и как передавал данные.

По поводу входного файла: разделитель целой и дробной части в файле meshin должен быть только точка.

Если прога пишет что симметричность матрицы для поправки давления нарушена то причина этого некорректный файл meshin, нужно его проверять. Файл meshin создается граф интерфейсом на Delphi DavisTest, но на гите версия еще не выложена свежая для DavisTest. Также файл meshin создаётся программой AliceMesh\AliceFlow v.0.48, но свежая версия также пока не выложена.
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
26.11.2021, 20:39  [ТС]
19-20 ноября 2021 реализовал блочные сетки для расчётов теплопередачи в твердом теле. Число блоков не ограничено, но уровень вложенности только 1. Т.е. нельзя создать блок сетки в основном блоке, а в него вложится еще (как бы блок в блоке).
По точности метод с блоками не уступает структурированной сетке, но имеет место быть сильная экономия числа ячеек сетки. По скорости расчёта с блоками не всегда всё однозначно иногда наблюдается ускорение расчёта а иногда нет, т.к. несмотря на сокращение числа ячеек сетки появляются накладные расходы на сшитие разных блоков сетки. Еще одним ограничением является то что два блока не могут иметь общей границы и должны контачить только через ячейки кабинета -основного блока расчётной области в котором все и живет.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  

0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
28.11.2021, 19:29  [ТС]
Расчёт радиатора 2012 года в программе AliceFlow. Расчёт в 3D.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  

0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
08.12.2021, 07:26  [ТС]
По поводу блочной сетки. На границе вложенного блока с основной сеткой организовано сшитие двух разных расчётных областей так чтобы они составляли единую расчетную область. Из маленьких клеток внутри блока прописана в матрице СЛАУ диффузионная связь с внешней расчетной сеткой кабинета. А из большой ячейки кабинета прописано множество связей к мелким ячейкам блока (один ко многим). Диффузионная связь. Диффузионные связи вносятся прямо в матрицу связи (матрицу СЛАУ системы). Связь один ко многим организуется в виде длинной строки матрицы с большим числом коэффициентов соседей. Несмотря на сокращение количества ячеек сетки есть гипотеза что матрица СЛАУ полученная на блочной сетке хуже обусловлена. Это гипотеза пока.
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
08.12.2021, 08:51  [ТС]
Ещё один радиатор 2012 года, рассчитанный в программе AliceFlow. В модели такта теплоносителя (вода) используется полигон из 120 точек.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  

У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
08.12.2021, 09:04  [ТС]
Внимание знатоки вопрос. На странице 18 статьи написано что в алгебраическом многосеточном методе на основе RS огрубления (RS - Ruge and Stueben) можно запрограммировать RS алгоритм построения грубой сетки за O(n) операций. Они ссылаются на Кормена и на алгоритм bucket sort. В тоже время алгоритм RS требует для своей реализации приоритетной очереди, значит его трудоемкость для n узлов O(n*log2(n)). Я пока не могу для себя придумать как они сделали RS за O(n). Прошу высказаться по этому поводу знатоков, можно псевдокод привести или словами мысли по этому поводу написать. Я у себя в программе делал несколько версий приоритетной очереди на основе сбалансированных деревьев, на основе двоичной кучи, на основе Фиббоначчиевой кучи. Но все это типо класса O(n*log2(n)). Как же можно за O(n) ? Прошу высказаться.

Добавлено через 58 секунд
статья: Analysis and parallelization
strategies for Ruge-Stuben AMG
on many-core processors
P. Zaspel
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
18.12.2021, 14:17  [ТС]
Асемблес в асемблесе сделал. В модели 217 тысяч ячеек. Время расчёта 30с на Geforce GTX 1080 Ti.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  

У меня заработал гидродинамический решатель на видеокарте  
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
18.12.2021, 14:32  [ТС]
Длины в модели меняются от 2мкм до 60мм. Между рёбрами пластинчатого радиатора скорость воздуха 2м/с.

Добавлено через 13 минут
Тепловая мощность 60Вт. Связка радиатор воздушного охлаждения -> корпус транзистора -> кристалл транзистора.
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
18.12.2021, 20:18  [ТС]
С наступающим !!!
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  

0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
22.01.2022, 08:22  [ТС]
Обтекание куба в 3D рассчитанное в программе AliceFlow на сетке 310*100*100 контрольных объёмов.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  
0
фрилансер
 Аватар для Алексей1153
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
22.01.2022, 09:03
kirill7785, интересно, почему такая асимметрия на левом скрине. Сила тяжести ещё учитывается?
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
22.01.2022, 09:07  [ТС]
Сила тяжести не учитывается. Невесомость. Ассиметрия из-за нелинейности уравнений Навье Стокса при достаточно высоком Рейнольдсе. Там должно что то типо дорожки Кармана образовываться, но это куб не цилиндр и я считал в стационаре (900 итераций) т.к. в нестационарной постановке очень долго считать будет. Время расчёта 900 итераций 368минут на 2*intel xeon 2630v4 2.2ГГц.
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
22.01.2022, 09:16  [ТС]
Вот такие распределения ещё могут быть. Это я пересчитывал своим мультигридом.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
22.01.2022, 09:27  [ТС]
Ещё картинка зависит от схемы аппроксимации конвективного члена. Если использовать схему против потока первого порядка то получится симметричная картина обтекания. А у меня используется для конвективного члена схема WACEB она более высокого порядка. Я реализовал схему WACEB с помощью метода отложенной коррекции.
0
фрилансер
 Аватар для Алексей1153
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
22.01.2022, 09:43
kirill7785, для меня все эти термины непонятны, конечно, поскольку я не в теме Но по интуиции - некая симметрия должна быть, хотя бы в виде затухающей синусоиды

Вот последний скрин "покрасивше" выглядит

Добавлено через 1 минуту
("жёлтая" 0.9 скорость справа от куба смущает, правда. Должно же к оранжевой по бокам сверху и снизу вернуться)
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
13.02.2022, 22:40  [ТС]
777тысяч неизвестных, гидродинамика на процессоре в 8потоков без видеокарты, без
библиотеки Дениса Демидова AMGCL за 16мин. 2*intel xeon 2630v4 2.2ГГц.
Алгоритм cfd успеха скорости вычислений:
1. Для компонент скорости якоби окончание по опусканию невязки 0.1;
2. Давление сначала итерационный метод Чебышева с полиномом 128степени и BiCGStab как внешний итерационный процес.
BiCGStab предобусловлен итерационным методом Чебышева. Если за первые 1-7 итераций невязка для
поправки давления упала на 0.1 то Ок переходим к слующей итерации SIMPLE. Обычно в большинстве случаев достаточно
1 итерации BiCGStab с Чебышевым. Это быстро за 2с в среднем. А вот если за 7 итераций не сошлось опять стартуем
с нуля для поправки давления но теперь алгоритмом FGMRes(m) + amg + Якоби. Обычно нужно 20 итераций чтобы сойтись
для поправки давления до невязки 1.0e-7. Время одной итерации правда в 7раз дольше 14с в среднем. Но эти медленные
итерации с amg для поправки давления очень редки.
В итоге 16мин для 777тысячи неизвестных на 320 итераций SIMPLE алгоритма на xeon 2630v4 8потоков.
Алгоритм с amg медленней в 7 раз так у него тяжелая фаза инициализации setup phase.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
13.02.2022, 22:43  [ТС]
Вышеописанное реализовано в программе AliceFlow 3D которая на данный момент убрана с Gitа.
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
17.02.2022, 21:29  [ТС]
6 млн неизвестных за 10ч (900 итераций SIMPLE алгоритма). 8 потоков 2*intel xeon 2630v4.
Миниатюры
У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте   У меня заработал гидродинамический решатель на видеокарте  

У меня заработал гидродинамический решатель на видеокарте  
0
 Аватар для kirill7785
380 / 5 / 1
Регистрация: 25.07.2021
Сообщений: 57
17.02.2022, 21:54  [ТС]
fluid interior number 0: maxelm=5570560, maxbound=323584
iter continity x-velocity y-velocity z-velocity
0 0.29376 1 1.1511e+02 5.7838e-05 0.0000e+00 0.0000e+00 0:13:78 899
1 0.3 2 8.7442e+01 3.3417e-03 4.8931e-01 4.9456e-01 0:19: 4 898
0 0.3 3 1.2739e+01 1.0000e+00 1.0000e+00 1.0000e+00 0:14:86 897
0 0.3 4 2.6424e+02 1.0960e+00 1.1257e+00 1.1455e+00 0:14:91 896
0 0.3 5 2.7789e+01 1.7361e+00 1.9689e+00 1.7344e+00 0:13:99 895
Лог первых пяти итераций на размерности 5.5млн неизвестных. Под конец время одной итерации не 15с, а 40с.

Добавлено через 1 минуту
потребление памяти 30Гб.

Добавлено через 4 минуты
fluid interior number 0: maxelm=25294516, maxbound=1296336
iter continity x-velocity y-velocity z-velocity
6 0.00158468 1 4.1029e+03 0.0000e+00 0.0000e+00 2.9125e-07 3:44:59 899
1 0.3 2 1.1355e+02 9.9428e-02 1.0092e-01 3.6373e-05 1:32:12 898
6 0.3 3 1.6437e+03 1.0000e+00 1.0000e+00 1.0000e+00 3:43:41 897
6 0.3 4 8.9629e+01 9.5941e-01 1.0313e+00 1.5972e+00 3:48: 3 896
6 0.3 5 1.5562e+03 7.7827e-01 1.1265e+00 1.7008e+00 3:46:12 895
Лог 25млн неизвестных по вышеописанному алгоритму. Время одной итерации 3мин 48с. Т.е. в конце время одной итерации минут 10 будет примерно и на эту задачу алгоритм потратит более 6 дней.
Потребление озу 135гб.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2022, 21:54

Решатель «Судоку»
Написать решатель «Судоку». Правила игры в «Судоку» достаточно простые: «Игровое поле представляет собой квадрат размером 9×9,...

Решатель Судоку Qt C++
Здравствуйте, я новичок, дали задание разработать игру &quot;решатель судоку&quot;, задача, чтобы при наборе некоторого кол-ва чисел в разных клетках...

Решатель ЗЛП/ЗЦЛП
Всем привет. В ходе выполнения научной работы в универе встала необходимость решения задач целочисленного линейного программирования...

Решатель диф. уравнения
Всем привет. Прошу помощи или подсказки как справиться с задачей. Имеется файл с исходными параметрами (переменными). Я пробовал написать...

Решатель Find() с массивом
Добрый день! Подскажите как заставить работать решатель Find с массивами? В приложении - расчет. В первой области #1 решатель...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru