Add CNN slide
8632
package-lock.json
generated
@@ -10,10 +10,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@slidev/cli": "^0.48.8",
|
"@slidev/cli": "^0.48.8",
|
||||||
"@slidev/theme-default": "latest",
|
"@slidev/theme-default": "latest",
|
||||||
"@slidev/theme-seriph": "latest",
|
|
||||||
"slidev-addon-citations": "^0.0.9",
|
"slidev-addon-citations": "^0.0.9",
|
||||||
"slidev-theme-academic": "^1.3.0",
|
"slidev-theme-academic": "^1.3.0",
|
||||||
"slidev-theme-geist": "^0.8.1",
|
|
||||||
"vue": "^3.4.21"
|
"vue": "^3.4.21"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
98
public/cnn_filter.svg
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
width="121.5"
|
||||||
|
height="83"
|
||||||
|
viewBox="-0.5 -0.5 121.5 83"
|
||||||
|
id="svg90"
|
||||||
|
sodipodi:docname="Unbenanntes Diagramm.svg"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview90"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#999999"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1" />
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
id="g31">
|
||||||
|
<rect
|
||||||
|
x="1"
|
||||||
|
y="42"
|
||||||
|
width="39"
|
||||||
|
height="38"
|
||||||
|
fill="none"
|
||||||
|
stroke="none"
|
||||||
|
pointer-events="all"
|
||||||
|
id="rect30" />
|
||||||
|
<path
|
||||||
|
d="m 1,42 m 39,0 m 0,38 M 1,80"
|
||||||
|
fill="none"
|
||||||
|
stroke="#6c8ebf"
|
||||||
|
stroke-linecap="square"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
pointer-events="all"
|
||||||
|
id="path30" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g87">
|
||||||
|
<rect
|
||||||
|
x="1"
|
||||||
|
y="1"
|
||||||
|
width="80"
|
||||||
|
height="80"
|
||||||
|
rx="12"
|
||||||
|
ry="12"
|
||||||
|
fill-opacity="0.4"
|
||||||
|
fill="#f8cecc"
|
||||||
|
stroke="#b85450"
|
||||||
|
stroke-width="3"
|
||||||
|
pointer-events="all"
|
||||||
|
id="rect86" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g89">
|
||||||
|
<g
|
||||||
|
transform="translate(-0.5,-0.5)"
|
||||||
|
id="g88">
|
||||||
|
<switch
|
||||||
|
id="switch87">
|
||||||
|
<foreignObject
|
||||||
|
style="overflow: visible; text-align: left;"
|
||||||
|
pointer-events="none"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility">
|
||||||
|
<xhtml:div
|
||||||
|
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 41px; margin-left: 2px;">
|
||||||
|
<xhtml:div
|
||||||
|
style="box-sizing: border-box; font-size: 0px; text-align: center;"
|
||||||
|
data-drawio-colors="color: rgb(0, 0, 0); ">
|
||||||
|
<xhtml:div
|
||||||
|
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">
|
||||||
|
<xhtml:font
|
||||||
|
color="#b75450">Filter</xhtml:font>
|
||||||
|
</xhtml:div>
|
||||||
|
</xhtml:div>
|
||||||
|
</xhtml:div>
|
||||||
|
</foreignObject>
|
||||||
|
<text
|
||||||
|
x="41"
|
||||||
|
y="45"
|
||||||
|
fill="#000000"
|
||||||
|
font-family="Helvetica"
|
||||||
|
font-size="12px"
|
||||||
|
text-anchor="middle"
|
||||||
|
id="text87">Filter</text>
|
||||||
|
</switch>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
1433
public/cnn_input.svg
Normal file
|
After Width: | Height: | Size: 46 KiB |
@@ -4,11 +4,33 @@
|
|||||||
<svg
|
<svg
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg1"
|
id="svg1"
|
||||||
width="444.51791"
|
width="516.50708"
|
||||||
height="242.46431"
|
height="281.73114"
|
||||||
viewBox="0 0 444.51792 242.46431"
|
viewBox="0 0 516.50709 281.73114"
|
||||||
|
sodipodi:docname="gemv.svg"
|
||||||
|
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#999999"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="1.409392"
|
||||||
|
inkscape:cx="75.564498"
|
||||||
|
inkscape:cy="150.41947"
|
||||||
|
inkscape:window-width="2194"
|
||||||
|
inkscape:window-height="1158"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg1" />
|
||||||
<defs
|
<defs
|
||||||
id="defs1">
|
id="defs1">
|
||||||
<clipPath
|
<clipPath
|
||||||
@@ -2252,7 +2274,7 @@
|
|||||||
</defs>
|
</defs>
|
||||||
<g
|
<g
|
||||||
id="g1"
|
id="g1"
|
||||||
transform="translate(-174.61336,-188.18254)">
|
transform="matrix(1.1619488,0,0,1.1619488,-202.89178,-218.65849)">
|
||||||
<g
|
<g
|
||||||
id="g485">
|
id="g485">
|
||||||
<g
|
<g
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 289 KiB After Width: | Height: | Size: 289 KiB |
@@ -4,11 +4,33 @@
|
|||||||
<svg
|
<svg
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg1"
|
id="svg1"
|
||||||
width="444.5152"
|
width="518.98743"
|
||||||
height="194.4754"
|
height="227.05699"
|
||||||
viewBox="0 0 444.5152 194.4754"
|
viewBox="0 0 518.98743 227.05699"
|
||||||
|
sodipodi:docname="pu.svg"
|
||||||
|
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#999999"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="1.9931935"
|
||||||
|
inkscape:cx="209.46286"
|
||||||
|
inkscape:cy="125.92857"
|
||||||
|
inkscape:window-width="2194"
|
||||||
|
inkscape:window-height="1158"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg1" />
|
||||||
<defs
|
<defs
|
||||||
id="defs1">
|
id="defs1">
|
||||||
<clipPath
|
<clipPath
|
||||||
@@ -590,7 +612,7 @@
|
|||||||
</defs>
|
</defs>
|
||||||
<g
|
<g
|
||||||
id="g1"
|
id="g1"
|
||||||
transform="translate(-174.61337,-112.25229)">
|
transform="matrix(1.1675358,0,0,1.1675358,-203.86735,-131.05857)">
|
||||||
<g
|
<g
|
||||||
id="g112">
|
id="g112">
|
||||||
<g
|
<g
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 92 KiB |
@@ -46,7 +46,3 @@ layout: end
|
|||||||
|
|
||||||
# Thank you for your attention
|
# Thank you for your attention
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
---
|
|
||||||
src: ./slides/appendix.md
|
|
||||||
---
|
|
||||||
@@ -21,7 +21,7 @@ figureCaption: Data structures for instructions and register files
|
|||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
- Software support library written in Rust
|
- Software support library
|
||||||
- Provides data structures for PIM-HBM
|
- Provides data structures for PIM-HBM
|
||||||
- Adhering special memory layout requirements
|
- Adhering special memory layout requirements
|
||||||
- Executes programmed microkernels
|
- Executes programmed microkernels
|
||||||
@@ -45,13 +45,17 @@ figureUrl: /bare_metal.svg
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Virtual Prototype
|
||||||
|
### Platform
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
|
||||||
GEMV Microkernel
|
|
||||||
|
|
||||||
```asm{none|1-8|9,10|11|all}{lines:true}
|
<div class="grid grid-cols-2 gap-4">
|
||||||
|
<div>
|
||||||
|
|
||||||
|
DRAM-side
|
||||||
|
```asm{all|1-8|9,10|11|12|all}{lines:true,at:1}
|
||||||
MOV GRF_A #0, BANK
|
MOV GRF_A #0, BANK
|
||||||
MOV GRF_A #1, BANK
|
MOV GRF_A #1, BANK
|
||||||
MOV GRF_A #2, BANK
|
MOV GRF_A #2, BANK
|
||||||
@@ -66,3 +70,52 @@ FILL BANK, GRF_B #0
|
|||||||
EXIT
|
EXIT
|
||||||
```
|
```
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
code {
|
||||||
|
font-size: 8px
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
Host-side
|
||||||
|
|
||||||
|
```rust {all|7-10|12-17|19-28|30-31|all}{lines:true,maxHeight:'15em',at:1}
|
||||||
|
pub fn execute<const X16R: usize, const X16C: usize, const R: usize>(
|
||||||
|
matrix: &Matrix<X16R, X16C>,
|
||||||
|
input_vector: &Vector<X16C>,
|
||||||
|
output_partial_sum_vector: &mut SVector<F16x16, R>,
|
||||||
|
dummy: &impl PimOperand,
|
||||||
|
) {
|
||||||
|
// Load input vector into GRF-A registers
|
||||||
|
for chunk in input_vector.0.iter() {
|
||||||
|
chunk.execute_read();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute the MAC instructions without memory barriers
|
||||||
|
for sub_matrix in matrix.0.iter() {
|
||||||
|
for column_block in sub_matrix.fixed_rows::<1>(0).iter() {
|
||||||
|
column_block.execute_read_async();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify all memory accesses have finished
|
||||||
|
barrier::dsb(barrier::SY);
|
||||||
|
|
||||||
|
// Copy the partial sums into the bank
|
||||||
|
for chunk in output_partial_sum_vector
|
||||||
|
.fixed_rows_with_step_mut::<X16R>(0, 16)
|
||||||
|
.iter_mut()
|
||||||
|
{
|
||||||
|
chunk.execute_write();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Execute the EXIT instruction
|
||||||
|
dummy.execute_read();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- </Transform> -->
|
||||||
|
|||||||
@@ -15,6 +15,49 @@ figureFootnoteNumber: 1
|
|||||||
</Footnote>
|
</Footnote>
|
||||||
</Footnotes>
|
</Footnotes>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
- Workload must be memory-bound
|
||||||
|
|
||||||
|
- memory-bound:
|
||||||
|
- fully-connected layers
|
||||||
|
- layers of recurrent neural networks (RNNs)
|
||||||
|
|
||||||
|
- not memory-bound:
|
||||||
|
- convolutional layers
|
||||||
|
- data reuse
|
||||||
|
-->
|
||||||
|
|
||||||
|
---
|
||||||
|
preload: false
|
||||||
|
clicks: 1
|
||||||
|
---
|
||||||
|
|
||||||
|
## Processing-in-Memory
|
||||||
|
### Applicable Workloads
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
- Convolutional layers have excessive data reuse
|
||||||
|
- Small filter matrix fits onto on-chip cache
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<Transform :scale="1.4">
|
||||||
|
<div class="absolute left-175px top-1px">
|
||||||
|
<img src="/cnn_input.svg">
|
||||||
|
</div>
|
||||||
|
<div v-if="$slidev.nav.clicks === 0" class="absolute left-175px">
|
||||||
|
<img src="/cnn_filter.svg">
|
||||||
|
</div>
|
||||||
|
<div v-if="$slidev.nav.clicks === 1"
|
||||||
|
v-motion
|
||||||
|
:initial="{ x: 175, y: 0}"
|
||||||
|
:enter="{ x: 335, y: 0, transition: { duration: 5000 }}">
|
||||||
|
<img src="/cnn_filter.svg">
|
||||||
|
</div>
|
||||||
|
</Transform>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Processing-in-Memory
|
## Processing-in-Memory
|
||||||
@@ -142,4 +185,4 @@ simulation models needed
|
|||||||
|
|
||||||
research should not only focus on hardware but also explore the software side!
|
research should not only focus on hardware but also explore the software side!
|
||||||
|
|
||||||
deswegen baue ich einen virutal protoype
|
deswegen baue ich einen virutal protoype
|
||||||
|
|||||||