{"service":"cuda-compute","version":"1.0.0","gpu":{"available":true,"free_mb":3429,"total_mb":97247,"concurrency":4,"nvcomp":true},"families":{"compress":[{"id":"compress.deflate","endpoint":"POST /v1/compress/deflate","description":"DEFLATE compression (GPU via nvCOMP, CPU fallback)","scope":"compress.deflate","throughput":"GPU ~3 GB/s · CPU ~50-200 MB/s"},{"id":"decompress.deflate","endpoint":"POST /v1/decompress/deflate","description":"DEFLATE decompression","scope":"decompress.deflate","throughput":"GPU ~5 GB/s · CPU ~100-500 MB/s"},{"id":"compress.gzip","endpoint":"POST /v1/compress/gzip","description":"GZIP compression (GPU via nvCOMP, CPU fallback)","scope":"compress.gzip","throughput":"GPU ~3 GB/s · CPU ~50-200 MB/s"},{"id":"decompress.gzip","endpoint":"POST /v1/decompress/gzip","description":"GZIP decompression","scope":"decompress.gzip","throughput":"GPU ~5 GB/s · CPU ~100-500 MB/s"},{"id":"compress.zstd","endpoint":"POST /v1/compress/zstd","description":"ZSTD compression (GPU via nvCOMP, CPU fallback)","scope":"compress.zstd","throughput":"GPU ~3 GB/s · CPU ~50-200 MB/s"},{"id":"decompress.zstd","endpoint":"POST /v1/decompress/zstd","description":"ZSTD decompression","scope":"decompress.zstd","throughput":"GPU ~5 GB/s · CPU ~100-500 MB/s"},{"id":"compress.lz4","endpoint":"POST /v1/compress/lz4","description":"LZ4 compression (GPU via nvCOMP, CPU fallback)","scope":"compress.lz4","throughput":"GPU ~3 GB/s · CPU ~50-200 MB/s"},{"id":"decompress.lz4","endpoint":"POST /v1/decompress/lz4","description":"LZ4 decompression","scope":"decompress.lz4","throughput":"GPU ~5 GB/s · CPU ~100-500 MB/s"},{"id":"compress.brotli","endpoint":"POST /v1/compress/brotli","description":"BROTLI compression (GPU via nvCOMP, CPU fallback)","scope":"compress.brotli","throughput":"GPU ~3 GB/s · CPU ~50-200 MB/s"},{"id":"decompress.brotli","endpoint":"POST /v1/decompress/brotli","description":"BROTLI decompression","scope":"decompress.brotli","throughput":"GPU ~5 GB/s · CPU ~100-500 MB/s"},{"id":"compress.snappy","endpoint":"POST /v1/compress/snappy","description":"SNAPPY compression (GPU via nvCOMP, CPU fallback)","scope":"compress.snappy","throughput":"GPU ~3 GB/s · CPU ~50-200 MB/s"},{"id":"decompress.snappy","endpoint":"POST /v1/decompress/snappy","description":"SNAPPY decompression","scope":"decompress.snappy","throughput":"GPU ~5 GB/s · CPU ~100-500 MB/s"}],"hash":[{"id":"hash.crc32","endpoint":"POST /v1/hash/crc32","description":"CRC32 digest — 4 bytes (uint32 big-endian)","scope":"hash.crc32","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.md5","endpoint":"POST /v1/hash/md5","description":"MD5 digest — 16 bytes","scope":"hash.md5","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.sha1","endpoint":"POST /v1/hash/sha1","description":"SHA1 digest — 20 bytes","scope":"hash.sha1","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.sha256","endpoint":"POST /v1/hash/sha256","description":"SHA256 digest — 32 bytes","scope":"hash.sha256","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.sha512","endpoint":"POST /v1/hash/sha512","description":"SHA512 digest — 64 bytes","scope":"hash.sha512","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.sha3-256","endpoint":"POST /v1/hash/sha3_256","description":"SHA3-256 digest — 32 bytes (Keccak)","scope":"hash.sha3-256","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.blake2b","endpoint":"POST /v1/hash/blake2b","description":"BLAKE2B digest — 64 bytes (modern, schnell)","scope":"hash.blake2b","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"},{"id":"hash.xxh64","endpoint":"POST /v1/hash/xxh64","description":"XXH64 digest — 8 bytes (nicht-crypto, ultra-fast)","scope":"hash.xxh64","throughput":"CPU C-impl ~1-3 GB/s · sha-family SSE-beschleunigt"}],"mesh":[{"id":"mesh.dedup-vertices","endpoint":"POST /v1/mesh/dedup-vertices","description":"Quantize + dedup Float32 vertex array. Output: unique vertices + per-input-vertex index into unique array.","scope":"mesh.dedup-vertices","throughput":"GPU ~1 GB/s · CPU ~50-100 MB/s"},{"id":"mesh.heightmap-to-stl","endpoint":"POST /v1/mesh/heightmap-to-stl","description":"Generate watertight binary STL from a Float32 heightmap (W*H pixels). Top surface + flat bottom + 4 sidewalls. Identical output to swissmapstl's stl.js heightmapToStl().","scope":"mesh.heightmap-to-stl","throughput":"GPU ~10-15× faster than JS for 1M+ triangles"}],"array":[{"id":"array.sort","endpoint":"POST /v1/array/sort","description":"Sort numeric array ascending.","scope":"array.sort","throughput":"GPU radix-sort ~10 GB/s · CPU ~500 MB/s"},{"id":"array.unique","endpoint":"POST /v1/array/unique","description":"Unique values + inverse-index array.","scope":"array.unique","throughput":""},{"id":"array.argmax","endpoint":"POST /v1/array/argmax","description":"Index der MAX-Wert im Array. Output: uint32 LE.","scope":"array.argmax","throughput":"GPU ~50 GB/s"},{"id":"array.argmin","endpoint":"POST /v1/array/argmin","description":"Index der MIN-Wert im Array. Output: uint32 LE.","scope":"array.argmin","throughput":"GPU ~50 GB/s"},{"id":"array.count-nonzero","endpoint":"POST /v1/array/count-nonzero","description":"Anzahl Nicht-Null-Elemente. Output: uint64 LE.","scope":"array.count-nonzero","throughput":"GPU ~50 GB/s"},{"id":"array.reverse","endpoint":"POST /v1/array/reverse","description":"Reverse Array-Reihenfolge (CPU memcpy, GPU bringt nichts hier).","scope":"array.reverse","throughput":"CPU ~5 GB/s (memcpy-bound)"},{"id":"array.sort-by-key","endpoint":"POST /v1/array/sort-by-key","description":"Sort values by keys (ascending). Body = [N keys][N values].","scope":"array.sort-by-key","throughput":"GPU radix-sort ~5 GB/s"},{"id":"array.argsort","endpoint":"POST /v1/array/argsort","description":"Indices, die das Array sortieren wuerden. Output uint32.","scope":"array.argsort","throughput":"GPU ~10 GB/s"},{"id":"array.cumsum","endpoint":"POST /v1/array/cumsum","description":"Prefix-Sum (Scan): output[i] = sum(input[0..i])","scope":"array.cumsum","throughput":"GPU parallel-scan ~20 GB/s · CPU ~2 GB/s"}],"stats":[{"id":"stats.reduce","endpoint":"POST /v1/stats/reduce","description":"Reduction (sum/mean/min/max/std/var) ueber Array","scope":"stats.reduce","throughput":"GPU ~20 GB/s · CPU ~1-2 GB/s"},{"id":"stats.percentile","endpoint":"POST /v1/stats/percentile","description":"q-Perzentil (q in 0..100) eines numerischen Arrays","scope":"stats.percentile","throughput":"GPU ~5 GB/s · CPU ~200 MB/s"},{"id":"stats.histogram","endpoint":"POST /v1/stats/histogram","description":"Histogramm mit N Buckets im Range [min, max]","scope":"stats.histogram","throughput":"GPU ~10 GB/s · CPU ~500 MB/s"},{"id":"stats.describe","endpoint":"POST /v1/stats/describe","description":"Multi-Statistik in einem Call: n, sum, mean, std, min, max, p25/50/75/95/99","scope":"stats.describe","throughput":"GPU ~3 GB/s (mehrere Perzentile)"}],"random":[{"id":"random.uniform","endpoint":"POST /v1/random/uniform","description":"N uniform Float32 samples in [lo, hi) via GPU cuRAND","scope":"random.uniform","throughput":"GPU cuRAND ~20 GB/s · CPU numpy ~500 MB/s"},{"id":"random.normal","endpoint":"POST /v1/random/normal","description":"N normal-distributed Float32 samples N(mu, sigma)","scope":"random.normal","throughput":"GPU ~15 GB/s · CPU ~300 MB/s"},{"id":"random.choice","endpoint":"POST /v1/random/choice","description":"N uniform Int32 samples in [lo, hi) — sample-with-replacement","scope":"random.choice","throughput":"GPU ~10 GB/s"},{"id":"random.bytes","endpoint":"POST /v1/random/bytes","description":"N cryptographic-strength random bytes (Python secrets module, CPU only)","scope":"random.bytes","throughput":"CPU /dev/urandom ~500 MB/s"}],"vector":[{"id":"vector.cosine-similarity","endpoint":"POST /v1/vector/cosine-similarity","description":"Query vs N DB-Vektoren → N Cosine-Similarity-Werte. Float32.","scope":"vector.cosine-similarity","throughput":"GPU ~10M ops/s · CPU ~500K ops/s"},{"id":"vector.topk-nearest","endpoint":"POST /v1/vector/topk-nearest","description":"Query × N DB-Vektoren → Top-K hoechste Cosine-Sim (descending). Output: indices + scores.","scope":"vector.topk-nearest","throughput":"GPU ~15M vector-ops/s"},{"id":"vector.normalize","endpoint":"POST /v1/vector/normalize","description":"L2-Normalisierung von N Vektoren (Output gleiches Layout, jeder Vektor hat Norm 1)","scope":"vector.normalize","throughput":"GPU ~20 GB/s"}],"image":[{"id":"image.resize","endpoint":"POST /v1/image/resize","description":"Bilinear/Nearest Resample auf neue Aufloesung. 1/3/4-Channel.","scope":"image.resize","throughput":"GPU ~5 GPix/s · CPU ~50 MPix/s"},{"id":"image.gaussian-blur","endpoint":"POST /v1/image/gaussian-blur","description":"Separabler Gauss-Filter mit Sigma in Pixeln. CPU-fallback via scipy.","scope":"image.gaussian-blur","throughput":"GPU ~2 GPix/s"},{"id":"image.sobel-edges","endpoint":"POST /v1/image/sobel-edges","description":"Sobel-Gradient-Magnitude (Edge-Detection), Single-Channel-only, Output uint8 0..255.","scope":"image.sobel-edges","throughput":"GPU ~3 GPix/s"}],"geometry":[{"id":"geometry.bbox-of-points","endpoint":"POST /v1/geometry/bbox-of-points","description":"Axis-aligned BBox aus N Punkten (2D oder 3D, float64)","scope":"geometry.bbox-of-points","throughput":"GPU ~50 GB/s"},{"id":"geometry.point-in-polygon-batch","endpoint":"POST /v1/geometry/point-in-polygon-batch","description":"N Punkte × M Polygone Klassifizierung (Ray-Casting). Erstes matching Polygon gewinnt — Output [u8] mit Polygon-Index+1 oder 0.","scope":"geometry.point-in-polygon-batch","throughput":"GPU ~100M point-poly-checks/s"},{"id":"geometry.polygon-areas","endpoint":"POST /v1/geometry/polygon-areas","description":"Shoelace-Formel fuer M Polygone. Output: float64[M] areas.","scope":"geometry.polygon-areas","throughput":"CPU ~10M verts/s"},{"id":"geometry.haversine","endpoint":"POST /v1/geometry/haversine","description":"N Great-Circle-Distanzen (Meter) zwischen Punkt-Paaren (Lat,Lon in Grad).","scope":"geometry.haversine","throughput":"GPU ~5 GB/s"}],"linalg":[{"id":"linalg.matmul","endpoint":"POST /v1/linalg/matmul","description":"Matrix-Multiplication A(M×K) × B(K×N) → C(M×N), Float32 via cuBLAS","scope":"linalg.matmul","throughput":"GPU cuBLAS ~50 TFLOPS Float32 · CPU numpy ~100 GFLOPS"},{"id":"linalg.transpose","endpoint":"POST /v1/linalg/transpose","description":"Matrix-Transpose Float32","scope":"linalg.transpose","throughput":"GPU ~500 GB/s"},{"id":"linalg.solve","endpoint":"POST /v1/linalg/solve","description":"Solve linear system Ax = b. A square (N×N), b vector (N). Output: x (N).","scope":"linalg.solve","throughput":"GPU cuSOLVER · N=1024 in ~10ms"}],"fft":[{"id":"fft.fft","endpoint":"POST /v1/fft/fft","description":"1D Real-FFT via cuFFT. Input Float32, Output Complex64 (N/2+1 elements).","scope":"fft.fft","throughput":"GPU cuFFT ~10 GFLOPS · CPU numpy ~1 GFLOPS"},{"id":"fft.ifft","endpoint":"POST /v1/fft/ifft","description":"Inverse 1D Real-FFT. Input Complex64, Output Float32. Optional X-N: forced output length.","scope":"fft.ifft","throughput":"GPU cuFFT ~10 GFLOPS"},{"id":"fft.fft2","endpoint":"POST /v1/fft/fft2","description":"2D FFT (z.B. fuer Image Frequency-Analysis). Input H×W Float32, Output H×W Complex64.","scope":"fft.fft2","throughput":"GPU ~20 GFLOPS · 4096×4096 in ~5ms"},{"id":"fft.power-spectrum","endpoint":"POST /v1/fft/power-spectrum","description":"|FFT|^2 — Power-Spectrum von Float32-Signal. Output Float32.","scope":"fft.power-spectrum","throughput":"GPU ~15 GFLOPS"}]},"total":56}