This is a PDAL fork designed to save time by utilizing the GPU for operations. Right now, only CUDA/NVIDIA is supported.
GPUPDAL (GPU Point Data Abstraction Library) is an independent,
performance-focused point-cloud processing engine derived from PDAL. Its
public gpupdal command is a drop-in command-line replacement for pdal: it
accepts the same commands and pipelines, then chooses between exact CPU and
CUDA implementations using measured end-to-end performance.
The first binary's optional external plugins are disabled for a controlled,
portable dependency set. Drop-in behavior is preserved for the complete stage
catalog configured into that release: the bundle requires gpupdal --drivers
to match its sibling pdal --drivers, and unsupported acceleration falls back
to that exact PDAL implementation. Plugin source remains available for later
qualified artifacts and source builds.
Default mode prioritizes reproducibility. Deterministic outputs must match the frozen reference bytes; inherently nondeterministic containers are canonicalized and compared semantically. An accelerated path that cannot meet that contract declines to the exact host path instead of weakening the default. See the conformance suite, stage coverage, and testing strategy for the precise contracts.
gpupdal pipeline pipeline.json gpupdal translate input.laz output.laz gpupdal doctor
Run calibration to measure exact CPU and GPU paths and write a machine-local placement profile:
gpupdal calibrate
For placement tuned to representative data, supply a LAS or LAZ file:
gpupdal calibrate --input /path/to/tile.laz --points 250000,1000000,4000000
GPUPDAL then uses the profile automatically, selecting the GPU only where it
measured a complete-process win. Inspect the active profile with
gpupdal calibrate --status, or preview the calibration plan with
gpupdal calibrate --dry-run. The default profile location is
~/.config/gpupdal/placement-profile.json. See the
calibration guide for quick runs, selected models,
custom output paths, and invalidation rules.
Run the portable verification benchmark to compare the installed gpupdal
binary with the configured frozen reference on the same machine. It performs
one warm-up followed by three alternating complete-process timing pairs,
checks exactness, and writes portable JSON and HTML evidence:
The optional verifier requires Python 3 on PATH. Ordinary PDAL-compatible
commands do not require Python.
gpupdal verify --output-dir gpupdal-proof
To use representative data and a pipeline of your own, use input.laz and
output.laz as the pipeline's input and output placeholders:
gpupdal verify --input /path/to/tile.laz --pipeline /path/to/pipeline.json \ --runs 3 --warmups 1 --output-dir gpupdal-proof
Publishing the resulting gpupdal-proof directory lets another person audit the
machine, binary and input hashes, placement decision, exactness result, and raw
timings. An author-run report is prepared evidence; it becomes third-party
validation only when an unrelated user runs and publishes it. See the full
gpupdal verify guide.
Aggregate wall-clock time for all 18 common jobs, using a zero-based linear y-axis
Lower is better. Each bar is the summed median wall-clock time for the 18 jobs that every compared tool completed at every input size on the reference workstation. The y-axis starts at zero and is linear. This is an author-produced comparative run, not third-party validation; LAStools ran unlicensed and some tools use different algorithms for similarly named jobs. See the full benchmark report for methods, per-job results, hardware, repeat counts, and limitations.
The repository contains the release-safe scaffold for the intended install experience:
npm install gpupdal npx gpupdal --version
Use npm install --global gpupdal when you want gpupdal directly on your
shell path.
gpupdal@0.1.0 is public on npm's latest channel. The release carries CUDA
13 artifacts for Linux x86-64 and Windows x64. The small gpupdal launcher
selects exact-version native support packages automatically; users still run
only npm install gpupdal. Compute
capability 8.9 exactness
and CUDA execution are physically qualified on an RTX 4090 with driver
610.43.03 on Linux and an NVIDIA L4 with driver 610.88 on Windows; driver 580
or newer is required. The measured automatic-acceleration promise currently
applies to the Linux RTX 4090 profile. Windows is qualified for exact CUDA
execution, but not yet for a speedup or automatic-selection claim. Other
cubins in the portable binaries are not advertised as stable until their
physical fixed-bit lanes pass. See
packages/npm/README.md and
RELEASE_READINESS.md. Releases are built and checked
locally; the repository does not require GitHub Actions. See the
manual release guide.
Installation itself does not hard-fail on an unsupported or absent GPU. The command can use its exact CPU/PDAL fallback there, but the stable acceleration promise is limited to the physically qualified SM 89 profile.
GPUPDAL is under active development. Runtime and differential-test coverage are mature, while packaging, APIs, optional integrations, naming, and release conformance continue to be tracked explicitly:
- Stage coverage separates functional, native, performance-qualified, and automatically selected coverage.
- Implementation plan records remaining release work and acceptance gates.
- Benchmarks and decisions contain the append-only engineering evidence.
- Reports index the reproducible public evidence packages.
The maintained developer presets are documented in AGENTS.md. A typical host build starts with:
cmake --preset pdg-host-debug cmake --build --preset pdg-host-debug ctest --preset pdg-host-debug
CUDA builds require CUDA 12.4 or newer and use the public
GPUPDAL_ENABLE_CUDA CMake option. Runtime acceleration is conservative:
when a device, pipeline, layout, or performance profile is not qualified,
GPUPDAL uses the exact host implementation.
GPUPDAL is distributed under the BSD 3-Clause license except where a bundled component states different terms. See LICENSE.txt, NOTICE, ORIGIN.md, and the third-party inventory for retained copyright, provenance, and third-party notices.
The GPUPDAL-specific BSD non-endorsement clause explicitly protects the names GPUPDAL, Zy Mazza, and Automagics: derived products may not use those names to imply endorsement or promotion without prior written permission. It does not prohibit truthful attribution, compatibility statements, or commercial use.
GPUPDAL is provided AS IS, without warranties or a support commitment. The five-business-day security/contact acknowledgement target is a best-effort project goal, not an SLA, warranty, or promise to provide a fix.
Contributions are welcome. Start with CONTRIBUTING.md, which describes the exactness, testing, and benchmark requirements for changes.