Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
275537f
[NE16] Add GAP9_w_NE16 platform: NE16 accelerator Engine on GAP9
runwangdl Apr 13, 2026
3a8bf48
[Deeploy PR] NE16 Linear Layer Kernels
pauloohaha Apr 14, 2026
6c8ae2b
[NE16] integrate Pu DENG's NE16 Linear PR with NE16-w platform
runwangdl Apr 14, 2026
e46a09a
[CI] skip gap9 pipelines on forks (private docker image)
runwangdl Apr 14, 2026
ddde88f
[Quant] add uint8 output bindings to QuantChecker / DequantChecker
runwangdl Apr 14, 2026
2373ff9
[CI] snitch-tiled: drop xdist parallelism 4 -> 2
runwangdl Apr 14, 2026
a47ae48
[NE16] add CNN_Libraries_HWPE include path for GAP9 SDK NE16 kernels
runwangdl Apr 18, 2026
6a3793a
[NE16] fix v4s/v4u type mismatch in NE16 GEMM template
runwangdl Apr 19, 2026
e6355a9
[CI] add NE16 profiling step to GAP9+NE16 tiled workflow
runwangdl Apr 19, 2026
74fac92
[GAP9] fix profileTiling: add CycleCounter.h to include lists and cmake
runwangdl Apr 19, 2026
2d75f76
[CI] fix NE16 profiling: disable LTO and clean build dir
runwangdl Apr 19, 2026
ee2f1b9
[NE16] wire --enable-3x3 flag in generateNetwork.py
runwangdl Apr 19, 2026
ac3d172
[NE16] pass --enable-3x3 from deeployRunner to generateNetwork
runwangdl Apr 19, 2026
822dd32
[NE16] add large Dense 3x3 conv benchmark for NE16 utilization test
runwangdl Apr 19, 2026
c4870e1
Fix for python error when using python 3.12.11 (#189)
RiccardoGandolfi May 8, 2026
375a632
[NE16] enable MobileNetV1 (MLPerf VisualWakeWords) as L2 single-buffe…
runwangdl May 14, 2026
b8a518a
[NE16] engine-aware DW NHWC layout: fix mixed-engine graphs with --en…
runwangdl May 14, 2026
ecab71e
[NE16] enable --enableStrides for model tests: stride-2 convs on NE16
runwangdl May 14, 2026
bc0b99d
[NE16] enable L2 double-buffer model tests + fix Dense WeightCube rank
runwangdl May 14, 2026
7f6ce26
[CI] add GAP9_w_NE16 model jobs (singlebuffer + doublebuffer L2)
runwangdl May 14, 2026
438f100
[CI] gap9-w-ne16-tiled: mark workspace safe (match other runner workf…
runwangdl May 14, 2026
e010a75
[GAP9] gate NE16AdjustGEMMWeightLayoutPass on engine == "NE16"
runwangdl May 14, 2026
c01425b
[GAP9] re-enable PULPAddRequantMergePass; harden RQSSplitPass int32 cast
runwangdl May 14, 2026
51cd95e
[GAP9] unmask FP32 GEMM and SkipConnection paths
runwangdl May 14, 2026
9be1c57
[GAP9] lint: drop unused MatMulAddMergePass import + yapf format
runwangdl May 14, 2026
a63ab50
add support for Operators for Generic target needed in MAGIA (#193)
marchioa Jun 2, 2026
15a7841
Fix GAP9 L3 board tests: readfs flash ordering and duplicate input da…
runwangdl Jun 9, 2026
6818f31
Beta Support for XDNA2 Platform (#179)
Victor-Jung Jun 23, 2026
75f59b0
HOTFIX: XDNA2 Action Fix (#202)
Victor-Jung Jul 29, 2026
aa26825
Fix Neureka Engine (#188)
marchioa Jul 29, 2026
e20293c
Add SoCDAML Part III: hands-on lab for adding a new int8 operator (#194)
viv-eth Aug 4, 2026
bf64cfa
Add FP32 operators and tiling support for MicroLlama on Snitch (#153)
lee2716 Aug 4, 2026
a47e812
fix(GAP9): make SLAVESTACKSIZE overridable from CMake
runwangdl Aug 4, 2026
1c37e81
fix(GAP9): hoist L2->L1 tile-control tables to L2
runwangdl Aug 4, 2026
4e88a10
perf(NE16): prefer output-channel tiles that are a multiple of TP_OUT=32
runwangdl Aug 4, 2026
d8bef5e
test(NE16): raise the VisualWakeWords double-buffer L1 budget to 110KB
runwangdl Aug 4, 2026
2bcc9ce
perf(NE16): re-run the transpose clean-up after NE16OptimizationPass
runwangdl Aug 4, 2026
ccd411d
Merge remote-tracking branch 'origin/devel' into gap9-ne16
runwangdl Aug 4, 2026
cdb39fc
fix(NE16): pin the weight tile's NE16-encoded tail so the DMA fits it…
runwangdl Aug 4, 2026
1539c0d
test(NE16): re-measure the VisualWakeWords double-buffer L1 budget
runwangdl Aug 4, 2026
5f154bc
chore(NE16): apply pre-commit formatting
runwangdl Aug 4, 2026
bca3156
docs(NE16): where the peak is, and how we got close to it
runwangdl Aug 4, 2026
b775bee
perf(NE16): prefer output tiles whose H and W are multiples of 3
runwangdl Aug 4, 2026
e63dbd1
perf(NE16): align tiles with addTileSizeDivisibleConstraint, not a ra…
runwangdl Aug 16, 2026
c4ee6bd
test(NE16): actually pass SLAVESTACKSIZE from the NE16 test config
runwangdl Aug 16, 2026
b13bc2f
fix(NE16): correct depthwise output-channel tiling
runwangdl Aug 16, 2026
37cf0c9
fix(GAP9): correct the MCHAN transfer-size bound and split oversized …
runwangdl Aug 16, 2026
9213b84
fix(NE16): tile depthwise output channels at packed-block granularity
runwangdl Aug 16, 2026
9d78b4d
fix(NE16): align pointwise spatial tiles to NE16's 3x3 output patch
runwangdl Aug 19, 2026
45ca06c
fix(NE16): reshape a 3x3 pointwise to 3x3, not 9x1
runwangdl Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
84 changes: 84 additions & 0 deletions .github/workflows/_runner-gap9-w-ne16-tiled.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# SPDX-FileCopyrightText: 2026 ETH Zurich and University of Bologna
#
# SPDX-License-Identifier: Apache-2.0

---
name: _runner-gap9-w-ne16-tiled

"on":
workflow_call:
inputs:
runner:
required: true
type: string
docker-image:
required: true
type: string
pytest-markers:
required: true
type: string

jobs:
test-runner-gap9-w-ne16-tiled:
runs-on: ${{ inputs.runner }}
container:
image: ${{ inputs.docker-image }}
steps:
- name: Mark workspace as safe
run: git config --global --add safe.directory '*'
- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Build Deeploy
shell: bash
run: |
source /app/install/gap9-sdk/.gap9-venv/bin/activate
source /app/install/gap9-sdk/configs/gap9_evk_audio.sh || true
pip install -e . || true
deactivate
- name: Cache ccache
uses: actions/cache/restore@v4
with:
path: /app/.ccache
key: ccache-gap9
- name: Run Test
run: |
source /app/install/gap9-sdk/.gap9-venv/bin/activate
source /app/install/gap9-sdk/configs/gap9_evk_audio.sh || true
export GVSOC_INSTALL_DIR=/app/install/gap9-sdk/install/workstation
export GAP_RISCV_GCC_TOOLCHAIN=/app/install/gcc/gap9
cd DeeployTest
mkdir -p /app/.ccache
export CCACHE_DIR=/app/.ccache
pytest test_platforms.py -v -m "${{ inputs.pytest-markers }}"
deactivate
shell: bash
- name: NE16 Profiling (cycle counts)
if: always()
run: |
source /app/install/gap9-sdk/.gap9-venv/bin/activate
source /app/install/gap9-sdk/configs/gap9_evk_audio.sh || true
export GVSOC_INSTALL_DIR=/app/install/gap9-sdk/install/workstation
export GAP_RISCV_GCC_TOOLCHAIN=/app/install/gcc/gap9
mkdir -p /app/.ccache
export CCACHE_DIR=/app/.ccache
cd DeeployTest
rm -rf TEST_GAP9_W_NE16/build_master
for test in \
"Tests/Kernels/Integer/Conv/Dense_2D_RQ_NE16Bench --l1 32000" \
"Tests/Kernels/Integer/Conv/PW_2D_RQ/Regular_RQ --l1 32000" \
"Tests/Kernels/Integer/Conv/Dense_2D_RQ --l1 32000"; do
dir=$(echo $test | awk '{print $1}')
l1=$(echo $test | awk '{print $3}')
echo "========================================"
echo "PROFILING: $dir (L1=$l1)"
echo "========================================"
python3 deeployRunner_tiled_gap9_w_ne16.py \
-t "$dir" --l1 "$l1" \
--toolchain GCC --toolchain-install-dir /app/install/gcc/gap9 \
--cores 8 --enable-3x3 --profileTiling -v \
-D CMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF 2>&1 || true
done
deactivate
shell: bash
4 changes: 2 additions & 2 deletions .github/workflows/_runner-snitch-tiled-sequential.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ jobs:
- name: Build Deeploy
shell: bash
run: pip install -e .
- name: Run Test # VJUNG: Run tests with 4 parallel threads as GitHub action VM has 4 cores.
- name: Run Test # 2-way parallel: 4-way OOMs the GitHub runner on the FP32 GEMM/TransB build.
run: |
cd DeeployTest
mkdir -p /app/.ccache
export CCACHE_DIR=/app/.ccache
pytest test_platforms.py -v -n 4 -m "snitch_tiled and ${{ inputs.pytest-marker }}"
pytest test_platforms.py -v -n 2 -m "snitch_tiled and ${{ inputs.pytest-marker }}"
shell: bash
52 changes: 52 additions & 0 deletions .github/workflows/_runner-xdna2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# SPDX-FileCopyrightText: 2025 ETH Zurich and University of Bologna
#
# SPDX-License-Identifier: Apache-2.0

---
name: _runner-xdna2

"on":
workflow_call:
inputs:
pytest-marker:
required: true
type: string
docker-image:
required: false
type: string

jobs:
test-runner-xdna2:
runs-on: xdna2-npu
# NOTE: We cannot use the `container:` directive here because
# GitHub Actions does not support `--device` flags required for
# NPU access (/dev/accel/accel0). Instead we use explicit
# `docker run` commands.
steps:
- name: Fix workspace permissions
shell: bash
run: |
docker run --rm \
-v "${{ github.workspace }}":/workspace \
${{ inputs.docker-image }} \
chown -R $(id -u):$(id -g) /workspace || true

- name: Checkout Repo
uses: actions/checkout@v4
with:
submodules: recursive

- name: Run Tests in Docker
shell: bash
run: |
docker run --rm \
--device /dev/accel/accel0 \
--ulimit memlock=-1 \
-v "${{ github.workspace }}":/app/Deeploy \
-w /app/Deeploy \
${{ inputs.docker-image }} \
bash -c "
pip install -e . &&
cd DeeployTest &&
pytest test_platforms.py -v -m 'xdna2 and ${{ inputs.pytest-marker }}'
"
3 changes: 3 additions & 0 deletions .github/workflows/ci-platform-gap9-tiled.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ concurrency:

jobs:
select-env:
# ghcr.io/pulp-platform/deeploy-gap9 is private; only upstream's
# self-hosted runners have credentials. Skip cleanly on forks.
if: github.repository == 'pulp-platform/Deeploy'
uses: ./.github/workflows/_select-env.yml
with:
docker_image_deeploy: ${{ github.event.inputs.docker_image_deeploy || 'ghcr.io/pulp-platform/deeploy-gap9:devel' }}
Expand Down
68 changes: 68 additions & 0 deletions .github/workflows/ci-platform-gap9-w-ne16-tiled.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# SPDX-FileCopyrightText: 2026 ETH Zurich and University of Bologna
#
# SPDX-License-Identifier: Apache-2.0

---
name: CI • GAP9 + NE16 (Tiled)

"on":
push:
branches:
- "**"
tags:
- "v*.*.*"
pull_request:
workflow_dispatch:
inputs:
docker_image_deeploy:
description: "Deeploy Image to use"
required: false
default: "ghcr.io/pulp-platform/deeploy-gap9:devel"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
select-env:
# The GAP9 + NE16 image is hosted in pulp-platform's private ghcr.io
# registry; only upstream's self-hosted runners have credentials to
# pull it. On forks the docker pull always returns "denied", so skip
# the whole pipeline cleanly there. (Same constraint as the existing
# ci-platform-gap9{,-tiled}.yml jobs.)
if: github.repository == 'pulp-platform/Deeploy'
uses: ./.github/workflows/_select-env.yml
with:
docker_image_deeploy: ${{ github.event.inputs.docker_image_deeploy || 'ghcr.io/pulp-platform/deeploy-gap9:devel' }}

gap9-w-ne16-kernels-tiled-singlebuffer-L2:
needs: select-env
uses: ./.github/workflows/_runner-gap9-w-ne16-tiled.yml
with:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-markers: "gap9_w_ne16_tiled and kernels and singlebuffer and l2"

gap9-w-ne16-kernels-tiled-doublebuffer-L2:
needs: select-env
uses: ./.github/workflows/_runner-gap9-w-ne16-tiled.yml
with:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-markers: "gap9_w_ne16_tiled and kernels and doublebuffer and l2"

gap9-w-ne16-models-tiled-singlebuffer-L2:
needs: select-env
uses: ./.github/workflows/_runner-gap9-w-ne16-tiled.yml
with:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-markers: "gap9_w_ne16_tiled and models and singlebuffer and l2"

gap9-w-ne16-models-tiled-doublebuffer-L2:
needs: select-env
uses: ./.github/workflows/_runner-gap9-w-ne16-tiled.yml
with:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-markers: "gap9_w_ne16_tiled and models and doublebuffer and l2"
3 changes: 3 additions & 0 deletions .github/workflows/ci-platform-gap9.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ concurrency:

jobs:
select-env:
# ghcr.io/pulp-platform/deeploy-gap9 is private; only upstream's
# self-hosted runners have credentials. Skip cleanly on forks.
if: github.repository == 'pulp-platform/Deeploy'
uses: ./.github/workflows/_select-env.yml
with:
docker_image_deeploy: ${{ github.event.inputs.docker_image_deeploy || 'ghcr.io/pulp-platform/deeploy-gap9:devel' }}
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/ci-platform-snitch-tiled.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,11 @@ jobs:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-marker: "kernels and singlebuffer and l2"

snitch-models-tiled-singlebuffer-L2:
needs: select-env
uses: ./.github/workflows/_runner-snitch-tiled-sequential.yml
with:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-marker: "models and singlebuffer and l2"
8 changes: 8 additions & 0 deletions .github/workflows/ci-platform-snitch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,11 @@ jobs:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-marker: "kernels"

snitch-models:
needs: select-env
uses: ./.github/workflows/_runner-snitch.yml
with:
runner: ${{ needs.select-env.outputs.runner }}
docker-image: ${{ needs.select-env.outputs.image }}
pytest-marker: "models"
31 changes: 31 additions & 0 deletions .github/workflows/ci-platform-xdna2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# SPDX-FileCopyrightText: 2025 ETH Zurich and University of Bologna
#
# SPDX-License-Identifier: Apache-2.0

---
name: CI • XDNA2

"on":
push:
branches:
- "**"
tags:
- "v*.*.*"
pull_request:
workflow_dispatch:
inputs:
docker_image_deeploy:
description: "XDNA2 Deeploy Docker Image to use"
required: false
default: "ghcr.io/pulp-platform/deeploy-xdna:devel"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
xdna2-kernels:
uses: ./.github/workflows/_runner-xdna2.yml
with:
pytest-marker: "kernels"
docker-image: ${{ inputs.docker_image_deeploy || 'ghcr.io/pulp-platform/deeploy-xdna:devel' }}
100 changes: 100 additions & 0 deletions .github/workflows/docker-build-deeploy-xdna.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# SPDX-FileCopyrightText: 2026 ETH Zurich and University of Bologna
#
# SPDX-License-Identifier: Apache-2.0

---
name: Docker • Build Deeploy XDNA Container

"on":
workflow_dispatch:

jobs:
prepare:
name: Fetch branch name or tag
runs-on: ubuntu-latest
outputs:
docker_tag: ${{ steps.generate_tag.outputs.docker_tag }}
steps:
- uses: actions/checkout@v4

- name: Set up environment variables
run: |
echo "BRANCH_NAME=${GITHUB_REF##*/}" >> $GITHUB_ENV
echo "TAG_NAME=${GITHUB_REF##*/}" >> $GITHUB_ENV
echo "IS_TAG=${GITHUB_REF_TYPE}" >> $GITHUB_ENV

- name: Set Docker tag
id: generate_tag
run: |
if [[ "${{ env.IS_TAG }}" == "tag" ]]; then
echo "docker_tag=${{ env.TAG_NAME }}" >> $GITHUB_OUTPUT
else
echo "docker_tag=${{ env.BRANCH_NAME }}" >> $GITHUB_OUTPUT
fi

build-deeploy-xdna:
name: Build Deeploy XDNA Image
needs: [prepare]
runs-on: ubuntu-latest
outputs:
digest-amd64: ${{ steps.digest.outputs.digest-amd64 }}
steps:
- uses: actions/checkout@v4

- name: Free up disk space
uses: jlumbroso/free-disk-space@v1.3.1
with:
tool-cache: true
android: true
dotnet: true
haskell: true
large-packages: true

- uses: docker/setup-buildx-action@v3

- name: GHCR Log-in
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build Cache for Docker
id: cache
uses: actions/cache@v4
with:
path: var-ccache
key: ${{ runner.os }}-amd64-build-cache-deeploy-xdna

- name: Inject build-cache
uses: reproducible-containers/buildkit-cache-dance@v3.1.0
with:
cache-map: |
{
"var-ccache": "/ccache"
}
skip-extraction: ${{ steps.cache.outputs.cache-hit }}

- name: Lower Case Repository Name
run: |
echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV}
env:
OWNER: "${{ github.repository_owner }}"

- name: Build and push Deeploy XDNA image
id: build
uses: docker/build-push-action@v6
with:
platforms: linux/amd64
context: .
cache-from: type=gha
cache-to: type=gha,mode=min
file: Container/Dockerfile.deeploy-xdna
push: true
tags: |
ghcr.io/${{ env.OWNER_LC }}/deeploy-xdna:latest
ghcr.io/${{ env.OWNER_LC }}/deeploy-xdna:${{ needs.prepare.outputs.docker_tag }}

- name: Extract image digest
id: digest
run: echo "digest-amd64=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT
Loading
Loading