About HILA project and Our Goal

The Vision, Mission and Developing Philosophy

As an user, living in digitalized era, where even hand-holding devices rely on Heterogeneous System Architecture (HSA), is wonderful and enjoyable in many ways. The computing powers provided both by multiple CPU cores and Streaming Multiprocessors from GPUs pleasure us as users while also give us many challenges as developers of CFT simulation softwares.

Routines, which could release us from struggling on computing technologies with HSA and then allow us focus on innovating modeling and algorithms, are always expected and welcomed.

This is what HILA project could offer.

Developed under modern C++ standards, HILA is a Lattice Field Theory programming framework, targeted at HPC simulations. Design features of HILA include

(1) Comprehensive class templates of commonly used mathematical and physical objects, such as matrix, which generally work as operators of Lie algebra for non-Abelian Lie groups. A carefully implemented field class template over lattice can accept tensors with arbitrary rank. This make writing CFT applications straightforward and intuitive through HILA's APIs.

Behind the scenes hila takes care of MPI layout and communications. It lays out the lattice fields differently for different computing platforms: 'array of structures' (standard), 'array of structures of vectors' (AVX-type), or 'structure of arrays' (GP-GPU-type).

(2) Depending on the hardware platform, optimized executables for specific hardware architectures/protocols will be produced. Details of the implementations of parallelization on different computing architecture are hidden from the HILA's user, this means same application source codes built upon HILA's APTs could automatically run on platforms with different hardware architectures. This potability is achievable on MPI parallelization, GP-GPU parallelization as well as AVX vectorization vectorization.

The key tool for this level of potability is HILA preprocessor (hilapp). It is a C++ source-to-source transcompiler utilizing the libtooling library of the Clang compiler. It converts HILA application C++ to platform-specific C++ code, which is passed to appropriate compilers for the platforms. This process requires Abstract Syntax Tree (AST) analysis, which is supported by libtooling. There are few simple and helpful tutorials demonstrate how this work