# Technologies Used To perform these simulations, **Nassu** combines the versatility of [Python](https://www.python.org/) and the performance of [CUDA](https://developer.nvidia.com/cuda-toolkit) to run simulations using all compute powers of GPUs. The number of libraries, great community and higher level abstractions of Python allows for a faster development compared to low level languages such as C or C++. Despite it being interpreted and a slow language, its interoperability with C allows program to use C code in performance critical code. In this sense, the [cupy](https://cupy.dev/) library have capability of managing GPUs and run code using them. To generate the custom code optimized for each simulation configuration Nassu uses [jinja](https://jinja.palletsprojects.com/en/3.1.x/) as template language and [sympy](https://www.sympy.org/en/index.html) for symbolics mathematics, because LBM and other models used are composed by a great number of equations that must be combined with each other, so this is done through symbolics mathematics. ```{note} This architecture is greatly influenced by [Sailfish](https://doi.org/10.1016/j.cpc.2014.04.018) ``` So Nassu uses Python to setup the simulation and generate C/CUDA code, after that it runs the simulation through the C/CUDA kernels, using the GPU capabilities.