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