-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
PCL GSoc Ideas
PCL returned to GSoC after a long hiatus in 2019. This year, PCL is looking for contributions and active community members from all corners of the coding community in the roles of
- technical writers
- designers
- web developers
- C++ developers
- CI/CD experts
- polyglots
- wizards
and everything else in between.
Name | Skills needed | Difficulty |
---|---|---|
Update Website | RST, Sphinx, Doxygen, Python | Medium |
Walk through documentation | Technical writing, Doxygen | Medium |
Reference Manual Documentation | Technical writing, Doxygen, Sphinx | Low |
2022 brings in a new format of projects: they can be either short as well as long term projects. Unlike 2021, the long term allows projects which require more time investment.
New Ideas:
Name | Skills needed | Difficulty |
---|---|---|
[Integration of Better Filtering from GSoC 2021] | C++ | Medium |
Benchmarks and Performance monitoring | C++, Benchmarking, Github Worfklow | Medium-Low |
Older ideas with some existing work:
Name | Skills needed | Difficulty |
---|---|---|
Compilation time reduction | C++, C++ compilation, CMake | High |
Bindings for Python | C++, python, clang | Medium |
Improving confidence in builds | Bash, Static Analyzers, GitHub Workflow | Low |
2021 is a special year in the sense that the projects need to be much smaller. This potentially allows "easier" projects to be curated by the projects. Moreover, the reduced time requirement makes GSoC accessible to more students.
New Ideas
Name | Skills needed | Difficulty |
---|---|---|
Enable CUDA builds on CI | CUDA, C++, CMake | Medium |
Better Voxel Filter | C++ | Low |
Bindings for Python | C++, python, clang | Medium |
Shift to fixed-width integers | C++ | Low |
Benchmarks and Performance monitoring | C++, Benchmarking, Github Worfklow | Medium-Low |
Older ideas with some existing work:
Name | Skills needed | Difficulty |
---|---|---|
Compilation time reduction | C++, C++ compilation, CMake | High |
Improving confidence in builds | Bash, Static Analyzers, GitHub Workflow | Low |
Make a better CMake | CMake | Medium |
Refactoring and Modernization | C++ | Low |
Unified API for PCL algorithms | C++ | Medium-High |
Name | Skills needed | Difficulty |
---|---|---|
Update Website | RST, Sphinx, Doxygen, Python | Medium |
Walk through documentation | Technical writing, Doxygen | Medium |
Reference Manual Documentation | Technical writing, Doxygen, Sphinx | Low |
Name | Skills needed | Difficulty |
---|---|---|
Benchmarks and Performance monitoring | C++, Benchmarking | Medium-Low |
Compilation time reduction | C++, C++ compilation, CMake | High |
Improving confidence in builds | Bash, Static Analyzers | Low |
Make a better CMake | CMake | Medium |
Refactoring and Modernization | C++ | Low |
Binding interfaces for other languages | C++, libtooling, pybind/cython,etc. | High |
Unified API for PCL algorithms | C++ | Medium-High |
Name | Skills needed | Difficulty |
---|---|---|
Update Website | RST, Sphinx, Doxygen, Python | Medium |
Walk through documentation | Technical writing, Doxygen | Medium |
Reference Manual Documentation | Technical writing, Doxygen, Sphinx | Low |
As the community grows, soft-skills and community outreach become more important. With the change in community, it has become important to update the overlooked facet of PCL and make it more accessible to the community
- Create a static website on Github pages or similar
- Provide better support for documentation:
- allow viewing past releases
- prevent invalidation of links as much as possible, while updating the content
- Integrate with RTD (documentation+tutorials) to make it the go-to resource for PCL
- Allow easy additions of blogs including general updates, GSoC/GSoD
- (if possible) RSS feed
- (Stretch goal) Migrate all content from existing website, including
- ability to create blog posts (using Jekyll or similar)
- lost content (from internet archives)
Includes Tutorials, Guides and Examples
- Update to reflect forward movement in PCL
- Detect and increase coverage
- Improve documentation coverage
- Migrate front-end to sphinx
- Generate and host all documentation on Github
- Integrate search + landing page with Tutorials and Walk-through
- (Stretch goal) Add CI test for missing documentation in "new code"
As PCL has matured, it has discovered missing features: features that are more than just the core code, features that are vital for delivering continuous improvements. We look forwards for the ideas/projects with a minor or negligible addition of "code features" as output. Some of the wish-list features are:
Mvieth has started the work of adding benchmarks that can be run offline. The aim is two fold:
- Increase coverage of benchmarks
- Better integration of benchmarks
While increasing coverage implies adding more (and better) benchmarks, a better integration would involve:
- Nightly CI jobs to measure performance on
master
- (Stretch goal) Incremental bench-marking on PR
- Refactoring/CMake changes/Sub-Modules to reduce compilation time
- 100% reproducible incremental builds (with a constant config)
- (Stretch goal) Compile time reduction on CI using (reading resource)
- incremental builds
- compiler caches
- PCH
- Unity builds
This is a wide ranging topic, with something for everyone. This is broken into bite-sized projects, each with a unique challenge.
- Incremental builds on CI (Github Workflow)
- More warnings and sanitizers for CI (CMake, Compilers)
- Integrate
clang-tidy
, static-analyzers (C++ tooling, easier for new-comers) - Increasing test coverage (C++)
- ABI/API breakage monitoring for PR (command line tools, scripting)
- More DRY, less wizardry
- Automatic module discovery
- Automatic test discovery (refactoring test code layout is ok)
- Out-of-source PCL-contrib super-module similar to OpenCV-contrib
A big issue with the CUDA and GPU libraries in PCL is the inability to test them on the CI. Thankfully, AMD (yes, you read that correct) has a solution: HiP. HiP compiler allows compilation of CUDA code to run on either AMD GPUs or even on the CPU. Thus, a test for CUDA can be compiled and run on the free tiers of CI which don't offer any GPU :)
For more information, please refer to:
- https://rocmdocs.amd.com/en/latest/Programming_Guides/Programming-Guides.html
- https://rocmdocs.amd.com/en/latest/Programming_Guides/HIP-porting-guide.html
Some repositories related to HiP are:
- https://github.com/ROCm-Developer-Tools/HIPIFY (convert CUDA code to HiP code)
- https://github.com/ROCm-Developer-Tools/HIP
- https://github.com/ROCm-Developer-Tools/HIP-CPU
- https://github.com/ROCm-Developer-Tools/HIP-Examples
Old API designs result in greater friction between how developers prefer to use vs how PCL lets developers use the API. Overhauling API used to be difficult but with libtooling
and clang-tidy
, it has been made manageable. Some of the ideas for guiding PCL towards a more modern API are:
- Fluent style API for algorithms
- Extend
format
andclang-tidy --fix
to other modules
PCL used integer types like int
, which make it hard to present a uniform interface on multiple platforms. As such, we're migrating slowly to fixed width types, with the first wave focused on the type of the indices used by PCL.
There are a number of voxel filters in PCL, with very similar code. Analysis of the code reveals that there are 3 orthogonal decisions taken in each implementation:
- Sub-divide the space into voxels (spherical, cubic)
- Merge points (average, centroid, etc.)
- Filter points based on some statistic (minimum count, stddev, etc.)
A well written single implementation would be able to cover all the current classes, reduce bugs due to divergence of code as well as allow easy updates like parallelism and vectorization.
PCL is missing a lot of state-of-the-art implementations. Suggestions/implementations of such algorithms are highly welcome since highly performant, cutting edge algorithms are a core component of PCL. Apart from them, the following features are also on the wish-list of PCL:
Wrappers for (Python, Matlab/Octave, C) (1 project per wrapping isn't worth 3 months)
- Needs auto-discovery (like binder)
- Reduce drift between core code and bindings
- Reduce maintenance burden
- Tests
- Existing wrappers for Python for inspiration
- (Stretch goal) Support different PCL releases and Language versions
Please find a detailed document here
This is a continuation of the 2020 GSoC. The 2020 GSoC involved a very deep dive into different strategies for auto-generating bindings with minimal effort. This would involve making the tooling better. While the existing code can't generate bindings, the goal is almost within reach. To generate bindings automatically, new development would need to be focused on:
- Generate list of files to read using
compile-commands.json
- Generate dependency (for compilation) using CMake File API
- Convert Clang's AST into a Pybind11 compatible code
Please read the relevant official guides to ease your journey.
For interested students:
- Please announce yourself and your interest in PCL at the discord channel
- Please have a draft proposal ready in the format of a git-repo/google doc to facilitate discussion
- Based on your interests, you will be assigned a small task to evaluate your skills
For those interested in becoming mentors:
- Please note that mentoring and co-mentoring can take a lot of effort from your side (from 10 hours a week or 1 hour a week depending on the project, the student, the problems, etc.)
- Please announce yourself and participate in discussions at the discord channel
- Feel free to PM existing maintainers/mentors
- "Teaming up" as co-mentors is an option if you feel you will not be able to be the sole mentor on a project. For projects with existing mentor(s), it is upto them to accept/reject a co-mentor
Alphabetical list of mentors
- kunaltyagi
- SergioRAgostinho
- taketwo and others
If any of the following ideas are not implemented, please notify kunaltyagi on the discord channel. They will be added to the ideas list.
If any of the following projects are not integrated in PCL, please notify kunaltyagi on discord channel. They will be slated for review and addition in PCL-core (if maintainers are found) or PCL contrib (like opencv-contrib) (if there is a lack of maintainers)