Skip to content

Fix shell for sequential tests of Generic, Cortex, and Mempool platforms - #11

Merged
Victor-Jung merged 1 commit into
pulp-platform:develfrom
Victor-Jung:pr/sequential-test-fix
Nov 5, 2024
Merged

Fix shell for sequential tests of Generic, Cortex, and Mempool platforms#11
Victor-Jung merged 1 commit into
pulp-platform:develfrom
Victor-Jung:pr/sequential-test-fix

Conversation

@Victor-Jung

Copy link
Copy Markdown
Member

The shell wasn't configured correctly for the Generic, CortexM, and Mempool platform tests. The tests were not executed, and the workflow didn't fail.

@XeratecXeratec left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Victor-Jung
Victor-Jung merged commit 4097c33 into pulp-platform:develNov 5, 2024
@XeratecXeratec mentioned this pull request Jul 8, 2025
Xeratec added a commit that referenced this pull request Jul 8, 2025
This release contains major architectural changes, new platform support,
enhanced simulation workflows, floating-point kernel support, training
infrastructure for CCT models, memory allocation strategies, and
documentation improvements.
After merging this into `main`, the release process will proceed with:
- Pushing a Git tag for the release after merging this PR
- Creating a GitHub release with the prepared tag.
Note: Since the release tag references the Docker container tagged with
the release tag (`ghcr.io/pulp-platform/deeploy:v0.2.0`), the CI will
initially fail. The Deeploy Docker image must be built after the release
PR is merged and the CI restarted.
### List of Pull Requests
- Prepare v0.2.0 release
[#102](#102)
- Add Luka as Code Owner
[#101](#101)
- Fix CI, Docker Files, and Documentation Workflow
[#100](#100)
- Chimera Platform Integration
[#96](#96)
- Add Tutorial and Refactor README
[#97](#97)
- Reduce Mean Float Template
[#92](#92)
- Reshape Memory Freeing and Generic Float GEMM Fixes
[#91](#91)
- Prepare for Release and Separate Dependencies
[#90](#90)
- Fix input offsets calculation
[#89](#89)
- Move PULP SDK to main branch/fork
[#88](#88)
- Finite Lifetime for IO Tensors
[#51](#51)
- Improved Memory Visualization and Multi-Layer Tiling Profiling
[#56](#56)
- Fix Linting in CI and Reformat C Files
[#86](#86)
- Fix Broken CMake Flow For pulp-sdk
[#87](#87)
- Refactor Changelog For Release
[#85](#85)
- ARM Docker Container and Minor Bug Fix
[#84](#84)
- Added Kernel for Generic Float DW Conv2D
[#63](#63)
- Autoselect Self-Hosted Runners if the Action is on Upstream
[#81](#81)
- TEST_RECENT linking on MacOS
[#78](#78)
- Add RV32IMF Picolibc support for Siracusa platform
[#66](#66)
- Improve Documentation and VSCode Support
[#76](#76)
- Debug Print Topology Pass and Code Transformation
[#75](#75)
- Find all subdirectories of Deeploy when installing with pip install
[#70](#70)
- Add milestone issue template
[#71](#71)
- Bunch of fixes and changes
[#58](#58)
- Add SoftHier platform
[#65](#65)
- rv32imf_xpulpv2 ISA support for Siracusa platform
[#64](#64)
- One LLVM To Compile Them All
[#60](#60)
- One GVSoC to Simulate Them All
[#59](#59)
- Add Support for CCT Last Layer Training with Embedding Dim 8-128
[#55](#55)
- Add CCT Classifier Training Support
[#53](#53)
- L3 Bugs: DMA Struct Datatype and Maxpool Margin Error
[#45](#45)
- DeepQuant Quantized Linear Support
[#54](#54)
- Implemented Dequant Layer for Generic and Siracusa
[#52](#52)
- Infinite Lifetime Buffers Considered in Tiling & Memory Allocation (+
Visualization) [#44](#44)
- Implemented Quant Layer for Generic and Siracusa
[#49](#49)
- Increase maximal Mchan DMA transfer sizes from 64KiB to 128KiB
[#47](#47)
- Add MiniMalloc and Decouple Memory Allocation and Tiling
[#40](#40)
- Float CCT Bugs on L3
[#37](#37)
- Memory Allocation Strategies and Visualization
[#36](#36)
- Add CODEOWNERS [#42](#42)
- Add Tiling Support to All CCT Kernels and Fix CCT Operators on
Siracusa Platform for L2
[#35](#35)
- Add Fp gemm and Softmax for Snitch platform
[#31](#31)
- Add Float Kernels for CCT
[#29](#29)
- documentation deployment
[#34](#34)
- main.c Float Cast Bugs
[#28](#28)
- Add Float GEMM on PULP with Tiling
[#26](#26)
- Add Float Support & Float GEMM for Generic
[#25](#25)
- GVSOC support for the Snitch Cluster platform
[#23](#23)
- Snitch Cluster Tiling Support
[#22](#22)
- Snitch support integration
[#14](#14)
- Update bibtex citation
[#20](#20)
- the PR template location, bump min python to 3.10, change install
command [#17](#17)
- Add pre-commit for python formatting
[#15](#15)
- FP integration (v2)
[#12](#12)
- shell for sequential tests of Generic, Cortex, and Mempool platforms
[#11](#11)
- Add issue templates
[#10](#10)
- Minor CI and Readme Improvements
[#8](#8)
- Fix GHCR Link for Docker Build
[#7](#7)
- neureka's ccache id
[#6](#6)
- GitHub-based CI/CD Flow
[#4](#4)
- Generic Softmax Kernel
[#2](#2)
- Port GitLab CI [#1](#1)
Xeratec added a commit to Xeratec/Deeploy that referenced this pull request Apr 30, 2026
Bump pulp-nn-mixed to 1d8eeee0 (PR pulp-platform#11), which fixes the
`pulp_nn_linear_*` family: when `num_o_neurons` is not a multiple of
2*NUM_CORES, the trailing odd neuron's `if (lft_neurons …)` branch
called `pulp_nn_bn_quant_*(sum, *pKappa, *pLambda, …)` instead of the
per-core advanced `*k1, *lambda1` pointers, so every core wrote
element 0's RQS parameters into its own neuron. Any layer with an
odd channel count (e.g. VWW's 2-class classifier) ended up with the
wrong kappa/lambda. Rebuild the prebuilt GAP9 library against the
fixed source.
Split the dropped Clang-only `-Wno-incompatible-pointer-types-
discards-qualifiers` on PULPOpen into the two flags GCC accepts
(`-Wno-incompatible-pointer-types`, `-Wno-discards-qualifiers`) and
add the same `-Wno-incompatible-pointer-types` plus
`-Wno-implicit-function-declaration` to the GAP9 target so
`pulp-nn-mixed` builds clean from source under the GCC GAP9
toolchain.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@XeratecXeratec mentioned this pull request Apr 30, 2026
5 tasks
Victor-Jung pushed a commit that referenced this pull request Aug 20, 2026
* Fix DWConv im2col scratch buffer sizing on PULPOpen
`PULP2DDWConvTemplate` inherited `computeTransientBuffersSize` from
the regular-conv template, which sizes the scratch as
`2 * 8 * ch_in * KH * KW` — independent of `H_in`. The upstream
`pulp_nn_depthwise_*` kernel actually walks a column-shaped im2col of
`dim_kernel_x * (dim_in_y + pad_top + pad_bot) + dim_kernel_x` bytes
per core, so for any input taller than the inherited bound the kernel
writes past its scratch into the next L1 tensor. With 8 channels and
a 3×3 kernel the two formulas coincide at H=45 and diverge from H=46
on (e.g. VWW PASS_1's 1×8×48×48 DW reproduces the corruption with
~74% of outputs wrong).
Override `computeTransientBuffersSize` in `PULP2DDWConvTemplate` to
use the kernel's actual per-core formula × NUM_CORES.
Add a `Kernels/Integer/Conv/DW_2D_RQ_8x16x16` repro test exercising
the previously-overflowing geometry, and wire VWW + the new kernel
into the GAP9 L2 single- and double-buffer tiling rosters so CI
catches any future regression.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Fix pulp-nn linear leftover-neuron RQS parameter aliasing
Bump pulp-nn-mixed to 1d8eeee0 (PR #11), which fixes the
`pulp_nn_linear_*` family: when `num_o_neurons` is not a multiple of
2*NUM_CORES, the trailing odd neuron's `if (lft_neurons …)` branch
called `pulp_nn_bn_quant_*(sum, *pKappa, *pLambda, …)` instead of the
per-core advanced `*k1, *lambda1` pointers, so every core wrote
element 0's RQS parameters into its own neuron. Any layer with an
odd channel count (e.g. VWW's 2-class classifier) ended up with the
wrong kappa/lambda. Rebuild the prebuilt GAP9 library against the
fixed source.
Split the dropped Clang-only `-Wno-incompatible-pointer-types-
discards-qualifiers` on PULPOpen into the two flags GCC accepts
(`-Wno-incompatible-pointer-types`, `-Wno-discards-qualifiers`) and
add the same `-Wno-incompatible-pointer-types` plus
`-Wno-implicit-function-declaration` to the GAP9 target so
`pulp-nn-mixed` builds clean from source under the GCC GAP9
toolchain.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Enable VisualWakeWord Test on GAP9
* Fix transient-buffer hoisting to dispatch through subclass overrides
`hoistTransientBuffers` called `computeTransientBuffersSize` via the
hard-coded class name (e.g. `PULP2DConvTemplate.computeTransient...`),
which bypassed any subclass override regardless of the actual `self`
type. As a result the `PULP2DDWConvTemplate` override added in
65eda17 was dead code: VWW codegen kept using the regular-conv
formula instead of the depthwise per-core size.
Convert `computeTransientBuffersSize` from `@staticmethod` to an
instance method on each affected template (PULP 1D/2D conv,
PULP 2D float conv + DW, PULP iSoftmax, generic iSoftmax pre-allocated)
and call it via `self.computeTransientBuffersSize(...)` so dispatch
goes through the actual class.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Add depthwise im2col override for PULP1DDWConvTemplate
`PULP1DDWConvTemplate` previously inherited
`computeTransientBuffersSize` from the regular 1D conv template, which
sizes scratch as `8 * 2 * ch_in * KY` — independent of `H_in`. The
upstream `pulp_nn_depthwise_*` kernel walks a column-shaped im2col of
`dim_kernel_y * (dim_in_y + pad_top + pad_bot) + dim_kernel_y` bytes
per core, so for tall enough inputs the kernel overflows the inherited
buffer. Add the depthwise per-core formula × NUM_CORES, mirroring the
2D fix in 65eda17.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Fix axis swap in the depthwise im2col scratch size
PULP2DDWConvTemplate.computeTransientBuffersSize sized the scratch with
dim_kernel_x * (dim_im_in_y + pad_top + pad_bot) + dim_kernel_x. That
matches the kernel's formula, but the call site passes the spatial axes
transposed: pulp_nn_depthwise's dim_in_y receives dim_im_in_x and its
dim_kernel_x receives dim_kernel_y. Both terms have to be transposed here
as well.
Square feature maps hide this. MLPerf KeywordSpotting does not: its
depthwise layers are 20x5 with a 3x3 kernel, so the buffer was sized
8 * (3 * (5 + 1 + 1) + 3) = 192 B
where the kernel writes
8 * (3 * (20 + 1 + 1) + 3) = 552 B
The 360 B overrun corrupts the L2 heap and the run dies after "Input
copied" with
/chip/cluster/pe8/lsu Invalid access (offset: 0xa63b0045, size: 0x3)
which is what the gap9-models CI job has been reporting.
PULP1DDWConvTemplate is left alone: it sizes with dim_kernel_y while the
1D call site pins the kernel's dim_kernel_x to 1, so it over-allocates
rather than under-allocates.
Verified on GAP9 / GVSoC, 8 cores:
pytest -m "gap9 and models" 1 failed -> 5 passed
pytest -m "gap9 and kernels" 31 passed
pytest -m "gap9_tiled and models and singlebuffer and l2" 12 passed
pytest -m "gap9_tiled and models and doublebuffer and l2" 12 passed
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: runwangdl <samanthawangdl@gmail.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Victor-Jung@Xeratec