/taichi

Productive & portable high-performance programming in Python.

Primary LanguageC++MIT LicenseMIT


Latest Release downloads CI Docker Cloud Build Status Python Codecov Status

import taichi as ti

Taichi (太极) is an open-source, imperative, parallel programming language for high-performance numerical computation. It is embedded in Python and uses just-in-time (JIT) compiler frameworks (e.g. LLVM) to offload compute-intensive Python code to the native GPU or CPU instructions.

Advantages of Taichi:

  • Built around Python: Taichi shares almost the same syntax with Python, allowing you to write algorithms with minimal language barrier. It is also well integrated into the Python ecosystem, such as NumPy and PyTorch.
  • Flexibility: Taichi provides a set of generic data containers known as SNode (/ˈsnoʊd/), an effective mechanism for composing hierarchical, multi-dimensional fields. This can cover many use patterns in numerical simulation (e.g. spatially sparse computing).
  • Performance: Through the @ti.kernel decorator, Taichi's JIT compiler automatically compiles your Python functions into efficient GPU or CPU machine code for parallel execution.
  • Portability: Write your code once and run it everywhere. Currently, Taichi supports most mainstream GPU APIs, such as CUDA and Vulkan.
  • ... and many more features! A cross-platform, Vulkan-based 3D visualizer, differentiable programming, quantized computation (experimental), etc.

Getting Started

Installation

You can easily install Taichi with Python's package installer pip:

pip install taichi

If you want to try out the latest features, we also provide a nightly package:

pip install -i https://test.pypi.org/simple/ taichi-nightly

The nightly package can and will break from time to time!

Supported environments

  • Operating systems
    • Windows1
    • Linux
    • macOS
  • Python: 3.6 ~ 3.9 (64-bit only)
  • Compute backends
    • x64/ARM CPUs
    • CUDA
    • Vulkan
    • OpenGL (4.3+)
    • Apple Metal
    • WebAssembly (experiemental)

1. On Windows, please install Microsoft Visual C++ Redistributable first.

Your first Taichi program

Here's how you can program a 2D fractal in Taichi:

# python/taichi/examples/simulation/fractal.py

import taichi as ti

ti.init(arch=ti.gpu)

n = 320
pixels = ti.field(dtype=float, shape=(n * 2, n))


@ti.func
def complex_sqr(z):
    return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])


@ti.kernel
def paint(t: float):
    for i, j in pixels:  # Parallelized over all pixels
        c = ti.Vector([-0.8, ti.cos(t) * 0.2])
        z = ti.Vector([i / n - 1, j / n - 0.5]) * 2
        iterations = 0
        while z.norm() < 20 and iterations < 50:
            z = complex_sqr(z) + c
            iterations += 1
        pixels[i, j] = 1 - iterations * 0.02


gui = ti.GUI("Julia Set", res=(n * 2, n))

for i in range(1000000):
    paint(i * 0.03)
    gui.set_image(pixels)
    gui.show()

If Taichi is properly installed, you should get the animation below 🎉:

Documentation

Taichi's documentation is available at https://docs.taichi.graphics.

Contacts

We use these channels to report bugs, discuss design, show off demos and send announcements on a daily basis:

Should you spot any security issue, do not hesitate to report it by mailing to security@taichi.graphics.

Contributing

If you would like to contribute to Taichi, please check out the Contribution Guidelines.

A huge thanks to all of our amazing contributors!

Contributor avatars are randomly shuffled.

Resources

Demos

Lectures & talks


If you use Taichi in your research, please cite related papers: