NVIDIA cuPhoton.xBeam переносить кореляцію даних інтерферометрії чорних дір на GPU

  • PublicPublic
  • 14 Nov, 2026
NVIDIA cuPhoton.xBeam переносить кореляцію даних інтерферометрії чорних дір на GPU

Щоб зняти чорну діру, потрібно розгледіти крихітний об'єкт: спостережуване кільце M87* займає лише 42 мікросекунди дуги. Телескоп горизонту подій (EHT) об'єднує 13 радіостанцій, зокрема на Гаваях, у Чилі, Іспанії, Мексиці та на Південному полюсі, методом інтерферометрії з наддовгими базами (VLBI). Кожна станція записує дві поляризації зі швидкістю до 64 Гбіт/с, і зрештою набираються петабайти даних про напругу. Кореляція пар телескопів дає видності. Це розріджені фур'є-вибірки яскравості неба вздовж треків, які прокреслює обертання Землі. За цими вибірками алгоритми реконструкції розв'язують обернену задачу. Зі змінними джерелами на кшталт Sgr A*, які змінюються просто під час сеансу спостережень, задача стає ще складнішою. В EHT наступного покоління (ngEHT) планують додати нові станції, щоб поліпшити якість зображень і відстежувати зміни в часі.

Рисунок 2. Синтетичний приклад у дусі EHT, що показує вибірку просторових частот, амплітуди видностей, «брудне» зображення та модель у формі півмісяця
Рисунок 2. Синтетичний приклад у дусі EHT, що показує вибірку просторових частот, амплітуди видностей, «брудне» зображення та модель у формі півмісяця

NVIDIA cuPhoton.xBeam - це FX-корелятор на GPU. Із сирих записів він отримує по одній комплексній видності на кожну пару станцій, частотний канал і короткий інтервал часу. Корелятор створено разом із Гарвард-Смітсонівським центром астрофізики та обсерваторією MIT Haystack. На системі NVIDIA Vera Rubin NVL72 він обробив набір даних обсягом 10 ТБ за 70 секунд. Для цього знадобилися 64 GPU і GPUDirect Storage у режимі сумісності. Це приблизно в 460 разів швидше, ніж на x86-процесорі: там знадобилося 31 992 секунди, тобто 8,89 години. Подальші калібрування та побудова зображень, наприклад тривимірні моделі газу на основі гаусового сплатингу, до cuPhoton не входять. Затримок за координатами станцій xBeam не обчислює і шляхів світла не трасує. Результати звіряються з відкритим CPU-корелятором DiFX, а на вихідні дані розраховані такі інструменти, як HOPS, rPICARD та eht-imaging.

Рисунок 4. Прискорення cuPhoton.xBeam порівняно з базовим варіантом на процесорі x86 (ліворуч) і пропускна здатність завантаження даних (праворуч) за різної кількості GPU на NVIDIA Vera Rubin NVL72
Рисунок 4. Прискорення cuPhoton.xBeam порівняно з базовим варіантом на процесорі x86 (ліворуч) і пропускна здатність завантаження даних (праворуч) за різної кількості GPU на NVIDIA Vera Rubin NVL72

Конвеєр складається з п'яти етапів. На етапі приймання кожен кадр VDIF ставиться на своє місце в часі. Поруч створюється файл .vdix, який індексує кадри за міткою часу, потоком і фізичним розташуванням, не копіюючи самих даних. Пропущені та некоректні дані при цьому явно позначаються. На етапі корекції затримки та фази інтерференції дані до FFT вирівнюються з точністю до цілого відліку, і до них застосовується обертання фази інтерференції. Залишкову дробову затримку компенсує частотно-залежна поправка фази.

Затримка береться з файлу завдання. Вона складається з геометричного полінома навколо t0, зміщення та дрейфу годинника кожної станції і зміщення годинника для кожного діапазону. У межах одного FFT затримка може бути сталою, лінійною або параболічною: це задає параметр fringe_approximation_order (0, 1 або 2). На етапі розбиття на канали для кожної станції виконується FFT. На етапі перемноження з накопиченням спектр однієї станції множиться на комплексно-спряжений спектр іншої. Некоректні вхідні дані маскуються, а результат нормується за вагами експозиції. На виході отримуємо формат DiFX SWIN або xbeam-v1.

Версія 0.1.3 приймає нормалізоване завдання в JSON (версія схеми 1) або підтримуваний файл DiFX .input. У ньому перелічено станції, годинники, частоти, потоки даних VDIF, бази та скани. Вихідний каталог має бути новим. Команда cuphoton xbeam inspect-vdif RECORDING.vdif --json читає лише заголовки. Команда build-vdif-sidecar з параметрами --index-dir, --backend cufile (або posix, якщо GPUDirect Storage немає) і --devices створює індекси для повторного використання, а вихідні файли не змінюються. Команда cuphoton xbeam correlate JOB.json з --backend cupy запускає кореляцію на GPU. За замовчуванням дані зчитуються через POSIX у закріплену пам'ять хоста, а з --vdif-io cufile - через GPUDirect Storage. Серед параметрів є --scan, --first-integration і --integration-count. З Python можна викликати load_job і correlate з CorrelationWindow і отримувати записи по одному, але запис у SWIN доступний лише з CLI.

Для записів із пропусками є профіль --profile interop-real-usb-buffered-window-replay-v1. З ним відліки всередині збереженого буфера продовжують зчитуватися з попередньою прив'язкою за часом, доки не з'явиться нова опорна точка. Профіль також визначає, які блоки FFT враховуються і як відображаються ваги. Втрачені відліки він не відновлює, і повна вага не гарантує повноти даних. Без профілю кадри вирівнюються за мітками часу в заголовках, а порожні слоти позначаються як некоректні, тому видності та ваги можуть відрізнятися. Під час масштабування скан ділиться за часом. На одному вузлі --devices 0,1,2,3 запускає по процесу на кожен GPU, записує результати в RUN/shards/ і об'єднує їх. На кількох вузлах кожен процес отримує --shard-count і --shard-index, наприклад 64 та індекси 0-63, з однаковими налаштуваннями сканів та інтеграцій. Потім merge-shards об'єднує часткові результати SWIN в одне ціле.

Рисунок 1. Радіотелескопи реєструють сигнали, які корелюються у видності для реконструкції зображення. Концептуальна ілюстрація
Рисунок 1. Радіотелескопи реєструють сигнали, які корелюються у видності для реконструкції зображення. Концептуальна ілюстрація
Рисунок 3. cuPhoton.xBeam перетворює записи телескопів на видності для подальшої побудови зображень
Рисунок 3. cuPhoton.xBeam перетворює записи телескопів на видності для подальшої побудови зображень