Как стать автором
Обновить

Комментарии 4

Отличная статья!

Спасибо за ссылку на космиков ) кстати, в них уже можно поиграть

Динамическое формирование связей и валентности — одна из самых интересных задач, с которыми сталкиваешься в GPGPU, особенно интересно найти способ обеспечить максимальную производительность

По опыту — все упирается именно в проверку «нет ли уже связи с этой частицей» — цикл который сверяет id'шники в разы снижает FPS по сравнению с обычным particles collider'ом

Лучшее по производительности решение видел в Jelly in the Sky (которые танки на видеокарте) — путем хардкода максимального количества связей и организации проверки на «уже есть связь» развертыванием цикла в if (id != conn.x && id != conn.y && id != conn.z &&… )

конечно, ломается вся красота — но очень круто оптимизирует

второй момент — это блокировки атомов для совершения операции, это дорого в коллайдере, без этого почти можно обойтись, если всегда формировать связь ОТ атома с меньшим id К атому с большим id (исключаем A->B B->A гонку), и отдельно атомарно счетчик валентностей обрабатывать

ну и, формирование связей чаще всего выгодно обрабатывать реже чем каждый кадр — раз в N шагов симуляции
Отличная статья!

спасибо

По опыту — все упирается именно в проверку «нет ли уже связи с этой частицей»

В моих задачах пока достаточно решения с массивом parents, связываем две частицы:
parents[i] = j;
parents[j] = i;

Этого хватает, если у одного из связанных атомов не больше двух связей. В оксидных системах это выполняется. При попытке связывания выполняем проверку
if ((parents[i] != j) && (parents[j] != i))


второй момент — это блокировки атомов для совершения операции, это дорого в коллайдере, без этого почти можно обойтись, если всегда формировать связь ОТ атома с меньшим id К атому с большим id (исключаем A->B B->A гонку), и отдельно атомарно счетчик валентностей обрабатывать

не совсем понял, о чём речь

ну и, формирование связей чаще всего выгодно обрабатывать реже чем каждый кадр — раз в N шагов симуляции

У меня нет визуализации и вряд ли будет.
У меня нет визуализации и вряд ли будет.


я имею ввиду под кадрами — шаги физической симуляции, а не рендер
можно сделать, да. Но нужно какое-то физическое обоснование. Сравнивать шаг моделирования с какими-то характерными частотами
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории