Uni10 is an open-source C++ library designed for the development of tensor network algorithms. Programming tensor network algorithms is tedious and prone to errors. The task of keeping track of tensor indices while performing contraction of a complicated tensor network can be daunting. It is desirable to have a platform that provides bookkeeping capability and optimization.
This software distinguishes itself from other available software solutions by providing the following advantages:
Fully implemented in C++.
Aimed toward applications in tensor network algorithms.
Provides basic tensor operations with an easy-to-use interface.
Network class to process and store the details of the
graphical representations of the networks.
Provides a collection of Python wrappers which interact with the Uni10 C++ library to take advantage of the Python language for better code readability and faster prototyping, without sacrificing the speed.
Provides behind-the-scene optimization and acceleration.
Major API changes,
UniTensor are changed to class templates.
Linear algebra operations are changed to global functions.
Official CUDA GPU support for double precision.
New architecture design to allow support for different architectures and customized containers and linear algebra libraries.
Optimization of the network contraction engine to reduce the memory requirements and speedup computation.
PyUni10 build is moved out of the main tree. It will be supported via Anaconda Cloud and PiPy soon.
HDF5 support is removed temporarily and will be restored soon.
See GPL and LGPL for copyright conditions.
See Release Notes for release notes and changes.
See install guide
The latest Uni10 source code can be downloaded from GitLab.
C++ compiler with C++11 support
To build Un10, follow the following steps:
Create a build directory
Cmake to generate makefile
Build library and exmamples
Install library and examples (May require root access)
Using system c++, blas and lapack
> mkdir build > cd build > cmake </path/to/uni10/> > make > sudo make install
The installation path defaults to
To override the default path, use
> cmake -DCMAKE_INSTALL_PREFIX=</installation_path> </path/to/uni10/>
To use MKL and Intel compiler:
> cmake -DBUILD_WITH_MKL=on -DBUILD_WITH_INTEL_COMPILER=on </path/to/uni10/>
If cmake failes to find blas and lapack, specify the libraries by
> cmake -DBLAS_LIBRARIES=</path/to/blas> -DLAPACK_LIBRARIES=</path/to/lapack> </path/to/uni10/>
|Option||Description (Default value)|
|BUILD_WITH_MKL||Use Intel MKL for lapack and blas (off)|
|BUILD_WITH_INTEL_COMPILERS||Use Intel C++ compiler (off)|
|BUILD_EXAMPLES||Build C++ examples (on)|
|BUILD_DOC||Build Documentation (off)|
|BUILD_CUDA_SUPPORT||Build Library for CUDA GPUs (off)|
|CMAKE_INSTALL_PREFIX||Installation location (/usr/local/uni10)|
Ying-Jer Kao (National Taiwan University)
Pochung Chen (National Tsing-Hua University)
Yun-Hsuan Chou (National Taiwan University)
Kai-Hsin Wu (National Taiwan University)
Chih-Yuan Lee (National Taiwan University)
Chen-Yen Lai (Los Alamos National Laboratory)
Yen-Hsin Wu (National Tsing-Hua University)
Chung-Yu Lo (National Tsing-Hua University)
Yi-Hao Jhu (National Tsing-Hua University)
Ian McCulloch (University of Queensland)
Adam Iaizzi (National Taiwan University)
Yun-Da Hsieh (Code Base, GPU)
Tama Ma (CMake script)
Sukhbinder Singh (Matlab Wrapper)
Clone the project from GitLab and use it.
Report bugs by creating issues at Uni10 Repo
Fork us on GitLab.
Create Merge Requests.