gpudb

GPU-beschleunigte analytische Operatoren für DuckDB auf NVIDIA CUDA und Apple Silicon Metal. Erste SQL-Ausführungsengine, die Apple-Silicon-GPUs ansteuert.

Maintainer: singhpratech

Installation und Laden

INSTALL gpudb FROM community;
LOAD gpudb;

Beispiel

LOAD gpudb;
-- Drop-in aggregates (BIGINT and DOUBLE overloads)
SELECT gpu_sum(value::BIGINT) FROM range(1000000) AS t(value);
-- Verify against native sum
SELECT
gpu_sum(value::BIGINT) AS gpu,
sum(value::BIGINT) AS native
FROM range(1000000) AS t(value);

Über gpudb

gpudb fügt austauschbare Aggregatfunktionen hinzu:

  • gpu_sum(BIGINT | DOUBLE)
  • gpu_min(BIGINT | DOUBLE)
  • gpu_max(BIGINT | DOUBLE)

Kleinere Ganzzahltypen (INTEGER, SMALLINT, TINYINT) werden implizit auf die BIGINT-Überladung erweitert. Alle drei funktionieren in einfacher Aggregation, GROUP BY und Fensterrahmen (OVER (), OVER (ORDER BY ...), OVER (PARTITION BY ... ORDER BY ...)) und entsprechen der nativen DuckDB- Semantik: leere Eingabe und All-NULL-Gruppen liefern SQL-NULL (v0.2.0), und die DOUBLE-Min/Max-Überladungen verwenden dieselbe NaN-bewusste Totalordnung wie natives DuckDB — NaN sortiert am größten (v0.3.0).

v0.3.0 ersetzt den gepufferten Aggregatpfad von v0.1.x durch streaming Akkumulatorzustände. End-to-End-Abfragen über die SQL-Aggregate laufen nun auf Augenhöhe mit nativem DuckDB (1,00–1,20× bei umgeschriebenen TPC-H-Abfragen), während v0.1.x bei denselben Abfragen deutlich langsamer sein konnte. DuckDB speist Aggregate mit vorgruppierten 2048-Zeilen-Chunks, daher streamt der SQL-Aggregatpfad bewusst laufende Akkumulatoren, statt Chunks über die GPU hin- und zurückzuschicken.

Die GPU-Backends (CUDA auf NVIDIA sm_70+, Metal auf Apple Silicon M1+) treiben die operatorbezogene Engine und die Benchmark-Werkzeuge im Quellbaum an, bei denen ganze Spalten auf dem Gerät resident sind. Die wichtigsten Ergebnisse auf Operatorebene sind alle auf Zeilen in der append-only BENCHMARK.md des Projekts mit Reproduktionsschritten zurückführbar:

  • Apple M4 Max vs. DuckDB-CPU 16 Threads: Multi-Aggregat-Fusion über TPC-H-SF10-Spalten 9,7×–25,5×; SF10 GROUP BY bei 1,35 Mio. eindeutigen Schlüsseln 3,9×; ehrlich dokumentierter Verlust bei 50 eindeutigen Schlüsseln (CPU 14× schneller, strukturell).
  • NVIDIA RTX 4090: resident-column SUM ~17,9×; GROUP BY 50 Mio. Zeilen × 10 Mio. eindeutige Gruppen 13,7× (gegenüber Single-Thread-CPU-Baseline).

Community-Erweiterungsbinaries werden derzeit ohne CUDA-Toolchain gebaut (voller Metal-Pfad auf Apple Silicon; sauberer CPU-Fallback auf Linux); für das CUDA-Backend aus dem Quellcode bauen. Ist keine GPU verfügbar, fällt die Erweiterung sauber zurück — dieselbe SQL-Oberfläche in beiden Fällen.

Quelle: https://github.com/singhpratech/duckdbgpumetaldbram

Hinzugefügte Funktionen

function_name function_type description comment examples
gpu_max aggregate NULL NULL
gpu_min aggregate NULL NULL
gpu_sum aggregate NULL NULL

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

Diese Erweiterung fügt keine Einstellungen hinzu.