A C++ header-only point cloud processing library accelerated with SYCL for heterogeneous computing systems.
sycl_points provides efficient implementations of common point cloud processing operations using Intel's SYCL (Single-source heterogeneous programming for C++) standard. The library enables accelerated processing on CPUs, Intel iGPU and NVIDIA GPUs supported by SYCL.
This project was developed with reference to small_gicp, a lightweight point cloud registration library.
- Efficient point cloud data structures for CPU and accelerator memory
- Data structures accessible from CPU and device kernel
- K-nearest neighbor search
- KD-trees
- Brute force
- Point cloud registration
- Iterative Closest Point (ICP Point to Point)
- Generalized Iterative Closest Point (GICP)
- Preprocessing filter
- L∞ distance (chebyshev distance) filter
- Voxel downsampling
- Algorithm refinements for better parallelization
- Intel CPU (OpenCL backend)
- Intel iGPU (OpenCL backend)
- NVIDIA GPU (CUDA backend)
note:
level_zero
backend is not supported.- AMD CPU is worked fine but not optimized.
- Intel Arc GPU is worked but too slow.
- Eigen
- GTest
- Intel oneAPI DPC++
- Intel oneAPI for NVIDIA® GPUs (optional)
- Intel GPU Driver (optional)
sudo apt update
sudo apt install libeigen3-dev libgtest-dev
For the latest information, please refer to the following URL:
# download the key to system keyring
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
# add signed entry to apt sources and configure the APT client to use Intel repository:
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
# install package
sudo apt install intel-cpp-essentials
For the latest information, please refer to the following URL:
# Add Intel®'s package signing key and APT repository:
sudo wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null && echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
# Add Codeplay's package signing key and APT repository:
sudo wget -qO - https://developer.codeplay.com/apt/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/codeplay-keyring.gpg > /dev/null && echo "deb [signed-by=/usr/share/keyrings/codeplay-keyring.gpg] https://developer.codeplay.com/apt all main" | sudo tee /etc/apt/sources.list.d/codeplay.list
# update apt repository
sudo apt update
# install package, specify cuda version
sudo apt install oneapi-nvidia-12.6
For the latest information, please refer to the following URL:
# add apt repository
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:kobuk-team/intel-graphics
# install compute related packages
sudo apt install -y libze-intel-gpu1 libze1 intel-metrics-discovery intel-opencl-icd clinfo intel-gsc
# install media related packages
sudo apt install -y intel-media-va-driver-non-free libmfx1 libmfx-gen1 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo
# install OpenCL
sudo apt-get install -y intel-ocloc
# add permission
sudo gpasswd -a ${USER} render
newgrp render
source /opt/intel/oneapi/setvars.sh
# build example
mkdir build && cd build
cmake ..
make
# show device list
sycl-ls
# # example output
# [level_zero:gpu][level_zero:0] Intel(R) oneAPI Unified Runtime over Level-Zero, Intel(R) UHD Graphics 750 12.1.0 [1.6.32567+19]
# [opencl:cpu][opencl:0] Intel(R) OpenCL, 11th Gen Intel(R) Core(TM) i5-11500 @ 2.70GHz OpenCL 3.0 (Build 0) [2025.19.4.0.18_160000.xmain-hotfix]
# [opencl:gpu][opencl:1] Intel(R) OpenCL Graphics, Intel(R) UHD Graphics 750 OpenCL 3.0 NEO [25.05.32567]
# [cuda:gpu][cuda:0] NVIDIA CUDA BACKEND, NVIDIA GeForce RTX 3060 8.6 [CUDA 12.8]
# specify the device to be used with `ONEAPI_DEVICE_SELECTOR`
# note: level_zero is not supported.
# Intel Arc GPU is worked but too slow.
# run example with OpenCL device (iGPU)
ONEAPI_DEVICE_SELECTOR=opencl:1 ./example_registration
# run example with CUDA device
ONEAPI_DEVICE_SELECTOR=cuda:0 ./example_registration
CPU
: Intel Core-i5 11500 (Power Mode: Performance)iGPU
: Intel UHD Graphics 750
process | CPU | iGPU | RTX 3060 |
---|---|---|---|
1. to PointCloudShared | 262.54 us | 713.59 us | 314.91 us |
2. Downsampling | 2233.76 us | 1558.17 us | 1942.60 us |
3. KDTree build | 1465.28 us | 1367.76 us | 1296.50 us |
4. KDTree kNN Search | 1175.28 us | 2468.82 us | 1552.91 us |
5. compute Covariances | 147.04 us | 418.48 us | 88.70 us |
6. update Covariance | 159.40 us | 116.78 us | 25.63 us |
7. Registration | 1276.92 us | 2730.83 us | 1465.20 us |
Total | 6720.22 us | 9374.43 us | 6686.45 us |
This library is released under Apache License