Skip to content

Nosenzor/Awesome-CPP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 

Repository files navigation

Awesome-CPP

My Awesome C++ List : Quick Notes.

Blogs & Conferences

Confs

Blogs

Performance

Multithreading

Beyond OPenMP and basic multithreading from the STL one could largely benefit to use a task based multithreading library to reach 95% of the top performance in less than 1% of the coding time !

  • TBB / oneTBB : The Threading Building Blocks, that's my default go to threading library, modern (range support for long time), very efficient, portable (I successfuly used it on Windows x86/x64, Linux x86/x64, MacOS x64/arm64), with nice algorithms implemented. It also comes with some thread safe containers like vectors, and unordered set and map. And a dedicated allocator. TBB.

Notes : ** Microsoft has based its PPL on TBB (PPL is a subset of TBB). ** GCC C++ STL and Microsoft VisualC++ STL have both based based their C++17 parallel-STL on TBB. Nevertheless, I observed the performance to be lower than a direct use of TBB.

  • Taskflow : A very active project that i want to try asap. Looks like a serious competitor to TBB with a focus on taskgraph but also support the required parallel_for and reduce. Claims to be faster than TBB ! https://github.com/taskflow/taskflow Taskflow can even target aGPU using a Cuda backend, although not very portable it can really help to have only one API to deal with !

  • HPX : HPX is developed by the STE||AR group. It offers a STL-lke interface to some algorithms like delayed/asynchronous function, for_loop, etc ... It claims to be the pre-standard STL and to focus on high-performance computing.HPX's doc here and HPX Github here

  • I'd like to add SYCL in this list but it's too low level, imo. Plus it's not as universal as it should (aim to) be. I'd like to see more backends here (Apple wake up!) or a more general one. Although it worths to mention the work from OpenSYCL / hipSYCL adn triSYCL. BTW, triSYCL is built on top of TBB (again !!) for the CPU backend, so that makes it cpu generic. The installation of SYCL system is still a bit cumbersome :-(

SIMD

One can directly use AVX or neon instructions directly, but the algorithms are quite hard to write and to read, and you wouild need to write 100% of the algorithm for another instruction set. What if you can use a library that express a generic way to write SIMD like loop and take care of the low-level instruction ?

Memory Allocators

Excellent talks

Books and papers

Some Perf tracker s

Modern C++

Other Awesome lists

Geometry

Very cool General Mesh and Cloud of Points Libraries

  • The Polygon Mesh Library(PMP) : http://www.pmp-library.org by Daniel Sieger and Mario Botsch. A general libraires with a high quality toolbox on Meshes (Remeshing, cleaning, open/write different format) with a viewer.License : MIT
  • OpenMesh : http://www.openmesh.org/ or https://www.graphics.rwth-aachen.de/software/openmesh/ from the Aachen University. Founded by some of my most inspiring researchers Pr Leif Kobbelt and Marcel Campen. OpenMesh serves as a foundation to the PMP Library too !. Can be found as a vcpkg packet ! Open Mesh introduced the famous Half-Edge data structure and provide a lot of tools (decimation, read/write STL/OBJ/OFF) and moreover can be easily extended. Have a python binding... what else? License : BSD V3
  • TriMesh (from Szymon Rusinkiewicz) : https://gfx.cs.princeton.edu/proj/trimesh2/ adapted by Jeroen Baert : https://github.com/Forceflow/trimesh2 although a bit old in its implementation its simplicity is its asset. Can read and write many differents types (OFF, OBJ, STL ..and older exotic types !) License : GPL
  • LibIGL : https://libigl.github.io from Alec Jacobson and Daniele Panozzo and others. A header only library :-)

Dealing with numerical problems

Polygon Triangulation

Other Geometry tools

  • PolyLabel : https://github.com/mapbox/polylabel. A library to find the "polygon pole of inaccessibility, the most distant internal point from the polygon outline (not to be confused with centroid)".

GUI

CMAKE and Build Tools

As a beginner in CMake i'd need a lot of tutorials to master this powerful tool !!

About

My Awesome C++ List

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published