Skip to content

"Minimum" examples and micro-benchmarks for various C-V communication syntax (pipes and flags) #135

Description

@learning-chip

Problem: There are now multiple ways to express Cube-Vector data exchange. This is perhaps the most complicated part of PTO programming (for both C++ and Python DSL), and will be the major confusion point for users.

Plan: Should clearly demo the syntax differences and performance differences for each of the syntax flavors, using short "microkernels" without a complex algorithm (for example a pipelined matmul-add for a nice static shape, as a "warm-up" example before the users dive into full FlashAttention)

Similar to #119, but covers all possible syntax variants.

C++:

Python (see ptoas-tpush-tpop-design.md):

  • Low-level sync_set, sync_wait, full manual sync mode, like Port single-core scan from pto-kernels #113
  • Basic pto.push, pto.pop (with or without intra-core autosync)
  • GM FIFO push/pop with alloc/free (with or without intra-core autosync)

Notes:

  • Measure each variant's performance & MTE utilization, and highlight their code syntax changes.
  • Also Highlight A2A3 vs A5 syntax differences.
  • Even more beginner friendly: starting with single-core performance measurement, and then scale with core numbers

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions