Как гравитационная проблема n-тела может быть решена численно параллельно?
Возможен ли компромисс между точностью и сложностью?
Как точность влияет на качество модели?
Как гравитационная проблема n-тела может быть решена численно параллельно?
Возможен ли компромисс между точностью и сложностью?
Как точность влияет на качество модели?
Ответы:
Существует большое разнообразие алгоритмов; Barnes Hut - это популярный метод , а быстрый мультипольный метод - гораздо более сложная альтернатива O ( N ) .O (NжурналN) О ( N)
Оба метода используют древовидную структуру данных, где узлы по существу взаимодействуют только со своими ближайшими соседями на каждом уровне дерева; Вы можете подумать о том, чтобы разделить дерево между наборами процессов на достаточной глубине, а затем заставить их взаимодействовать только на самых высоких уровнях.
Вы можете найти недавнюю статью, посвященную обсуждению FMM на машинах с петаскалей, здесь .
источник
Посмотрите на быстрый мультипольный метод . Это очень масштабируемый и . Это позволяет торговать между точностью и стоимостью. Вот пример, где он запускается при 42 Tflops в кластере GPU .O ( n )
источник
В качестве альтернативного источника, вы также можете взглянуть на Ewald-подобные методы на основе меша. Генезис методов «сетки частиц» (таких как PPPM и сглаженная сетка частиц Эвальда) заключается в моделировании галактик для астрофизики; связь с обвинениями была непреднамеренным побочным эффектом (который как раз случайно обгонял первоначальное использование).
В последнее время появилась также некоторая литература по методам многоуровневого суммирования, которая по духу близка к быстрым мультипольным методам и Barnes-Hut, но может предложить преимущества в различных обстоятельствах (более общая и гибкая геометрия, некоторое повышение эффективности и т. Д.).
источник
Что касается классической гравитационной задачи n-тела , я думаю, что следующие две статьи хорошо справляются с обсуждением интуиции параллельной реализации для этапа оценки силы. Хотя в статьях обсуждается реализация GPU, они хорошо справляются с обсуждением параллелизма и предоставляют подробности алгоритмов:
В этой статье Nyland, Harris и Prins представлен прямой алгоритм n-body в CUDA для графических процессоров.
В этой другой статье Йокоты и Барбы подробно обсуждается древовидный код и быстрый многополюсный алгоритм также в контексте вычислений на GPU.
Ваши вопросы о точности численного моделирования n-тела немного сложнее, и есть так много важных деталей, что ответ может породить несколько книг. Я думаю, что лучшее, что можно сделать, это дать вам пару ссылок на книги. Я предлагаю:
Гравитационное моделирование N-тела Сверре Дж. Аарсет
Компьютерное моделирование с использованием частиц Хокни и Иствуда. (Извините, нет версии PDF)
источник
Если вам нужен простой подход к реализации, который не является оптимальным в асимптотическом смысле, вы можете рассмотреть возможность использования коммуникационных операций в целом. Поскольку каждое из N-тел должно знать гравитационное влияние других тел, важно, чтобы каждый процессор знал весь набор данных. Это то, что делают все сборы. Есть хорошая книга Майкла Дж. Куинна (2004), посвященная параллельному программированию на C с использованием MPI и OPENMP, в которой обсуждается именно эта тема на стр. 82. Возможно, стоит взглянуть на нее, чтобы начать.
источник
Посмотрите Google Scholar и найдите ссылки на HACC и GADGET, среди других кодов.
источник