8000 GitHub - yas/sycl_points: A C++ header-only point cloud processing library accelerated with SYCL.
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

yas/sycl_points

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sycl_points

A C++ header-only point cloud processing library accelerated with SYCL for heterogeneous computing systems.

Overview

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.

Key features

  • 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

Future optimization work will include

  • Algorithm refinements for better parallelization

Supported Device

  • 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.

Requirements

Install dependencies

Eigen and GTest

sudo apt update
sudo apt install libeigen3-dev libgtest-dev

oneAPI DPC++

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

Intel oneAPI for NVIDIA® GPUs (optional)

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

Intel GPU Driver (Optional)

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

Build and run example

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

Benchmark

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

License

This library is released under Apache License

About

A C++ header-only point cloud processing library accelerated with SYCL.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 98.5%
  • CMake 1.5%
0