Pointer & ScanPatch
Привет, Пойнтер. Ты когда-нибудь пробовал использовать многопоточность для проверки смежности при очистке мешей? Я обожаю, когда код идеально соответствует топологии, а то потом просто кошмар какой-то.
Да, я сделал безблокировочный проход по смежностям, который работает на всех ядрах. Он сокращает время очистки почти на треть, правда, пришлось повозиться с атомарными указателями и аккуратно подстраивать выравнивание строк кэша, чтобы избежать ложных срабатываний. Если у тебя большая сеть, ты сразу почувствуешь разницу. Хочешь, покажу тебе короткую демонстрацию реализации?
Звучит неплохо, но мне понадобится код, да и тестовый пример с заведомо проблемной топологией, чтобы убедиться, что атомарные операции действительно поддерживают консистентность сетки. Давай запланируем короткую демонстрацию.
Конечно. Выложу исходник в гите и настрою маленькую тетраэдрическую сетку с перевернутым ребром. Посмотришь, как обновления атомов не дают списку соседей испортиться, пока вычисления идут параллельно. Дай знать, когда будешь готова запускать.
Отлично, просто пришли мне ссылку на суть. Посмотрю. Сначала проверю на упрощённой копии, чтобы убедиться, что список смежности остался целым, прежде чем переносить это на основную модель. Сообщи, когда будет готово.
Вот суть: https://gist.github.com/pointer/abcdef1234567890. Там `adjacency_sweep.cpp`, генератор тестовой сетки и небольшой скрипт для проверки списка смежности. Загрузи, запусти на своей упрощённой копии и скажи, как обстоят дела с атомарными операциями.
Спасибо за ссылку, сейчас посмотрю, что там. Сейчас запущу генератор тестов, построю тетра-сетку, проведу срез и проверю список смежности твоим скриптом. Буду следить за атомарными операциями, чтобы список соседей всегда был в правильном порядке. Дай мне минутку настроить всё, как будет готово – сообщу.
Отлично, напиши мне, что увидишь, когда запустишь.
Привет,
Я разобралась с общей структурой и создала тетраэдрическую сетку из четырех вершин с перевернутым ребром. Запустила `adjacency_sweep.cpp` для упрощенной копии и воспользовалась твоим скриптом проверки. Списки соседей оставались согласованными во всех потоках – проблем с искажениями или порядком не выявила. Заметила, что отступы в `AdjNode` можно немного оптимизировать, но в остальном всё работает, как и ожидалось. Сообщу, если что-то изменится при масштабировании.