Skip to content
forked from paralab/SymPyGR

SymPy based framework for optimized code generation for BSSN formulation of Einstein equation for heterogeneous platforms.

Notifications You must be signed in to change notification settings

vmiheer/SymPyGR

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 

Repository files navigation

SymPyGR

SymPy based framework for optimized code generation for BSSN formulation of Einstein equation for heterogeneous platforms.

Dendro is an adaptive meshing framework that enables solving large-scale computational problems on octree-refined meshes. The current version of dendro and dendro_sym , handle adaptivity by decomposing the domain into a collection of small regular blocks (uniformly refined), on which the code corresponding to the PDE are automatically generated (C/C++) from the symbolic expressions. While the overall framework works currently, there are several areas for improving performance and portability and these are the possible research topics. Note that although dendro supports distributed computing on large clusters, these improvements are only required at the single-node and possibly single-thread level, as the blocks generated by dendro are typically 16^3 to 256^3 in size. The topics listed below are tagged with the key focus areas, gpu, openmp, simd, graph.

  • graph: Sympy produces an expression tree that is sufficiently simplified. But, there are several repeated expressions within this tree that can be simplified by factoring out these expressions and evaluating them only once. The main focus of this task would be to develop algorithms for extracting common sub-expressions within sympy. This would most likely be done in python.
  • openmp, gpu Dendro produces a list of blocks that need to be scheduled across threads and GPUs. We currently support simple scheduling via openmp. Performance and load-balancing can be improved significantly by better scheduling of the blocks. Of particular interest is to device methods to scheduled blocks dynamically between GPUs and CPUs. This might have to be done in C/C++ to schedule the blocks. This C++ code can potentially be autogenerated from the python code.
  • gpu, simd As previously mentioned, the current implementation generates C++ code from the sympy expression trees. A very important contribution would be to add python code to generate for different architecture targets, such as
  1. default: pure C/C++ code
  2. avx2: SIMD code targeting 256-bit wide AVX2 architectures
  3. avx512: SIMD code targeting 512-bit wide architectures, such as the Xeon PHI
  4. cuda: CUDA code targeting nVidia GPUs, possibly with options targeting different generations.
  5. openCL, openACC : and others.

About

SymPy based framework for optimized code generation for BSSN formulation of Einstein equation for heterogeneous platforms.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 49.5%
  • Cuda 30.1%
  • Python 7.9%
  • C 7.3%
  • Fortran 2.3%
  • Objective-C 1.4%
  • Other 1.5%