// línea open-source
← productos

Craton Bolt

Entran cadenas SQL. Sale PTX de NVIDIA en tiempo de ejecución. La GPU hace el resto.

products.cratonbolt.versionInfo

32.4×
vs Polars · aritmética sobre 50 M filas
< 25 µs
Plan + lower + codegen / consulta
742
Tests de integración y PTX-golden
v0.7.0 · pre-1.0
Desarrollo activo
✦ El compilador, en marcha

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.

consultas compiladas —kernels por consulta —filas de salida —etapa —en marcha
kernel PTX fusionadolote columnar de entradafilas de salidaviaje a memoria global

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.

✦ Medido, no prometido

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.

Consulta · Clave · gruposDuckDBPolarsCraton BoltCamino rápido activado
q1 SUM, baja cardinalidad
id1 · 100
7.1 ms
19.9 ms
4.1 msmás rápido
Tier-1 single-SUM
q2 2-SUM, media cardinalidad
id2 · 10 K
62.0 msmás rápido
104.7 ms
110.3 ms
Tier-2.1 multi-SUM (N-value reduce)
q3 SUM, dos claves
dos claves · ≈ 1 M
496.9 ms
459.9 ms
126.7 msmás rápido
Tier-2.1 two-key (i64 partition_reduce)
q4 3-AVG, baja cardinalidad
id1 · 100
12.5 msmás rápido
97.6 ms
54.4 ms
Tier-1 AVG (SUM + COUNT)
q5 SUM, alta cardinalidad
id3 · 1 M
508.7 ms
363.2 ms
213.3 msmás rápido
Tier-2.1 (NUM_PARTITIONS=4096, pass-2 on GPU)

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.

✦ Donde la GPU rinde

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.

Consulta · FormaPolars (CPU MT)Craton Bolt E2E (GPU)Referencia CPU (un hilo)Ganador
proj passthrough
columna sin copia
12.55 µsmás rápido
sin copia
115.5 ms
432.9 Melem/s
—
Polars (zero-copy)
arith cadena de 11 ops
aritmética fusionada
4.05 s
12.3 Melem/s
124.8 msmás rápido
400.7 Melem/s
1.06 s
47.2 Melem/s
Craton Bolt — 32,4× más rápido
filtered filtro + 4 ops
predicado y aritmética
369 ms
135.5 Melem/s
41.8 msmás rápido
1.196 Gelem/s
—
Craton Bolt — 8,8× más rápido

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

01

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.

02

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.

03

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.

¿Listo para asegurar
el futuro?

Solicitar Briefing