Skip to main content

logo.png

codecov

XTC

Links

Refer to documentation at https://xtc-tools.github.io/xtc

Refer to tutorials here and to additionnal developers documentation here.

Overview

XTC is a domain-specific dataflow graph compiler for linear algebra operations. It provides:

  • Operational DSL: Define computation graphs with tensors and operators
  • Scheduling DSL: High-level transformations (tiling, parallelization, vectorization, etc.)
  • Multiple backends: MLIR (linalg + transform), TVM (Tensor IR), JIR (INRIA internal)
  • Autotuning: Definition and exploration of the optimization space

Build & Development

Installation

If needed, install uv following the instructions here.

Debian-like x86_64 or aarch64 Linux distributions (Python: 3.10 to 3.14 inclusive):

sudo apt install python3 python3-dev build-essential libomp5 binutils binutils-aarch64-linux-gnu binutils-x86-64-linux-gnu
sudo apt install libpfm4-dev # Optional: interface to Linux perf counters
sudo sysctl kernel.perf_event_paranoid=1 # Optional: give access to hardware counters
uv venv -p 3.12 && source .venv/bin/activate
uv pip install -e '.[dev]'
make test

MacOs M1+ macos-14/macos-15 (Python: 3.10 to 3.14 inclusive):

brew install libomp x86_64-linux-gnu-binutils aarch64-elf-binutils
export DYLD_LIBRARY_PATH="/opt/homebrew/opt/libomp/lib:$DYLD_LIBRARY_PATH"
uv venv -p 3.12 && source .venv/bin/activate
uv pip install -e '.[dev]'
make test

Note that [dev] extension installs both mlir and tvm backends in addition to development tools.

Available extensions are:

  • [mlir]: MLIR backend
  • [tvm]: TVM backend
  • [test]: develop, docs and tests tools
  • [default]: mlir + tvm
  • [dev]: default + test

Using a local LLVM / MLIR build

By default XTC uses the LLVM/MLIR toolchain shipped in its Python wheels. To use a local LLVM checkout instead (e.g. to test compiler changes), point XTC at your build directory ($LLVM_BUILD below). Two levels are possible.

Binaries only. Override opt, llc, mlir-opt and mlir-translate while keeping the wheel's Python bindings — the simplest option, e.g. when your changes live in the LLVM middle-end / back-end:

export XTC_LLVM_PREFIX=$LLVM_BUILD   # providing bin/opt and bin/llc
export XTC_MLIR_PREFIX=$LLVM_BUILD   # providing bin/mlir-opt and bin/mlir-translate

Binaries and Python bindings. The MLIR bindings are a native extension, so the interpreter must match the Python version they were built for (check the ABI tag under $LLVM_BUILD/tools/mlir/python_packages/mlir_core/mlir/_mlir_libs). Create a matching venv if, install XTC without the MLIR wheels, build the runtime support libraries, then prepend the bindings to PYTHONPATH:

uv venv -p 3.14 .venv-local && source .venv-local/bin/activate
uv pip install -e '.[tvm]'

export PYTHONPATH=$LLVM_BUILD/tools/mlir/python_packages/mlir_core:$PYTHONPATH
export XTC_MLIR_PREFIX=$LLVM_BUILD
export XTC_LLVM_PREFIX=$LLVM_BUILD
export XTC_MLIR_TARGET=llvmir

Code quality

Code quality requirements:

  • Type annotations: Strict pyright mode, full annotations required
  • Formatting: Ruff (line length 88)
  • License headers: BSD-3-Clause required on all source files
  • All checks must pass before merge

Type checking:

make check-type          # Run both pyright and mypy
pyright                  # Run pyright only
mypy                     # Run mypy only

Formatting:

make format              # Apply all formatting (license + ruff)
make check-format        # Check formatting without modifying files

Testing structure:

  • tests/pytest/unit/: Core interface unit tests
  • tests/pytest/{mlir,tvm}/: Backend-specific tests
  • tests/filecheck/: Lit+FileCheck functional tests for code generation

Global test commands:

make test                # Run minimal unit tests
make check               # Run ALL acceptance tests (required for contributions)
make check-pytest        # Run pytest suite only
make check-lit           # Run LIT tests for LLVM IR target
make check-lit-c         # Run LIT tests for C target
pytest tests/pytest/unit # Run specific test directory

