Прямой решатель на Apple Accelerate: 120 000 степеней свободы за 3,8 с вместо 87
Десктопная сборка теперь факторизует матрицу жёсткости через разреженное разложение Холецкого из Apple Accelerate. На задаче в 120 000 степеней свободы это 3,8 с против 87,2 с у прежнего прямого решателя, а порог прямого пути на macOS поднят со 120 до 300 тысяч степеней свободы.
Прямой решатель — честный способ решить контактную задачу: он даёт точный ответ, не буксует на плохо обусловленных уравнениях связи и не возвращает молча не до конца сошедшееся решение. Его беда всегда была в цене — время факторизации и память растут заметно быстрее самой модели. В десктопной сборке мы отдали эту факторизацию разреженному Холецкому из Apple Accelerate, и цена упала в 20 с лишним раз.
Что изменилось
Нативное ядро извлекает нижний треугольник матрицы жёсткости в формате CSC, выполняет символический анализ с переупорядочением AMD и факторизует через Accelerate. На Apple Silicon это раскладывает плотные суперузлы по производительным ядрам и матричным ускорителям — а именно они и съедают основное время разложения Холецкого.
Сравнение с прежним прямым решателем (Eigen SimplicialLDLT) на трёхмерных гексаэдральных моделях балок и сборок, одна машина, одни и те же матрицы:
- 2 940 ст. свободы
- 41,2 мс → 2,9 мс
- 9 720 ст. свободы
- 337 мс → 18,6 мс
- 54 000 ст. свободы
- 24,8 с → 0,95 с
- 120 000 ст. свободы
- 87,2 с → 3,8 с
- Ускорение
- 14× – 26×
- Совпадение с эталоном
- 1e-12
Поля перемещений совпадают со старым решателем до 1e-12 — машинный ноль для такой задачи. В постановке не изменилось ничего, поменялся только бэкенд факторизации.
Потолок стал выше
Раз факторизация подешевела, поднялся и порог, до которого продукт вообще выбирает прямой путь: на macOS со 120 000 до 300 000 степеней свободы. Ниже этой черты вы получаете точное решение, за сходимостью которого не надо следить. Выше — решатель, как и раньше, уходит на итерационный путь.
Каскад и почему мы иногда отказываемся от многосеточного метода
Решатель устроен как каскад, а не как один метод: прямая разреженная факторизация для малых и средних систем, алгебраический многосеточный предобуславливатель (AMG) для больших чистых сеток, метод сопряжённых градиентов с неполным Холецким для плохо обусловленных контактных систем и базовый CG в самом низу. Главный урок августа: выбор метода важнее его настройки.
На сборке с точной редукцией уравнений связи — 74 262 редуцированные степени свободы — AMG не просто медленно сходился. Невязка росла: 4,06 на нулевой итерации, 34,4 к 480-й, при пустом графике сходимости в интерфейсе и без ответа в конце. Тот же расчёт прямым методом: около 3 с, сошёлся. Причина структурная — после редукции связей ядро жёстких смещений, на которое опирается многосеточный метод, относится к нередуцированному телу, а не к той матрице, которую видит сглаживатель.
Это не приговор многосеточным методам. На чистой сетке первого порядка без уравнений связи тот же AMG сходится за 8 итераций на 6 миллионах степеней свободы. Поэтому решением стал не подбор предобуславливателя, а явное правило: если модель использует точную редукцию MPC, каскад пропускает AMG вовсе, и отдельный тест-страж роняет сборку, если правило кто-нибудь снимет. Плюс жёсткий обрыв: если после 15 многосеточных циклов невязка больше удвоенной стартовой, решатель прекращает работу, а не тратит минуты на расходящийся счёт.
Что это даёт на реальной модели
Рама из 88 тел, связанных 1 106 контактными парами (3 318 уравнений связи), теперь считается как единая конструкция: максимальный прогиб под собственным весом 0,126–0,143 мм. До починки сборки связей та же модель давала прогибы в десятки метров, а 87 тел из 88 разлетались в стороны.
Где остаются пределы
Честные числа, потому что форма кривой важнее любого отдельного замера: объём работы факторизации растёт примерно как квадрат размера задачи, а заполнение множителя — быстрее самой матрицы. На тестовой виртуальной машине с Linux модель на 121 680 степеней свободы занимает 87,2 с и 1,17 ГБ; на 242 760 степенях свободы это уже около 14 минут и 3,8 ГБ. Дальше прямой путь перестаёт быть интерактивным, а за миллионом степеней свободы на сборках с точными связями хорошего маршрута у нас пока нет вообще: ни один из проверенных прототипов — ни deflated PCG, ни формулировка через дополнение Шура — на системе в 1,1 млн степеней свободы не сошёлся. Этот пробел мы пока не закрыли и предпочитаем сказать об этом прямо, а не привести число, которое не воспроизводится.
Цифры выше сняты на Apple Silicon для пути Accelerate и на восьмиядерной виртуальной машине с Linux для исследования масштабирования. Это разные стенды, и мы не смешиваем их в одной таблице.