/essentials

gunrock's essential pieces: modular, reusable, easy-to-modify

Primary LanguageC++


Apache 2

gunrock/essentials

Redesigning gunrock with a bottom-up approach with the fundamental goal of making the code easy to write, rewrite and understand. With the current version of gunrock, there are a lot of different modules very heavily connected that don't need to be as connected at all, essentials splits these up into separate #include modules, and you may include only what you need.

From the application/algorithm writing perspective, essentials tries to minimize the management side of things and reduces the debugging burden using C++ best practices and tools. Some changes that have significantly reduced gunrock's application level code is the use of smart memory management (i.e. no manual release of memory and possible memory leaks), exception handling (instead of keeping around cudaError_t status and manually checking it for errors), and constant expressions.

The goal of this version of gunrock and future changes is to easily support changing slow performant code with faster implementations as they are made available, and to promote code reuse where available. Essentials also tries to implement API, algorithms and containers' designs very close to what C++ standard library already supports, relying on thrust (a CUDA parallel libraries), CUB and handwritten code when needed. So, for example, if you are wondering how gunrock::array<> works, simply look at std::array<> on C++ reference guide.