Skip to content

perf: параллельный расчёт физики через OpenMP#40

Open
kranks-uga wants to merge 4 commits into
ElectroZybr:mainfrom
kranks-uga:perf/openmp-physics
Open

perf: параллельный расчёт физики через OpenMP#40
kranks-uga wants to merge 4 commits into
ElectroZybr:mainfrom
kranks-uga:perf/openmp-physics

Conversation

@kranks-uga
Copy link
Copy Markdown

Добавил параллельное выполнение физики через OpenMP. симуляция теперь
использует все ядра процессора.

Что изменено:
расчёт сил между атомами (ForceField.cpp)
построение списка соседей (NeighborList.cpp)
шаг интегратора (VerletScheme.cpp)
подключение OpenMP в сборке (CMakeLists.txt)

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

Ожидаемое ускорение: 4–8× на 8-ядерном процессоре при 50k+ атомов.(Сам я не проверял)

@applicate2628
Copy link
Copy Markdown

Я бы использовал OneAPI TBB, он быстрее и стабильнее, хоть и новая зависимость, но хорошую вычислительную систему без OneAPI сложно представить.

@kranks-uga
Copy link
Copy Markdown
Author

perf: replace OpenMP with Intel oneAPI TBB

Перешел на TBB.
Адаптировал под новый World из main

@ElectroZybr
Copy link
Copy Markdown
Owner

image Судя по тестам и симуляции, прирост к производительости x2 при 100% загрузке проца. Видимо довольно большой оверхед на распаралливание, или боттлнек по памяти. На маленьких сценах оверхед хорошо видно, дальше немного лучше. А вот интеграция похоже перестала векторизоваться, только паралель

kranks-uga and others added 2 commits May 31, 2026 16:23
Merged main into perf/openmp-physics to resolve broken build caused by
partial World architecture adoption in the TBB commit. TBB parallelization
and vectorization fixes (ivdep + __restrict__ in lambda captures) preserved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@kranks-uga
Copy link
Copy Markdown
Author

kranks-uga commented May 31, 2026

Я сам, не понял в чем проблема потому решил оботиться к claude.
Мы с ним покумекали и пришли к вываду что это потолок памяти, она просто не может пропускать такой обем данных у меня x3D и у меня тоже только x2 к скорости. И выходит что скорость L3 не хватает на все потоки. Я могу переделать систему хранения атамов, но это будет слишком большое изменение так как оно затронет вообще все. А так если автор не против, то я сделаю.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants