¿Por qué entregan una compilación y no el código fuente?
El método de optimización es nuestro know-how, por eso entregamos una biblioteca estática o dinámica con una cabecera C y un envoltorio fino en Rust. Integrarla requiere una sola línea en Cargo.toml. La corrección se confirma con pruebas de equivalencia; el origen, con la firma y la procedencia (provenance).
¿Qué pasa si cambio mi código?
La integración Rust y la vuelta al original se acuerdan para la biblioteca. Un cambio del núcleo requiere nueva versión y medición; CI necesita un pedido separado aceptado. El escrow se puede solicitar antes del pago mediante una caja calificada según el anexo.
¿Tengo que enviarles mi estrategia?
Para un rango preliminar, no: el harness gratuito genera un paquete de lecturas sin código fuente. Para la compilación necesitamos el código que se ejecuta en el bucle caliente, y solo ese: normalmente el simulador, los indicadores y el estado de la cartera. Está cubierto por el NDA, no se usa en trabajos para otros clientes y se elimina en el plazo previsto. Parte de sus datos puede quedarse con usted hasta la aceptación: las entradas ocultas se envían cifradas y usted entrega la clave cuando la compilación está lista.
¿Por qué no añadir simplemente más núcleos?
Haga ambas cosas. Las ejecuciones independientes de un barrido se reparten bien entre núcleos, y nuestra compilación acelera cada una de ellas en cada núcleo que añada. Más núcleos no ayudan a una única simulación a lo largo de un histórico, donde cada paso depende del anterior, y ese es justo el código que aceleramos. Menos horas-núcleo para el mismo barrido también significan una factura de nube menor.
¿Y si la aceleración prometida no se materializa?
En el nivel 1 usted paga por un resultado ya medido, así que esto no puede ocurrir. En el nivel 2 fijamos un mínimo garantizado; si no se alcanza, el importe vuelve a su saldo según la tabla del contrato, y los fondos pagados del saldo se reembolsan si los solicita.
¿Cómo se cuentan las líneas?
Compilamos su código con -C instrument-coverage con el mismo perfil y para la misma plataforma que en el pasaporte, y ejecutamos el benchmark del pasaporte con las entradas abiertas. Contamos las líneas de Rust que se ejecutaron al menos una vez según llvm-cov. No se cuentan las líneas en blanco ni los comentarios, el código que nunca se ejecutó, las pruebas y el andamiaje del benchmark, las dependencias de terceros fuera del alcance del trabajo ni el ensamblador; una función genérica cuenta una sola vez. Esta cifra se incluye en el pasaporte antes del pago. Los datos no cuentan, solo su código. Como referencia: al descomprimir el corpus Silesia, bzip2-rs ejecuta 598 líneas de su código, y al codificar cinco clips de Xiph, rav1e ejecuta 12.809 líneas de 55.419.
¿Qué plataformas se admiten?
Las demos públicas requieren Linux x86-64 con AVX2/FMA. TA-Lib y vn.py se midieron en AMD Zen 3 y Zen 4. Funciones de CPU, SO, ABI y hardware de aceptación se fijan por pedido; Intel, ARM y otros entornos requieren evaluación propia.
¿Qué código apenas se acelera?
Decodificadores de formatos que ya cuentan con bibliotecas en C optimizadas durante años (LZ4, zstd, deflate): todavía no las hemos superado. Códecs maduros con SIMD y ensamblador escritos a mano (x264, x265), primitivas criptográficas como SHA-256 y ChaCha20, el procesamiento de datos aleatorios incompresibles y las llamadas muy cortas, en las que todo el tiempo se va en sobrecarga. En esos casos, la estimación gratuita muestra con honestidad una ganancia pequeña, y no tendrá que pagar.
Mis ciclos no coinciden con los suyos. ¿Por qué?
Los ciclos dependen del modelo de CPU, la frecuencia, el turbo, la memoria y los datos de entrada. Las cifras del contrato se toman en el banco según el pasaporte de medición. El harness lee los mismos contadores, así que con el mismo modelo de CPU y la misma configuración sus cifras deberían quedar cerca de las nuestras. El número de instrucciones depende mucho menos de la máquina: compárelo primero.
¿Y la coma flotante?
Por defecto, las salidas coinciden bit a bit, con una excepción limitada para los payloads de NaN producidos por la aritmética de coma flotante cuando Rust permite payloads distintos. Las codificaciones de NaN conservadas explícitamente y las demás salidas siguen siendo exactas, salvo que usted acuerde otra cosa en el pasaporte. El pasaporte también puede exigir payloads de NaN exactos. Cualquier otra desviación acordada se define en el pasaporte y se comprueba con pruebas.
¿Fallará la compilación en un servidor antiguo?
Revise los requisitos de CPU de cada paquete. Los binarios públicos pueden requerir AVX2/FMA y no ejecutarse en CPU antiguas. Las funciones y cualquier alternativa de un binario pagado se acuerdan en su ficha; no se supone una alternativa en todos los binarios.
¿Reducirá la latencia de mi trading en vivo?
Solo si el perfilado muestra que el cálculo es el cuello de botella. Para una ruta en vivo medimos todo el recorrido desde el evento de mercado hasta la orden, por ejemplo su p99 en su servidor, no una sola función: a menudo la mayor parte del tiempo se va en la red y la bolsa. Nuestros mejores resultados son los cálculos por lotes: backtests, entrenamiento y barridos de parámetros.
¿Trabajan con C, C++ y Python?
Sí, como encargos individuales. Para C y C++ entregamos una biblioteca sustituta con la misma ABI, de modo que sus programas, y el código Python que llama a la biblioteca, funcionan sin cambios (vea el caso de TA-Lib). Para código Python entregamos un programa o módulo nativo con la misma salida (vea el caso de vn.py). Es trabajo de ingeniería de nivel 2 con precio individual; el autoservicio del panel acepta por ahora crates de Rust.