Craton Bolt
Entran cadenas SQL. Sale PTX de NVIDIA en tiempo de ejecución. La GPU hace el resto.
products.cratonbolt.versionInfo
Entra una consulta. Sale un kernel de GPU recién escrito.
Bolt parsea y planifica la consulta, y luego fusiona todo el árbol de operadores en un único kernel PTX que escribe en tiempo de ejecución y entrega al driver CUDA. El motor al que reemplaza está dibujado debajo, haciendo la misma consulta del modo habitual.
Las consultas y los operadores son SQL real que Bolt soporta. La banda inferior es la forma contra la que compite: los motores que encadenan kernels precompilados tienen que dejar cada intermedio en memoria global y volver a leerlo, que es exactamente el costo que elimina fusionar el árbol en un solo kernel.
GROUP BY de h2o.ai, 10 M de filas
Mismo esquema, mismas formas de consulta y cardinalidades que el db-benchmark de h2o.ai. Cada resultado se verifica bit a bit contra Polars y DuckDB antes de medirse.
Bolt gana ahora con claridad en tres de las cinco consultas: la SUM de baja cardinalidad (q1) y las dos de mayor cardinalidad (q3, q5). Supera a Polars en q4 y le sigue de cerca en q2, mientras que DuckDB lidera q2 y q4. Publicamos las cinco.
RTX 2060, driver 610.88, CUDA 13.3 (Craton Bolt 0.9.0). Medianas de criterion en una ventana de 20 s (al menos 100 muestras, IC menor a ±5 %). Verificado contra Polars 0.42 y DuckDB 1.2 sobre un conjunto de 100 K filas con tolerancia relativa de 1e-9.
Aritmética intensiva, 50 M de filas
Aritmética fusionada de varios operadores sobre columnas anchas: el régimen donde la densidad de cómputo de la GPU rinde.
Polars gana en el passthrough porque no copia: no hay nada que calcular, así que la GPU no aporta nada. En cuanto hay aritmética que fusionar, Bolt es 32,4× más rápido en la cadena de 11 operaciones y 8,8× más rápido en filtro más aritmética.
50 M de filas en una RTX 2060. Las cifras de Bolt son de extremo a extremo. La referencia CPU es una implementación de un solo hilo de la misma consulta; el rendimiento se muestra bajo cada tiempo.
Problemas modernos requieren soluciones modernas.
La mayoría de los motores de dataframes sobre GPU encadenan kernels precompilados y rebotan los resultados intermedios por la memoria global entre cada uno. Craton Bolt hace lo contrario: compila cada consulta SQL en un único kernel PTX de NVIDIA nuevo en tiempo de ejecución, lo carga a través del driver de CUDA y ejecuta todo el árbol de expresiones fusionado en registros.
Toda la tubería — parseo, planificación, codegen, lanzamiento — es Rust puro. No hay capa de C++, ni biblioteca de kernels precompilada, ni FFI a un motor de consultas de terceros. Todo lo que está por debajo de cuModuleLoadData es el driver de CUDA de NVIDIA; todo lo que está por encima es Rust.
La memoria de GPU está verificada por el borrow checker. Las asignaciones son handles tipados, el acceso de lectura presta una vista compartida y la escritura toma una exclusiva — y los lanzamientos de kernel exigen esos préstamos. El uso-tras-liberación, la doble liberación y el aliasing mutable/compartido entre kernels se convierten en errores de compilación, igual que Rust ya garantiza para la memoria de CPU.
Compilar cada consulta en JIT cuesta casi nada: la planificación más el codegen se mantienen por debajo de 25 µs sin importar el tamaño del conjunto de datos. En una carga aritmética fusionada sobre 50 M de filas eso supone una mejora de 32.4× frente a Polars multihilo, y en GROUP BY de alta cardinalidad supera tanto a Polars como a DuckDB. Apache-2.0 y, con honestidad, pre-1.0 — la API pública aún es inestable y no está lista para producción.
Fusión de kernels vía PTX en tiempo de ejecución
Un único kernel PTX por consulta mantiene todo el árbol de expresiones fusionado en registros — en lugar de encadenar kernels precompilados y rebotar resultados intermedios por la memoria global como hacen RAPIDS / cuDF.
Memoria de GPU verificada por el borrow checker
Las asignaciones de GPU son handles tipados (GpuVec<T>), prestados en solo lectura o en exclusiva. El uso-tras-liberación, la doble liberación y el aliasing compartido/mutable entre kernels se rechazan en tiempo de compilación — las mismas garantías que Rust da para la memoria de CPU.
Rust puro, sin capa de C++
Toda la tubería — parseo, planificación, codegen, lanzamiento — es Rust puro sobre la API cruda del driver de CUDA. Sin biblioteca de kernels precompilada y sin FFI a un motor de consultas de terceros.
Amplia superficie SQL
Proyección, filtros, agregados, GROUP BY, todos los tipos de JOIN, operaciones de conjuntos, CTEs (incluido WITH RECURSIVE), funciones de ventana, ORDER BY / LIMIT / HAVING, además de aritmética Decimal128 y de fechas/horas ejecutada en la GPU.
La Ventaja Técnica
Por qué los expertos eligen Craton Bolt
Codegen de PTX en tiempo de ejecución
Cada consulta se reduce a un IR en forma SSA de operaciones y luego a un módulo PTX nuevo emitido en Rust y ensamblado a SASS por el driver (cuModuleLoadData). Una caché LRU de módulos con clave KernelSpec (clave de 128 bits) más una caché en disco que se auto-invalida hacen que las formas de consulta repetidas se salten la recompilación. Apunta a sm_70 (Volta) y posteriores.
Modelo de memoria CUDA-Oxide
GpuVec<T> posee la memoria del dispositivo; GpuView y el GpuViewMut !Sync / !Copy la prestan. Los búferes están alineados con Arrow, así que los resultados se descargan directamente en RecordBatches de arrow-rs. La igualdad y LIKE sobre Utf8 codificado por diccionario se pliegan a predicados de pertenencia de índices enteros puros en la GPU.
GROUP BY, JOINs y ordenación por niveles
Kernels de GROUP BY multinivel en memoria compartida y particionados por hash; hash-join build/probe en GPU para las formas INNER / LEFT / RIGHT / FULL / CROSS que califican, con repliegues en host; ordenación bitónica y radix en GPU para ORDER BY. Requiere CUDA 12+ y una GPU NVIDIA con capacidad de cómputo 7.0+; el crate compila en cualquier sitio gracias a la feature cuda-stub.