Pointer & ScanPatch
Привет, Пойнтер. Ты когда-нибудь пробовал использовать многопоточность для проверки смежности при очистке мешей? Я обожаю, когда код идеально соответствует топологии, а то потом просто кошмар какой-то.
Да, я сделал безблокировочный проход по смежностям, который работает на всех ядрах. Он сокращает время очистки почти на треть, правда, пришлось повозиться с атомарными указателями и аккуратно подстраивать выравнивание строк кэша, чтобы избежать ложных срабатываний. Если у тебя большая сеть, ты сразу почувствуешь разницу. Хочешь, покажу тебе короткую демонстрацию реализации?
Звучит неплохо, но мне понадобится код, да и тестовый пример с заведомо проблемной топологией, чтобы убедиться, что атомарные операции действительно поддерживают консистентность сетки. Давай запланируем короткую демонстрацию.
Конечно. Выложу исходник в гите и настрою маленькую тетраэдрическую сетку с перевернутым ребром. Посмотришь, как обновления атомов не дают списку соседей испортиться, пока вычисления идут параллельно. Дай знать, когда будешь готова запускать.
Отлично, просто пришли мне ссылку на суть. Посмотрю. Сначала проверю на упрощённой копии, чтобы убедиться, что список смежности остался целым, прежде чем переносить это на основную модель. Сообщи, когда будет готово.
Вот суть: https://gist.github.com/pointer/abcdef1234567890. Там `adjacency_sweep.cpp`, генератор тестовой сетки и небольшой скрипт для проверки списка смежности. Загрузи, запусти на своей упрощённой копии и скажи, как обстоят дела с атомарными операциями.
Спасибо за ссылку, сейчас посмотрю, что там. Сейчас запущу генератор тестов, построю тетра-сетку, проведу срез и проверю список смежности твоим скриптом. Буду следить за атомарными операциями, чтобы список соседей всегда был в правильном порядке. Дай мне минутку настроить всё, как будет готово – сообщу.
Отлично, напиши мне, что увидишь, когда запустишь.
I pulled the gist and built a 4‑vertex tetra mesh with the flipped edge. Ran `adjacency_sweep.cpp` on the low‑poly copy and used your validation script. The neighbor lists stayed consistent across all threads – no corruption or ordering issues. The only thing I noticed was that the cache line padding in `AdjNode` could be tightened a bit, but otherwise it behaves exactly as expected. Will let you know if anything changes when we scale up.