Opt Backend Assembly
- Dominant language
- C
- Stars
- 265
- Forks
- 78
- Avg merge
- 2d 8h
- Merged PRs (30d)
- 11
Description
The `/cpu/self/opt/*` backends should implement their own version of diagonal/full assembly that assembles by element. A lot of the pieces are all there in the code, but spread out.
Current:
```
Assemble QFunction
for (elem in l-vec) Assemble Operator element
```
New:
```
for (elem in l-vec) {
Assemble QFunction element
Assemble Operator element
}
```
This is very similar to our approach with the operator application, except we would probably want to keep the block size set a 1 for simplicity. Then we can set `/cpu/self/opt/serial` as the operator fallback for `/cpu/self/opt/blocked`.
This would hopefully significantly decrease the assembly memory footprint (and speed things up) for the Opt, AVX, and XSMM backends.
Contributor guide
Research direction
Start by reading the /cpu/self/opt/* backends and the existing operator-application path, then trace how diagonal and full assembly currently coordinate QFunction and operator assembly. The work is done when the Opt, AVX, and XSMM paths assemble per element with block size 1 and /cpu/self/opt/serial serves as the fallback for /cpu/self/opt/blocked.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c
- Domain
- backend-api-design, performance
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100