https://github.com/tenstorrent/tt-umd
UMD requires Tenstorrent's kernel-mode driver
Required Ubuntu dependencies:
sudo apt install -y libhwloc-dev cmake ninja-build
Suggested third-party dependency is Clang 17:
wget https://apt.llvm.org/llvm.sh
chmod u+x llvm.sh
sudo ./llvm.sh 17
To determine whether your system requires hugepage configuration, run the provided script:
./scripts/iommu_detect.sh
1G hugepages are required for shared device/host memory. Techniques for setup:
- Recommended: the tt-system-tools repository contains a .deb package which will configure your system
sudo dpkg -i tenstorrent-tools_1.1-5_all.deb
- Alternative: Metal project provides instructions and a script.
- For experts:
- Put system IOMMU in passthrough mode or disable it
- Allocate 1 or more 1G hugepages
- Mount the hugetlbfs at /dev/hugepages-1G (e.g.
mount -t hugetlbfs hugetlbfs /dev/hugepages-1G -o mode=777,pagesize=1024M
)
If your system IOMMU is enabled, no hugepage setup is required.
To build libdevice.so
:
cmake -B build -G Ninja
cmake --build build
Tests are build separatelly for each architecture.
Specify the ARCH_NAME
environment variable as grayskull
, wormhole_b0
or blackhole
before building.
You also need to configure cmake to enable tests, hence the need to run cmake configuration step again.
To build tests:
cmake -B build -G Ninja -DTT_UMD_BUILD_TESTS=ON
cmake --build build
To build with GCC, set these environment variables before invoking cmake
:
export CMAKE_C_COMPILER=/usr/bin/gcc
export CMAKE_CXX_COMPILER=/usr/bin/g++
cmake --build build --target package
# Generates umd-dev-x.y.z-Linux.deb
UMD can be consumed by downstream projects in multiple ways.
You can link libdevice.so
by linking against the umd::device
target.
CPMAddPackage(
NAME umd
GITHUB_REPOSITORY tenstorrent/tt-umd
GIT_TAG v0.1.0
VERSION 0.1.0
)
add_subdirectory(<path to umd>)
apt install ./umd-dev-x.y.z-Linux.deb
You can run UMD tests without silicon by following setup instructions here.
For UMD, sample tests can be found in tests/simulation/test_simulation_device.cpp
As part of maintaining consistent code formatting across the project, we have integrated the pre-commit framework into our workflow. The pre-commit hooks will help automatically check and format code before commits are made, ensuring that we adhere to the project's coding standards.
Pre-commit is a framework for managing and maintaining multi-language pre-commit hooks. It helps catch common issues early by running a set of hooks before code is committed, automating tasks like:
- Formatting code (e.g., fixing trailing whitespace, enforcing end-of-file newlines)
- Running linters (e.g.,
clang-format
,black
,flake8
) - Checking for merge conflicts or other common issues.
For more details on pre-commit, you can visit the official documentation.
To set up pre-commit on your local machine, follow these steps:
- Install Pre-commit:
Ensure you have Python installed, then run:
pip install pre-commit
- Install the Git Hook Scripts:
In your local repository, run the following command to install the pre-commit hooks:
This command will configure your local Git to run the defined hooks automatically before each commit.
pre-commit install
- Run Pre-commit Hooks Manually:
You can also run the hooks manually against all files at any time with:
pre-commit run --all-files
By setting up pre-commit locally, you can help maintain the quality of the codebase and ensure that commits consistently meet the project's formatting standards. This saves time during code reviews and reduces the likelihood of code formatting issues slipping into the repository.
Since the hooks run automatically before each commit, you don't need to remember to manually format or check your code, making it easier to maintain consistency.
We strongly encourage all developers to integrate pre-commit into their workflow.
If you're using an IRD docker, clang-format should be already available. If you don't have clang-format in your working environment, follow the instructions on llvm website for installing it.
If working with VSCode, you can copy the provided default settings:
cp .vscode/default.settings.json .vscode/settings.json
From now on, c++ files will be formatted on save (given that clang-format is available).
Note that if you setup pre-commit hook, the files will be automatically formatted when you commit changes. You can also manually auto format the whole repo using mentioned pre-commit:
pre-commit run --all-files