File size: 1,663 Bytes
4d9b003
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# SPDX-License-Identifier: Apache-2.0
"""Custom-op helpers. Kernel ``.cpp`` / ``.hpp`` files are package data under ``ops/kernels/`` (shipped through
``source.extra_code`` and ``[tool.setuptools.package-data]``), and are always referenced by absolute path, because
tt-metal resolves a relative kernel path against the CWD, ``TT_METAL_KERNEL_PATH`` and ``TT_METAL_HOME`` first
(TT_PLATFORM.md section 5.1). The C17-C23 op modules and the K1-K11 kernels of PLAN.md section 1.3 are added here
by the first port that needs them, with a numpy oracle test and the hang protocol of PLAN.md section 4.4.

Op modules (import them explicitly; this package imports none of them): ``conv`` (C17 conv builders), ``upsample``
(C18 up-sampling and interpolation), ``attention`` (C20 SDPA wrapper), ``gather`` (C19 row gathers), ``topk`` (C21
top-k selection), ``heatmap`` (C22 heatmap local max), ``deform`` (C23 grid_sample helpers), ``segment`` (K1
``segment_reduce``: the first ``generic_op`` kernel, ``kernels/segment_reduce_dm.cpp``).
"""
from __future__ import annotations

import os

__all__ = ["KERNEL_DIR", "kernel_path"]

KERNEL_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "kernels")


def kernel_path(name: str, base: str = KERNEL_DIR) -> str:
    """Absolute path of a kernel source shipped with the package (``kernel_path("segment_max_reader.cpp")``).
    Raises ``FileNotFoundError`` early instead of tt-metal's "doesn't exist in any of the searched paths"."""
    path = os.path.join(base, name)
    if not os.path.isfile(path):
        raise FileNotFoundError(f"kernel source {path} is missing (not shipped as package data?)")
    return path