EmitC testing

NOTE: This is a developer's guide on how to test EmitC as a feature. For usage of EmitC, please refer to ttnn-standalone docs.

Prerequisites

  • Built ttmlir

  • Built ttrt

  • Activated virtual environment:

    source env/activate
    
  • Saved system descriptor file:

    ttrt query --save-artifacts
    

Table of Contents

  1. Generate all EmitC tests and run them
  2. Generate a single EmitC test and run it
  3. Generate EmitC tests with Builder

Generate all EmitC tests and run them

  1. Generate flatbuffers and .cpp files for EmitC tests

    If you don't have SYSTEM_DESC_PATH environment variable exported, you can run:

    SYSTEM_DESC_PATH=/path/to/system_desc.ttsys llvm-lit -sv test/ttmlir/EmitC/TTNN
    

    Or if you have SYSTEM_DESC_PATH exported, you can omit it:

    llvm-lit -sv test/ttmlir/EmitC/TTNN
    
  2. Compile generated .cpp files to shared objects

    tools/ttnn-standalone/ci_compile_dylib.py
    
  3. Run flatbuffers + shared objects and compare results

    ttrt run --emitc build/test/ttmlir/EmitC/TTNN
    

Generate EmitC tests with Builder

Builder offers support for building EmitPy modules from ttir or stablehlo ops. Refer to Builder documentation.

Generate a single EmitC test and run it

  1. Generate flatbuffers and .cpp files for EmitC test

    SYSTEM_DESC_PATH=/path/to/system_desc.ttsys llvm-lit -sv test/ttmlir/EmitC/TTNN/eltwise_binary/add.mlir
    
  2. Compile generated .cpp files to shared objects

    Assuming default build directory path:

    tools/ttnn-standalone/ci_compile_dylib.py --file build/test/ttmlir/EmitC/TTNN/eltwise_binary/add.mlir.cpp
    
  3. Run the flatbuffer + shared object and compare results

    ttrt emitc build/test/ttmlir/EmitC/TTNN/eltwise_binary/add.mlir.so --flatbuffer build/test/ttmlir/EmitC/TTNN/eltwise_binary/add.mlir.ttnn