Running individual tests:

# Single pytest file
pytest tests/pytest/unit/test_specific.py -v

# Single lit test
lit -v tests/filecheck/backends/specific_test.py

# C target for lit tests
XTC_MLIR_TARGET=c lit -v tests/filecheck/backends/specific_test.py

Dependencies update

Python package dependencies are listed in dependencies.toml with definition of groups and groups dependencies.

Always update dependencies there and run make dependencies to update pyproject.toml before commit.

Releases

Package versions are derived from Git tags. Successful updates to main are published to TestPyPI as development versions, while tags of the form xtc-vX.Y.Z are published to PyPI. See the release guide for the release procedure and required trusted-publishing configuration.

Architecture

Core Abstractions (src/xtc/itf/)

Abstract interfaces defining the compilation pipeline:

  • data/ - Tensor, DataType, ShapeType
  • operator/ - Linear algebra operator interface
  • graph/ - Graph, Node, Operation abstractions
  • back/ - Backend interface
  • schd/ - Scheduler and Schedule abstractions
  • comp/ - Compiler interface
  • exec/ - Executor and Evaluator interfaces
  • search/ - Search space exploration interface

Backends (src/xtc/backends/)

Exposed backends:

  • mlir/ - MLIR backend using linalg + transform dialects
  • tvm/ - TVM backend using Tensor IR + Schedule APIs

XTC also supports multiple MLIR Targets for the code generation:

  • llvmir (default)
  • c
  • nvgpu

To force the use of a specific target, you can set the env variable XTC_MLIR_TARGET=<mlir-target>.

The MLIR backend can be extended using the SDist extension, which provides distribution primitives. To install SDist, follow the instructions in docs/develop/optional_backends.md, in the "MLIR development version" section.

Note that the nvgpu target requires a recent version of Cuda (tested with Cuda 13.0). By default, it tries to find Cuda at /usr/local/cuda, but it can be overridden with the CUDA_INSTALL_DIR env variable. The performance counters can be accessed is the GPU has a compute capability >=7.5.

Compilation Pipeline

  1. User defines Graph with Tensors and Operators
  2. Backend created from Graph
  3. Scheduler applies transformations and produces Schedule
  4. Compiler generates executable Module
  5. Executor/Evaluator runs and measures performance

CLI Tools (src/xtc/cli/)

  • mlir-loop - High-level scheduling for MLIR linalg operators
  • mlir-backend - MLIR backend wrapper
  • loop-explore - Autotuning and space exploration
  • loop-display - Visualization of exploration results

AI assistants

To create agent guidance files from this README: make agents (AGENTS.md) or make claude (CLAUDE.md)

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xtc_tools-0.3.1.tar.gz (729.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xtc_tools-0.3.1-py3-none-any.whl (323.7 kB view details)

Uploaded Python 3

File details

Details for the file xtc_tools-0.3.1.tar.gz.

File metadata

  • Download URL: xtc_tools-0.3.1.tar.gz
  • Upload date:
  • Size: 729.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for xtc_tools-0.3.1.tar.gz
Algorithm Hash digest
SHA256 c056cfbde2b0665de04fc8656d0bebe1d1bc193d9960925c15758237a6d39e92
MD5 bc7eea7464ec4e0d99b2bc5a5058b3b8
BLAKE2b-256 fec6b6013c679043f06e2d13a8532d4852597ecf2e4fb1d5f4e6825a28e4a2b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xtc_tools-0.3.1.tar.gz:

Publisher: xtc-tests.yml on xtc-tools/xtc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file xtc_tools-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: xtc_tools-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 323.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for xtc_tools-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1502df77b03f17d9131c2150287ebaab5a30d0207ce52c0892629fed276bf29e
MD5 d15836d2d18f9783e5e03ba054577f4e
BLAKE2b-256 8e5fb9accbce70d35a46e40b14804ef39ca5230dedc81407ddb12e45724d6dd7

See more details on using hashes here.

Provenance

The following attestation bundles were made for xtc_tools-0.3.1-py3-none-any.whl:

Publisher: xtc-tests.yml on xtc-tools/xtc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page