Named after Antonie van Leeuwenhoek, inventor of the microscope.
Luwen is a user-mode abstraction layer for accessing Tenstorrent accelerator hardware, designed to be used as a common interface for tooling development across hardware generations. It runs on the host system and manages communication with lower-level drivers and firmware.
There are three supported use cases:
- High-level interface to software tooling allowing all syseng diagnostics
collectable via
tt-smiandtt-modto be read back and interacted with as a library.- Only supports PCIe connections and remote connections via PCI.
- Ignores implementation details of using communication channels, such as TLB allocation and core selection.
- General chip discovery and initialization, replacing
create-ethernet-mapandtt-smi. Will probably also add the ability to issue resets. - Low-level syseng-only debug capability (via Python bindings, as
pyluwen).- To avoid needing to have multiple in-flight stacks, access the implemented communication APIs directly.
- Direct access to the types defined in
luwen-pci, allowing modification of TLBs and cores being used.
See the included INSTALL.md for detailed instructions on how
to build and install Luwen.
Luwen officially supports the following Tenstorrent hardware:
- Wormhole
- Blackhole
Please ensure you have a supported firmware version installed on your device.
You can flash the firmware using tt-flash.
Important
The current minimum supported firmware version is: v18.
Luwen communicates with your device through a kernel-mode driver. You can find instructions on installing the driver on the project homepage.
Important
The current minimum supported driver version is: v2.0.0.
Cargo — Rust's package manager — allows for a workspace of several crates to be specified within its manifest. Within this project, workspace crates are used with the structure as follows:
./
├── Cargo.lock # cargo lockfile
├── Cargo.toml # cargo manifest
├── README.md # this document
├── ...
├── apps/ # use-case applications
├── bind/ # language bindings
│ ├── libluwen/ # bindings for C++
│ └── pyluwen/ # bindings for Python
├── crates/ # implementation crates
│ ├── luwen-api/ # core generalized API
│ ├── luwen-def/ # common definitions
│ ├── luwen-kmd/ # low-level driver API
│ └── luwen-pci/ # PCI implementation
├── examples/ # application examples
├── src/ # top-level library
└── tests/ # integration tests
This project is licensed under Apache License 2.0. You have permission to use this code under the conditions of the license pursuant to the rights it grants.
This software assists in programming Tenstorrent products. Making, using, or selling hardware, models, or IP may require the license of rights (such as patent rights) from Tenstorrent or others.