Почему вы отдаёте сборку, а не исходники?
Метод оптимизации — наше ноу-хау, поэтому мы поставляем статическую или динамическую библиотеку с C-заголовком и тонкой Rust-обёрткой. Подключение — одна строка в Cargo.toml. Корректность подтверждается тестами эквивалентности, происхождение — подписью и provenance.
Что будет, когда я изменю код?
Интеграция Rust-библиотеки и возврат к оригиналу согласуются при выдаче. Если ускоренное ядро изменилось, нужна новая версия и замер; CI предоставляется по отдельному принятому заказу. Для непрерывности бизнеса escrow исходников можно запросить до оплаты через квалифицированный escrow box по rider.
Придётся ли отдать вам стратегию?
Для предварительного диапазона — нет: бесплатный харнесс даёт пакет показаний без исходников. Для сборки нужен код, который работает в горячем цикле, и только он: обычно симулятор, индикаторы и состояние портфеля. Он под NDA, не используется в работе для других клиентов и удаляется по сроку. Часть данных может оставаться у вас до приёмки: скрытые входы присылаются зашифрованными, а ключ вы даёте, когда сборка готова.
Почему не просто добавить ядер?
Делайте и то, и другое. Независимые прогоны перебора хорошо раскладываются по ядрам, а наша сборка ускоряет каждый из них на каждом добавленном ядре. Ядра не помогают одной симуляции вдоль истории, где каждый шаг зависит от предыдущего, а именно такой код мы и ускоряем. Меньше ядро-часов на тот же перебор — это ещё и меньший счёт за облако.
Что, если обещанное ускорение не получится?
На уровне 1 вы платите за уже измеренный результат, поэтому такого не бывает. На уровне 2 мы называем гарантированный минимум; если он не достигнут, деньги возвращаются на баланс по таблице из договора, а оплаченные средства с баланса возвращаем по запросу.
Как считаются строки?
Собираем ваш код с флагом -C instrument-coverage в том же профиле и для той же платформы, что в паспорте, и прогоняем бенчмарк паспорта на открытых входах. Считаются строки Rust, которые выполнились хотя бы раз по данным llvm-cov. Не считаются пустые строки и комментарии, невыполненный код, тесты и обвязка бенчмарка, сторонние зависимости вне объёма работы и ассемблер; обобщённая функция считается один раз. Это число записывается в паспорт до оплаты. Данные в подсчёт не входят, только ваш код. Для ориентира: при распаковке корпуса Silesia в bzip2-rs выполняется 598 строк его кода, при кодировании пяти клипов Xiph в rav1e — 12 809 строк из 55 419.
Какие платформы поддерживаются?
Публичные демо рассчитаны на Linux x86-64 с AVX2/FMA. TA-Lib и vn.py измерены на AMD Zen 3 и Zen 4. Для оплаченной сборки функции CPU, ОС, ABI и машина приёмки фиксируются в заказе; Intel, ARM и другие среды требуют отдельной оценки.
Какой код ускоряется плохо?
Декодеры форматов, для которых уже есть давно оптимизированные библиотеки на C (LZ4, zstd, deflate): против них мы пока не получили выигрыша. Зрелые кодеки на ручном SIMD и ассемблере (x264, x265), криптографические примитивы вроде SHA-256 и ChaCha20, обработка случайных несжимаемых данных и очень короткие вызовы, где всё время уходит на накладные расходы. В таких случаях бесплатная оценка честно покажет небольшой выигрыш, и платить не придётся.
Мои такты отличаются от ваших. Почему?
Такты зависят от модели CPU, частоты, turbo, памяти и входных данных. Договорные цифры снимаются на стенде по паспорту измерений. Харнесс читает те же счётчики, поэтому на той же модели CPU и с теми же настройками ваши цифры должны быть близки к нашим. Число инструкций гораздо меньше зависит от машины — сравнивайте сначала его.
Что с плавающей точкой?
По умолчанию вывод совпадает бит в бит, с ограниченным исключением для payload у NaN, полученных в арифметике с плавающей точкой, там, где Rust допускает разные payload. Явно сохранённые кодировки NaN и весь остальной вывод остаются точными, если в паспорте не согласовано иное. Паспорт может требовать и точного совпадения payload у NaN. Любое другое согласованное отклонение фиксируется в паспорте и проверяется тестами.
Сборка упадёт на старом сервере?
Проверьте требования конкретного пакета к CPU. Публичные бинарники могут требовать AVX2/FMA и не запустятся на старом CPU. Поддерживаемые функции и возможный fallback оплаченной сборки согласуются в паспорте; fallback не предполагается у каждого бинаря.
Снизит ли это задержку моей live-торговли?
Только если профиль показывает, что узкое место — вычисления. Для live-пути мы меряем весь путь от рыночного события до ордера, например его p99 на вашем сервере, а не одну функцию: часто основное время уходит на сеть и биржу. Самые сильные наши результаты — пакетные вычисления: бэктесты, обучение и перебор параметров.
Вы работаете с C, C++ и Python?
Да, по индивидуальным заказам. Для C и C++ мы поставляем библиотеку на замену с тем же ABI: ваши программы и Python-код, который её вызывает, работают без изменений (см. кейс TA-Lib). Для Python-кода поставляем нативную программу или модуль с тем же выводом (см. кейс vn.py). Это инженерная работа уровня 2 по индивидуальной цене; самообслуживание в кабинете пока принимает Rust-крейты.