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 sumSELECT gpu_sum(value::BIGINT) AS gpu, sum(value::BIGINT) AS nativeFROM 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.