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