CEED / CEED/libCEED

Opt Backend Assembly

Open
#1,370 0 comments 0 reactions 0 assignees View on GitHub
enhancement performance
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.