Frequently Asked Questions (FAQ)
What is the name of the software: ITensor, iTensor, ITensors?
The name of the software is ITensor, with a capital "I", capital "T", and no "s" at the end. The name stands for "Intelligent Tensor", referring to the "intelligent index system".
Suggested ways to refer to ITensor are "the ITensor software" or "the ITensor library" or just "ITensor".
Please do not spell it as "iTensor" or "ITensors" or "Itensors" etc.
A possible confusion is that our flagship software package is named ITensors.jl
. This is because the main type is called ITensor
so our module had to have a different name, hence ITensors
.
Does ITensor support GPUs (graphics processing units)?
Yes! ITensor has support for various GPU backends such as NVIDIA CUDA (including cuTensor), AMD ROCm, and Apple Metal.
The GPU backends take advantage of Julia's automatic package extensions feature, so for example to use CUDA, simply add using CUDA
to the top of your code. The ITensor CUDA extension will automatically load. A few lines of code transfers your initial tensors or tensor networks to GPU and the rest happens automatically. You may also find that using lower-precision types such as Float32
gives even higher performance, though take care if you need high-precision results and test against reference calculations.
For further information, see this documentation page about using GPU backends in ITensor and feel free to ask us questions on the forum if you encounter issues. We try to support as many features as we can, but certain vendors may not yet support various algorithms or numerical types. Operations that are not provided by the vendor, like certain matrix factorizations, may therefore be performed on CPU, and double-precision arithmetic may not be available on certain backends.
Why do you use Julia? Why have a Julia and C++ version?
ITensor was originally written in C++ around 2010 before Julia was available. C++ was a good choice and continues to be an strong language for high-performance computing.
We ported ITensor completely to Julia to benefit from Julia's high performance (it is a compiled language), its expressivity (it offers a robust type system as well as a dynamic, generic programming experience), while avoiding the common "two-languge problem" of using a slower interface language with a high-performance back-end language. The choice of Julia has been very successful for us and delivers both high performance and productivity. It is also easy to call Julia code from other languages such as Python.