zenustech / zpc

zenus parallel computing library for zenus physics-based simulations
Mozilla Public License 2.0
79 stars 10 forks source link
cuda gpu hpc math physics simulation

Zenus Simulation

Zenus Simulation is the codebase zensim maintained by Zenus Tech, which delivers great parallel computing efficiency for physics-based simulations within a shared-memory heterogeneous architecture through a unified programming interface on multiple compute backends.

This repo is going through rapid changes, and we do not promise ABI compatibility from commit to commit for the moment.

Document

See git wiki page for more build details. See Specification for more usage info.

Compilation

This is a cross-platform C++/CUDA cmake project. The minimum version requirement of cmake is 3.18, yet the latest version is generally recommended. Please install cmake through official website or python3-pip, since the cmake version in apt repo is behind.

When CUDA is enabled, the required CUDA version is 11.4+ (for c++17 and latest cuda utilities).

Currently, supported OS are Ubuntu 20.04+ and Windows 10, and tested compilers includes gcc10.0+, clang-11+, vs2019+.

Build

Before building this framework, please first manually configure these external dependencies, i.e. openvdb if ZS_ENABLE_OPENVDB is set to TRUE. Then pull all dependencies by

git submodule init
git submodule update

If CUDA (>=11.4) is installed and required, be sure to set ZS_ENABLE_CUDA=On first.

Configure the project using the CMake Tools extension in Visual Studio Code (recommended), or follow the build instructions in git wiki.

In addition, make sure to install zlib for building partio when building on linux.

sudo apt install zlib1g

Integration

Directly include the codebase as a submodule. Or install this repo then use find_package(zensim). If the installed package is no longer needed, build the uninstall target as with the install target.

Credits

This framework draws inspirations from Taichi, kokkos, raja, MGMPM, GPU LBVH.

Dependencies

The following libraries are adopted and made fully localized in our project development:

For spatial data IO and generation, we use these libraries in addition:

We import these (less-frequently used) libraries as well: