mirror of
https://github.com/RRZE-HPC/OSACA.git
synced 2026-01-04 18:20:09 +01:00
bugfixes, nicer frontend and first AMD Zen data added
This commit is contained in:
@@ -37,7 +37,7 @@ port_model_scheme: |
|
||||
| VNNI | ┌-------┐
|
||||
└-------┘ | VNNI |
|
||||
└-------┘
|
||||
ports: ["0", "0DV", "1", "2", "3", "4", "5", "6", "7"]
|
||||
ports: ["0", "0DV", "1", "2", "2D", "3", "3D", "4", "5", "6", "7"]
|
||||
instruction_forms:
|
||||
- name: addsd
|
||||
operands:
|
||||
@@ -46,8 +46,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: addss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -55,8 +55,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: addl
|
||||
operands:
|
||||
- class: "immediate"
|
||||
@@ -64,8 +64,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
latency: 1.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
- name: addq
|
||||
operands:
|
||||
- class: "immediate"
|
||||
@@ -73,8 +73,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
latency: 1.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
- name: cmpl
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -82,8 +82,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: ~ # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
- name: cmpq
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -91,8 +91,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: ~ # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
- name: cmpq
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -103,20 +103,20 @@ instruction_forms:
|
||||
index: ~
|
||||
scale: 1
|
||||
throughput: 0.5
|
||||
latency: ~ # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.5, 0.5, 0.0, 0.25, 0.25, 0.0]
|
||||
latency: ~ # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.25, 0.25, 0.33333]
|
||||
- name: ja
|
||||
operands:
|
||||
- class: 'identifier'
|
||||
throughput: 0.0
|
||||
latency: 0.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 0.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: jne
|
||||
operands:
|
||||
- class: 'identifier'
|
||||
throughput: 0.0
|
||||
latency: 0.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 0.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: mulsd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -124,8 +124,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: mulss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -133,8 +133,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: rcpss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -142,8 +142,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 1.0
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: sqrtsd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -151,8 +151,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 6.0
|
||||
latency: 22.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [1.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 22.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [1.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: sqrtss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -160,8 +160,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 3.0
|
||||
latency: 16.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 16.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: subq
|
||||
operands:
|
||||
- class: "immediate"
|
||||
@@ -169,8 +169,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
latency: 1.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.0]
|
||||
- name: vaddpd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -180,8 +180,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 5.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vaddpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -194,8 +194,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 8.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 7.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vaddpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -208,8 +208,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 8.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 7.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vaddsd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -219,8 +219,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vaddss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -230,8 +230,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vdivsd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -241,8 +241,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 4.0
|
||||
latency: 14.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [1.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 14.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [1.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vdivss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -252,8 +252,22 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 3.0
|
||||
latency: 11.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 11.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vfmadd213pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vfmadd213pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -266,8 +280,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vfmadd231pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -280,8 +294,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vfmadd231pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -294,8 +308,23 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vfmadd132pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
|
||||
- name: vfmadd132pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -308,8 +337,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmulsd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -319,8 +348,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vmulss
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -330,8 +359,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -341,8 +370,37 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 4.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 7.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 7.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.5, 0.0, 0.5, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -353,8 +411,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 2.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -365,8 +423,8 @@ instruction_forms:
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 0.0]
|
||||
latency: 2.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.0, 0.33333, 0.0, 1.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -377,8 +435,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -389,8 +447,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -401,8 +459,8 @@ instruction_forms:
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.0, 0.33333, 0.0, 1.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -413,8 +471,8 @@ instruction_forms:
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.0, 0.33333, 0.0, 1.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -425,8 +483,8 @@ instruction_forms:
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.0, 0.33333, 0.0, 1.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "register"
|
||||
@@ -437,8 +495,8 @@ instruction_forms:
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.0, 0.33333, 0.0, 1.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -449,8 +507,8 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -461,6 +519,6 @@ instruction_forms:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 0DV 1 2 3 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0]
|
||||
latency: 3.0 # 0 0DV 1 2 2D 3 3D 4 5 6 7
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.33333, 0.5, 0.33333, 0.5, 0.0, 0.0, 0.0, 0.33333]
|
||||
|
||||
|
||||
@@ -110,6 +110,23 @@ instruction_forms:
|
||||
name: "ymm"
|
||||
source: true
|
||||
destination: true
|
||||
- name: vfmadd132pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
source: true
|
||||
destination: false
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
source: true
|
||||
destination: false
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
source: true
|
||||
destination: true
|
||||
- name: vfmadd213pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
@@ -127,6 +144,24 @@ instruction_forms:
|
||||
name: "ymm"
|
||||
source: true
|
||||
destination: true
|
||||
- name: vfmadd213pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
source: true
|
||||
destination: false
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
source: true
|
||||
destination: false
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
source: true
|
||||
destination: true
|
||||
|
||||
- name: vfmadd231pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
|
||||
566
osaca/data/zen1.yml
Normal file
566
osaca/data/zen1.yml
Normal file
@@ -0,0 +1,566 @@
|
||||
osaca_version: 0.~
|
||||
micro_architecture: "AMD Zen (family 17h)"
|
||||
isa: "x86"
|
||||
port_model_scheme: |
|
||||
┌--------------------------------------┐ ┌-----------------------------------------------┐
|
||||
| 96 entries OoO scheduler | | 84 entries OoO scheduler |
|
||||
└--------------------------------------┘ └-----------------------------------------------┘
|
||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
|
||||
┌-------┐ ┌-------┐ ┌-------┐ ┌-------┐ ┌------┐ ┌-----┐ ┌-----┐ ┌------┐ ┌-----┐ ┌-----┐
|
||||
|SSE ALU| |SSE ALU| |SSE ALU| |SSE ALU| | ALU | | ALU | | ALU | | ALU | | AGU | | AGU |
|
||||
└-------┘ └-------┘ └-------┘ └-------┘ └------┘ └-----┘ └-----┘ └------┘ └-----┘ └-----┘
|
||||
┌-------┐ ┌-------┐ ┌-------┐ ┌-------┐ ┌------┐ ┌-----┐ ┌-----┐ ┌------┐ | |
|
||||
|SSE MUL| |SSE MUL| |SSE ADD| |SSE ADD| |BRANCH| | MUL | | MUL | |BRANCH| ▼ ▼
|
||||
└-------┘ └-------┘ └-------┘ └-------┘ └------┘ └-----┘ └-----┘ └------┘ ┌-------------┐
|
||||
┌-------┐ ┌-------┐ ┌-------┐ ┌-------┐ | LOAD |
|
||||
|SSE FMA| |SSE FMA| | SSE | |SSE DIV| └-------------┘
|
||||
└-------┘ └-------┘ | SHUF | └-------┘ ┌-------------┐
|
||||
┌-------┐ └-------┘ | LOAD |
|
||||
| SSE | └-------------┘
|
||||
| SHUF | ┌-------------┐
|
||||
└-------┘ | STORE |
|
||||
└-------------┘
|
||||
ports: ["0", "1", "2", "3", "3DV", "4", "5", "6", "7", "8", "8D", "9", "9D"]
|
||||
instruction_forms:
|
||||
- name: add
|
||||
operands:
|
||||
- class: "immediate"
|
||||
imd: "int"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: add
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: addl
|
||||
operands:
|
||||
- class: "immediate"
|
||||
imd: "int"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: addq
|
||||
operands:
|
||||
- class: "immediate"
|
||||
imd: "int"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: cmpl
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: cmpq
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: cmpq
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: ~
|
||||
scale: 1
|
||||
throughput: 0.25
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: ja
|
||||
operands:
|
||||
- class: 'identifier'
|
||||
throughput: 0.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: jne
|
||||
operands:
|
||||
- class: 'identifier'
|
||||
throughput: 0.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: mulsd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: mulss
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: rcpss
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: ~ #1.0
|
||||
latency: 5.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: sqrtsd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: ~ #8.0
|
||||
latency: 23.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: sqrtss
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: ~ #5.0
|
||||
latency: 17.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: subq
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: subq
|
||||
operands:
|
||||
- class: "immediate"
|
||||
imd: "int"
|
||||
- class: "register"
|
||||
name: "gpr"
|
||||
throughput: 0.25
|
||||
latency: 1.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.25, 0.25, 0.25, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vaddpd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vaddpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vaddpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vaddsd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vaddss
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vdivsd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 4.0
|
||||
latency: 13.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 1.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vdivss
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 3.0
|
||||
latency: 10.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vfmadd213pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vfmadd213pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vfmadd231pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vfmadd231pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vfmadd132pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vfmadd132pd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vmulsd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 4.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vmulss
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: 3.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.5, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: 4.0 # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vmulpd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
throughput: 0.5
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 0.5]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 1.0]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 2.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
|
||||
- name: vmovapd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 2.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
|
||||
- name: vmovaps
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 1.0]
|
||||
- name: vmovaps
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "xmm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 1.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 1.0]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 2.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
throughput: 2.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: ~
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 2.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
|
||||
- name: vmovupd
|
||||
operands:
|
||||
- class: "memory"
|
||||
base: "gpr"
|
||||
offset: "imd"
|
||||
index: "gpr"
|
||||
scale: 1
|
||||
- class: "register"
|
||||
name: "ymm"
|
||||
throughput: 2.0
|
||||
latency: ~ # 0 1 2 3 3DV 4 5 6 7 8 8D 9 9D
|
||||
port_pressure: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 1.0, 2.0]
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import re
|
||||
from functools import reduce
|
||||
|
||||
from ruamel import yaml
|
||||
@@ -48,28 +49,47 @@ class Frontend(object):
|
||||
port_len = self._get_max_port_len(kernel)
|
||||
separator = '-' * sum([x + 3 for x in port_len]) + '-'
|
||||
separator += '--' + len(str(kernel[-1]['line_number'])) * '-' if show_lineno else ''
|
||||
col_sep = '|'
|
||||
sep_list = self._get_separator_list(col_sep)
|
||||
print(lineno_filler + self._get_port_number_line(port_len))
|
||||
print(separator)
|
||||
for instruction_form in kernel:
|
||||
line = '{:4d} {} {} {}'.format(
|
||||
instruction_form['line_number'],
|
||||
self._get_port_pressure(instruction_form['port_pressure'], port_len),
|
||||
self._get_port_pressure(instruction_form['port_pressure'], port_len, sep_list),
|
||||
self._get_flag_symbols(instruction_form['flags'])
|
||||
if instruction_form['instruction'] is not None
|
||||
else ' ',
|
||||
instruction_form['line'].strip(),
|
||||
)
|
||||
line = line if show_lineno else '|' + '|'.join(line.split('|')[1:])
|
||||
line = line if show_lineno else col_sep + col_sep.join(line.split(col_sep)[1:])
|
||||
if show_cmnts is False and self._is_comment(instruction_form):
|
||||
continue
|
||||
print(line)
|
||||
print()
|
||||
tp_sum = self._get_throughput_sum(kernel)
|
||||
print(lineno_filler + self._get_port_pressure(tp_sum, port_len, ' '))
|
||||
|
||||
def _get_throughput_sum(self, kernel):
|
||||
tp_sum = reduce(
|
||||
(lambda x, y: [sum(z) for z in zip(x, y)]),
|
||||
[instr['port_pressure'] for instr in kernel],
|
||||
)
|
||||
tp_sum = [round(x, 2) for x in tp_sum]
|
||||
print(lineno_filler + self._get_port_pressure(tp_sum, port_len, ' '))
|
||||
return tp_sum
|
||||
|
||||
def _get_separator_list(self, separator, separator_2=' '):
|
||||
separator_list = []
|
||||
for i in range(len(self._data['ports']) - 1):
|
||||
if (
|
||||
re.search(r'\d+', self._data['ports'][i]).group()
|
||||
== re.search(r'\d+', self._data['ports'][i + 1]).group()
|
||||
):
|
||||
separator_list.append(separator_2)
|
||||
else:
|
||||
separator_list.append(separator)
|
||||
separator_list.append(separator)
|
||||
return separator_list
|
||||
|
||||
def _get_flag_symbols(self, flag_obj):
|
||||
string_result = ''
|
||||
@@ -80,14 +100,16 @@ class Frontend(object):
|
||||
return string_result
|
||||
|
||||
def _get_port_pressure(self, ports, port_len, separator='|'):
|
||||
string_result = '{} '.format(separator)
|
||||
if not isinstance(separator, list):
|
||||
separator = [separator for x in ports]
|
||||
string_result = '{} '.format(separator[-1])
|
||||
for i in range(len(ports)):
|
||||
if float(ports[i]) == 0.0:
|
||||
string_result += port_len[i] * ' ' + ' {} '.format(separator)
|
||||
string_result += port_len[i] * ' ' + ' {} '.format(separator[i])
|
||||
continue
|
||||
left_len = len(str(float(ports[i])).split('.')[0])
|
||||
substr = '{:' + str(left_len) + '.' + str(max(port_len[i] - left_len - 1, 0)) + 'f}'
|
||||
string_result += substr.format(ports[i]) + ' {} '.format(separator)
|
||||
string_result += substr.format(ports[i]) + ' {} '.format(separator[i])
|
||||
return string_result[:-1]
|
||||
|
||||
def _get_max_port_len(self, kernel):
|
||||
@@ -98,21 +120,25 @@ class Frontend(object):
|
||||
port_len[i] = len('{:.2f}'.format(port))
|
||||
return port_len
|
||||
|
||||
def _get_port_number_line(self, port_len):
|
||||
string_result = '|'
|
||||
def _get_port_number_line(self, port_len, separator='|'):
|
||||
string_result = separator
|
||||
separator_list = self._get_separator_list(separator, '-')
|
||||
for i, length in enumerate(port_len):
|
||||
substr = '{:^' + str(length + 2) + 's}'
|
||||
string_result += substr.format(self._data['ports'][i]) + '|'
|
||||
string_result += substr.format(self._data['ports'][i]) + separator_list[i]
|
||||
return string_result
|
||||
|
||||
def print_latency_analysis(self, cp_kernel):
|
||||
def print_latency_analysis(self, cp_kernel, separator='|'):
|
||||
print('\n\n------------------------')
|
||||
for instruction_form in cp_kernel:
|
||||
print(
|
||||
'{} | {} |{}| {}'.format(
|
||||
'{} {} {} {}{}{} {}'.format(
|
||||
instruction_form['line_number'],
|
||||
separator,
|
||||
instruction_form['latency'],
|
||||
separator,
|
||||
'X' if INSTR_FLAGS.LT_UNKWN in instruction_form['flags'] else ' ',
|
||||
separator,
|
||||
instruction_form['line'],
|
||||
)
|
||||
)
|
||||
|
||||
@@ -51,7 +51,7 @@ class SemanticsAppender(object):
|
||||
assert isinstance(port_pressure, list)
|
||||
assert len(port_pressure) == port_number
|
||||
instruction_form['port_pressure'] = port_pressure
|
||||
if sum(port_pressure) == 0:
|
||||
if sum(port_pressure) == 0 and throughput is not None:
|
||||
# port pressure on all ports 0 --> not bound to a port
|
||||
flags.append(INSTR_FLAGS.NOT_BOUND)
|
||||
except AssertionError:
|
||||
@@ -60,11 +60,11 @@ class SemanticsAppender(object):
|
||||
+ 'Please check entry for:\n {}'.format(instruction_form)
|
||||
)
|
||||
instruction_form['port_pressure'] = [0.0 for i in range(port_number)]
|
||||
flags.append(self.INSTR_FLAGS.TP_UNKWN)
|
||||
flags.append(INSTR_FLAGS.TP_UNKWN)
|
||||
if throughput is None:
|
||||
# assume 0 cy and mark as unknown
|
||||
throughput = 0.0
|
||||
flags.append(self.INSTR_FLAGS.TP_UNKWN)
|
||||
flags.append(INSTR_FLAGS.TP_UNKWN)
|
||||
latency = instruction_data['latency']
|
||||
if latency is None:
|
||||
# assume 0 cy and mark as unknown
|
||||
|
||||
Reference in New Issue
Block a user