perf: параллельный расчёт физики через OpenMP#40
Conversation
|
Я бы использовал OneAPI TBB, он быстрее и стабильнее, хоть и новая зависимость, но хорошую вычислительную систему без OneAPI сложно представить. |
|
perf: replace OpenMP with Intel oneAPI TBB Перешел на TBB. |
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>
|
Я сам, не понял в чем проблема потому решил оботиться к claude. |
|
Мне интересно как будет переделана система хранения атомов, именно в чем идея заключается? |
|
Я думаю упоковать позиции и заряд в один массив, также нужно убрать vector<vector<uint32_t>> чтобы вместо множества массивов создать один. И тогда в тиории прирост будет x4. Не так уж и много по этому и спрашиваю, стоит ли оно того? |
Добавил параллельное выполнение физики через OpenMP. симуляция теперь
использует все ядра процессора.
Что изменено:
расчёт сил между атомами (ForceField.cpp)
построение списка соседей (NeighborList.cpp)
шаг интегратора (VerletScheme.cpp)
подключение OpenMP в сборке (CMakeLists.txt)
Главная сложность была в том, что расчёт сил использует третий закон
Ньютона — каждая пара атомов пишет силу сразу в два места одновременно.
Поэтому я решил создать буфер на каждый поток дабы не было гонки данных.
В конце всё суммируеться
Ожидаемое ускорение: 4–8× на 8-ядерном процессоре при 50k+ атомов.(Сам я не проверял)