SlideShare a Scribd company logo
1 of 69
Download to read offline
1 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP で
PL から PS へのアクセス
2016 年 2 月 20 日
@ikwzm
2 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP PS-PL Interface
S_AXI_ACP_FPD
S_AXI_ACE_FPD
S_AXI_HPC0_FPD
S_AXI_HPC1_FPD
S_AXI_HP0_FPD
S_AXI_HP1_FPD
S_AXI_HP2_FPD
S_AXI_HP3_FPD
M_AXI_HPM0_FPD
M_AXI_HPM1_FPD
S_AXI_LPD
M_AXI_HPM0_LPD
PL
Interface Name Addr
Width
Data
Width
40
49
40
32
49
32
or
64
or
128
MMU
No
Yes
Cache
Coherence
I/O
No
Full
I/O
Yes
No
I/O
No
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
3 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency のはなし
4 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency でトラブルが発生するケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
5 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency でトラブルが発生するケース1
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xDEAD
この時まだ Mem にはライトされてない
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
1. CPU が Addr=0x0080 に
Data=0xABED をライト
6 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency でトラブルが発生するケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
4. 未だ Mem の Addr=0x0080 には
Data=0xABED は書き込まれて
いないので、 Accelerator は
Data=0xDEAD を読んでしまう
0x0080 0xABED
0x0080 0xDEAD
3. Accelerator が Addr=0x0080 を
リード
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
7 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency でトラブルが発生するケース 2
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xABED
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
2. Cache に無いので Mem にリード
1. CPU が Addr=0x0080 をリード
8 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency でトラブルが発生するケース 2
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 をリード
0x0080 0xABED
0x0080 0xDEAD
4. Accelerator が Addr=0x0080 に
Data=0xDEAD をライト
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
2. Cache に無いので Mem にリード
9 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency でトラブルが発生するケース 2
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 をリード
4. Accelerator が Addr=0x0080 に
Data=0xDEAD をライト
Data Cache に Addr=0x0080 のデ
ータ(0xABED)が残っているので、
CPU は data=0xABED と誤った値を
リード(Mem にはリードしない)
0x0080 0xABED
0x0080 0xDEAD
2. Cache に無いので Mem にリード
5. CPU が Addr=0x0080 をリード
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
10 @ikwzmZynqMP 勉強会(2016/2/20)
Cache Coherency トラブルの解決方法
・キャッシュを使わない
・ソフトウェアによる解決方法
ソフトウェアで Cache Flush/Invalidiate する
・ハードウェアによる解決方法
Cache Coherency に対応した Cache と Interconnect
11 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xDEAD
1. CPU が Addr=0x0080 に
Data=0xABED をライト
12 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
0x0080 0xABED
0x0080 0xDEAD
13 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
0x0080 0xABED
0x0080 0xABED
3. Data Cache の Addr=0x0080
を強制的に Flush
14 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
4. Accelerator が Addr=0x0080
をリード
0x0080 0xDEAD
3. Data Cache の Addr=0x0080
を強制的に Flush
Accelerator は正しい値
(0xABED)が読める
15 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース2
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xABED
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
2. Cache に無いので Mem にリード
1. CPU が Addr=0x0080 をリード
16 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース2
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 をリード
0x0080 0xABED
0x0080 0xDEAD
2. Cache に無いので Mem にリード
4. Accelerator が Addr=0x0080
に Data=0xDEAD をライト
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
17 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース2
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 をリード
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
4. Accelerator が Addr=0x0080 に
Data=0xDEAD をライト
0x0080 0xABED
0x0080 0xDEAD
2. Cache に無いので Mem にリード
5. Data Cache の Addr=0x0080
を Invalidiate(無効化)
18 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御してトラブル回避 ケース2
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 をリード
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
4. Accelerator が Addr=0x0080 に
Data=0xDEAD をライト
0x0080 0xDEAD
0x0080 0xDEAD
2. Cache に無いので Mem にリード
5. Data Cache の Addr=0x0080
を Invalidiate(無効化)
7. Cache に無いので Mem にリード
6. CPU が Addr=0x0080 をリード
19 @ikwzmZynqMP 勉強会(2016/2/20)
ソフトウェアで Cache を制御する方法の問題点
・ 面倒くせ~よ
・ 相手がリード/ライトするタイミングが判ってないと無理
・ CPU が DMA や Accelerator を制御する場合は可能だけど、
マルチプロセッサ間では難しい
・ 時間がかかる
・ キャッシュの操作は意外と時間がかかる
・ しかもクリティカルセクション(他の処理ができない)
20 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency - 用意するもの
CPU
addr data
CPU
addr data
Mem Accelerator
Cache Coherency に対応した
Interface Protocol
Cache Coherency に対応した
InterConnect
Cache Coherency に対応した Cache
21 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
0x0080 0xABED
0x0080 0xDEAD
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
22 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
3. Accelerator が Addr=0x0080
をリード
0x0080 0xABED
0x0080 0xDEAD
23 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
3. Accelerator が Addr=0x0080
をリード
0x0080 0xABED
0x0080 0xDEAD
4.InterConnect 内でキャッシュを持つ
マスターに Addr を通知(snoop)
24 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
3. Accelerator が Addr=0x0080
をリード
0x0080 0xABED
0x0080 0xDEAD
4.InterConnect 内でキャッシュを持つ
マスターに Addr を通知(snoop)
5.該当する Addr(0x0080)のデータを
キャッシュしているマスターがいる場合は
マスターがデータを出力
25 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース1
CPU
addr data
CPU
addr data
Mem Accelerator
1. CPU が Addr=0x0080 に
Data=0xABED をライト
2. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
3. Accelerator が Addr=0x00C0
をリード
0x0080 0xABED
0x00C0 0xDEAD
4.InterConnect 内でキャッシュを持つ
マスターに Addr を通知(snoop)
5.該当する Addr(0x00C0)のデータを
キャッシュしているマスターがいない場合
は Mem から読む
26 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース 2
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xABED
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
2. Cache に無いので Mem にリード
1. CPU が Addr=0x0080 をリード
27 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース 2
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xABED
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
1. CPU が Addr=0x0080 をリード
2. Cache に無いので Mem にリード
4. Accelerator が Addr=0x0080
に Data=0xDEAD をライト
28 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース 2
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xABED
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
1. CPU が Addr=0x0080 をリード
2. Cache に無いので Mem にリード
4. Accelerator が Addr=0x0080
に Data=0xDEAD をライト
5.InterConnect 内でキャッシュを持つ
マスターに Addr を通知(snoop)
29 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース 2(キャッシュラインサイズの書き込みの場合)
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xABED
0x0080 0xDEAD
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
1. CPU が Addr=0x0080 をリード
2. Cache に無いので Mem にリード
4. Accelerator が Addr=0x0080 に
Data=0xDEAD をライト
5.InterConnect 内でキャッシュを持つ
マスターに Addr を通知(snoop)
6.該当する Addr(0x0080)のデータを
キャッシュしているマスターはキャッシュを
無効化(Invalidiate)
7. Mem の Addr=0x0080 に
Data=0xDEAD をライト
30 @ikwzmZynqMP 勉強会(2016/2/20)
ハードウェアで Cache Coherency ケース 2 (キャッシュラインサイズの書き込みの場合)
CPU
addr data
CPU
addr data
Mem Accelerator
0x0080 0xDEAD
0x0080 0xDEAD
3. Data Cache に Addr=0x0080
Data=0xABED をキャッシュ
1. CPU が Addr=0x0080 をリード
2. Cache に無いので Mem にリード
4. Accelerator が Addr=0x0080 に
Data=0xDEAD をライト
5.InterConnect 内でキャッシュを持つ
マスターに Addr を通知(snoop)
6.該当する Addr(0x0080)のデータを
キャッシュしているマスターはキャッシュを
無効化(Invalidiate)
7. Mem の Addr=0x0080 に
Data=0xDEAD をライト
8. CPU が Addr=0x0080 をリード9. Cache に無いので Mem にリード
31 @ikwzmZynqMP 勉強会(2016/2/20)
補足 キャッシュラインのアライメント問題
CPU
addr data
Accelerator
キャッシュするデータの単位(通称キャッシュラインサイズ)は 64 バイト
Addr Tag
34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte
16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit)
Cache Line Size = 64byte
32 @ikwzmZynqMP 勉強会(2016/2/20)
補足 キャッシュラインのアライメント問題
CPU
addr data
Accelerator
1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト
Addr Tag
34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte
16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit)
Cache Line Size = 64byte
0x0080
2. ハッチング部がまだメモリに書き込まれていない(dirty)
33 @ikwzmZynqMP 勉強会(2016/2/20)
補足 キャッシュラインのアライメント問題
CPU
addr data
Accelerator
1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト
Addr Tag
34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte
16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit)
Cache Line Size = 64byte
0x0080
2. ハッチング部がまだメモリに書き込まれていない(dirty)
3. Accelerator が Addr=0x0080 から 64 バイトのデータをライト
4. この場合はキャッシュを Invalidiate するだけで事足りる
5. Accelerator からのデータをメモリにライト
34 @ikwzmZynqMP 勉強会(2016/2/20)
補足 キャッシュラインのアライメント問題
CPU
addr data
Accelerator
1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト
Addr Tag
34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte
16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit)
Cache Line Size = 64byte
0x0080
2. ハッチング部がまだメモリに書き込まれていない(dirty)
3. Accelerator が Addr=0x0090 から 8 バイトのデータをライト
35 @ikwzmZynqMP 勉強会(2016/2/20)
補足 キャッシュラインのアライメント問題
CPU
addr data
Accelerator
1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト
Addr Tag
34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte
16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit)
Cache Line Size = 64byte
0x0080
2. ハッチング部がまだメモリに書き込まれていない(dirty)
3. Accelerator が Addr=0x0090 から 8 バイトのデータをライト
ハッチング部をメモリに書かなければならない
36 @ikwzmZynqMP 勉強会(2016/2/20)
補足 キャッシュラインのアライメント問題
CPU
addr data
Accelerator
Addr Tag
34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte
16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit)
Cache Line Size = 64byte
0x0080
7. キャッシュを Invalidiate
6.マージしたデータをメモリにライト
5.キャッシュからの
データと
Accelerator からのデータをマージ
37 @ikwzmZynqMP 勉強会(2016/2/20)
ACP(Accelerator Coherency Port)の制約
S_AXI_ACP_FPD
ACP Limitations
The ACP accepts only the following (cache-line friendly) transactions.
. 64-byte aligned (of 64-byte) read/write INCR transactions. All write-
byte strobes must be same (either enabled or disabled).
. 16-byte aligned (of 16-byte) read/write INCR transactions. Write-byte
strobes can have any value.
 『 Zynq UltraScale+ MPSoC TRM UG1085 (v1.0) November 24,2015』 826
ACP Coherency
The PL masters can also snoop APU caches through the APU’ s
accelerator coherency port (ACP). The ACP accesses can be used to
(read or write) allocate into L2 cache. However, the ACP only supports
aligned 64-byte and 16-byte accesses. All other accesses get a SLVERR
response.
 『 Zynq UltraScale+ MPSoC TRM UG1085 (v1.0) November 24,2015』 228
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
38 @ikwzmZynqMP 勉強会(2016/2/20)
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
ZynqMP の Cache Coherency Architecture
Cache Coherency に対応した
Interface Protocol
ACE(AXI Coherency Extension)
Cache Coherency に対応した
InterConnect
CCI(Cache Coherency Interconnect)
Cache Coherency に対応した Cache
Cache Coherency に対応した
InterConnect
SCU(Snoop Control Unit)
39 @ikwzmZynqMP 勉強会(2016/2/20)
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
ZynqMP の Cache Coherency Interconnect I/F
Full Coherency (ACE Slave Port)
Cache を持っているマスターとの I/F
Cache Snoop Channel 有り
APU から1本
PL の S_AXI_ACE_FPD から 1 本
I/O Coherency (ACE-Lite Slave Port)
Cache を持っていないマスターとの I/F
Cache Snoop Channel 無し
GPU/PCIe/SATA から 1 本
PL の S_AXI_HPC[01]_FPD から 1 本
LPD のスイッチから1本
ACE-Lite Master Port
Memory Subsystem へ 2 本
その他の各種 I/O(FPGA 含む)へ 1 本
40 @ikwzmZynqMP 勉強会(2016/2/20)
Memory Management Unit のはなし
41 @ikwzmZynqMP 勉強会(2016/2/20)
Memory Management Unit の働き
・ 仮想アドレスから物理アドレスへの変換
・仮想記憶 - 個々のプロセスからは単一のメモリマップ
・物理メモリの有効利用
・物理アドレス空間と仮想アドレス空間の分離
・ メモリ保護
・ キャッシュ制御
42 @ikwzmZynqMP 勉強会(2016/2/20)
仮想アドレスから物理アドレスへの変換(Aarch32-LPAE の例)
Main Memory
(物理アドレス)12 11 02021293031
PTE Table
Phys Addr
Phys Addr
PMD Table
Table Ptr
Table Ptr
PGD Table
Table Ptr
Table Ptr
TTBRx
プロセス(仮想アドレス)
64 bit/entry64 bit/entry
64 bit/entry
512
entry
512
entry
4Kbyte/page
LPAE : Large Physical Address Extension
PTE : Page Table Entry
PMD : Page Middle Directory
PGD : Page Global Directory
43 @ikwzmZynqMP 勉強会(2016/2/20)
仮想アドレスから物理アドレスへの変換(Aarch32-LPAE の例)
Main Memory
(物理アドレス)12 11 02021293031
PTE Table
Phys Addr
Phys Addr
PMD Table
Table Ptr
Table Ptr
PGD Table
Table Ptr
Table Ptr
TTBRx
プロセス(仮想アドレス)
64 bit/entry64 bit/entry
64 bit/entry
512
entry
512
entry
4Kbyte/page
仮想アドレスから物理アドレスに変換するのに
最大3回テーブルを読む必要がある
44 @ikwzmZynqMP 勉強会(2016/2/20)
仮想アドレスから物理アドレスへの変換(Aarch32-LPAE の例)
Main Memory
(物理アドレス)12 11 02021293031
PTE Table
Phys Addr
Phys Addr
PMD Table
Table Ptr
Table Ptr
PGD Table
Table Ptr
Table Ptr
TTBRx
プロセス(仮想アドレス)
64 bit/entry64 bit/entry
64 bit/entry
512
entry
512
entry
4Kbyte/page
アドレス変換用キャッシュ TLB 
(Transalation-Lookaside Buffer)
仮想アドレスから物理アドレスに変換するのに
最大3回テーブルを読む必要がある
45 @ikwzmZynqMP 勉強会(2016/2/20)
仮想記憶 - 個々のプロセスからは単一のメモリマップ
プロセス 1
(仮想アドレス)
Main Memory
(物理アドレス)MMU
0x0000_0000 0x08_0000_0000
0x0000_0000
0x0000_1000
0x0000_2000
0x0000_3000
0x0000_2000
0x0000_3000
0x0000_4000
0x0000_1000
0x08_0000_1000
0x08_0000_2000
0x08_0000_3000
0x08_0000_4000
0x08_0000_5000
0x08_0000_6000
0x08_0000_7000
0x08_0000_8000
プロセス 2
(仮想アドレス)
46 @ikwzmZynqMP 勉強会(2016/2/20)
Accelerator から見た場合の問題
プロセス 1
(仮想アドレス)
Main Memory
(物理アドレス)MMU
0x0000_0000
0x0000_1000
0x0000_2000
0x0000_3000
0x0000_4000
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
仮想アドレス上は
連続でも物理アド
レス上はバラバラに
配置されている
47 @ikwzmZynqMP 勉強会(2016/2/20)
Accelerator からバラバラに配置されたバッファへのアクセス方法
・ ハードウェアのアシスト無し
- 物理メモリ上に連続領域(DMA バッファ)を確保
・バッファから/へ DMA バッファへ/からデータをコピー
・DMA バッファをユーザープロセスからアクセス
・ ハードウェアのアシスト有り
・Scatter-Gather DMA
・IOMMU
48 @ikwzmZynqMP 勉強会(2016/2/20)
バッファから/へ DMA バッファへ/からデータをコピー
プロセス 1
(仮想アドレス)
Main Memory
(物理アドレス)MMU
0x0000_0000
0x0000_1000
0x0000_2000
0x0000_3000
0x0000_4000
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
メモリ上に連続領
域(DMA バッファ)
を確保
バッファから/へ
DMA バッファに/か
らデータをコピー
49 @ikwzmZynqMP 勉強会(2016/2/20)
バッファから/へ DMA バッファへ/からデータをコピー
・良い点
・特殊なハードウェアを必要としない
・悪い点
・データのコピーによる性能劣化
・課題
・連続領域(DMA バッファ)の確保方法(後述)
・例
・レガシーなデバイス(一昔前はわりとメジャーな方法)
・今でも低速なデバイス(UART など)ではよく使われる
50 @ikwzmZynqMP 勉強会(2016/2/20)
DMA バッファをユーザープロセスからアクセス
プロセス 1
(仮想アドレス)
Main Memory
(物理アドレス)MMU
0x0000_0000
0x0000_1000
0x0000_2000
0x0000_3000
0x0000_4000
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
メモリ上に連続領
域(DMA バッファ)
を確保
DMA バッファをユ
ーザープロセスの仮
想空間にマッピング
51 @ikwzmZynqMP 勉強会(2016/2/20)
DMA バッファをユーザープロセスからアクセス
・良い点
・特殊なハードウェアを必要としない
・悪い点
・ユーザープログラム側に対処が必要
・課題
・連続領域(DMA バッファ)の確保方法(後述)
・例
・UIO(User space I/O)
・udmabuf
52 @ikwzmZynqMP 勉強会(2016/2/20)
連続領域(DMA バッファ)の確保方法 - Linux の場合
・Linux の管理外領域に連続領域を確保
・メモリ管理をユーザープログラムが行う必要がある
・領域は Linux 起動時に確保
・キャッシュ対象外(キャッシュが効かない)
・CMA(Contiguous Memory Allocator)を使う
・メモリ管理は Linux のカーネルが行う
・CMA 領域の最大値は Linux 起動時に指定
・"ある程度"動的にバッファを確保できる(フラグメンテーション問題)
・キャッシュの対象
53 @ikwzmZynqMP 勉強会(2016/2/20)
Scatter-Gather DMA
・専用 DMA がバラバラに配置された物理領域を順番にアクセスする
・例
・USB ホストコントローラー(xHCI)
・ネットワークコントローラー
・SerialATA ホストコントローラー(AHCI)
・メジャーかつ高スループットが必要なデバイスは大抵この方法
54 @ikwzmZynqMP 勉強会(2016/2/20)
Scatter-Gather DMA
・良い点
・デバイスに特化した DMA による性能向上(高スループット)
・バッファ間のデータコピーの削減
・悪い点
・専用の DMA コントローラハードウェアが必要
・専用のデバイスドライバ(の開発とメンテナンス)が必要
・ランダムアクセスに難がある(たいていはシーケンシャルアクセス)
55 @ikwzmZynqMP 勉強会(2016/2/20)
IOMMU
プロセス 1
(仮想アドレス)
Main Memory
(物理アドレス)MMU
0x0000_0000
0x0000_1000
0x0000_2000
0x0000_3000
0x0000_4000
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
buf[0x0000]
buf[0x1000]
buf[0x2000]
buf[0x3000]
Accelerator からみた
アドレス空間
IOMMU
56 @ikwzmZynqMP 勉強会(2016/2/20)
IOMMU
・良い点
・DMA の開発が楽(面倒は MMU にお任せ)
・ドライバの開発が楽(MMU の管理は OS にお任せ)
・バッファ間のデータコピーの削減
・ランダムアクセスに強い
・悪い点
・IOMMU が必要
・仮想アドレスから物理アドレスに変換する際のオーバーヘッド
・いまいち流行ってない(知見が少ない、 これからに期待)
57 @ikwzmZynqMP 勉強会(2016/2/20)
I/O
ZynqMP の IOMMU
S_AXI_ACP_FPD
S_AXI_ACE_FPD
S_AXI_HPC0_FPD
S_AXI_HPC1_FPD
S_AXI_HP0_FPD
S_AXI_HP1_FPD
S_AXI_HP2_FPD
S_AXI_HP3_FPD
M_AXI_HPM0_FPD
M_AXI_HPM1_FPD
S_AXI_LPD
M_AXI_HPM0_LPD
PL
Interface Name Addr
Width
Data
Width
40
49
40
32
49
32
or
64
or
128
IOMMU
No
Yes
Yes
No
Cache
Coherence
No
Full
I/O
I/O
No
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
58 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP の S_AXI_LPD の注意点
S_AXI_LPD
LPD-PL Interface
This port can be used in physical or virtual mode by setting the AxUSER
bit. In virtual mode, it cannot directly access the LPD. Instead, virtual
mode accesses are routed as follows.
PL → LPD → FPD (SMMU/CCI) → LPD
The S_AXI_PL_LPD is a PL interface that connects into the low-power
domain. For situations where the FP domain is powered down, this
interface provides a high-performance mastering capability from the
PL. Due to the interconnect topology, this port has a relatively long
latency to DDR.
『 Zynq UltraScale+ MPSoC TRM UG1085 (v1.0) November 24,2015』 822
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
59 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP の IOMMU(ちょっと詳細に)
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
TBU2
PS
TBU1
TBU0TBUTBUTBU
TCU
SMMU(System Memory Management Unit)
各 I/F 毎に MMU があるのではない
全体で IOMMU は一つ
次の2つのコンポーネントで構成
・TBU(Traslation Buffer Unit)
・ アドレス変換用キャッシュ TLB(Translation Lookaside Buffer)
・ TLB にヒットした時のみアドレス変換を行う
・ TLB ミスの時は TCU にテーブルウォークを依頼する
・ 各 I/F の近くに分散配置
・TCU(Translation Control Unit)
・ テーブルウォークを行い、 各 TBU に変換結果を通知
60 @ikwzmZynqMP 勉強会(2016/2/20)
IOMMU のアドレス変換のオーバヘッドはどのくらいだろう?
・オーバーヘッドの"平均"サイクル数 
TLB ヒット率×1+(1-TLB ヒット率)×TLB ミス時の Table Walk サイクル数
・TLB のヒット率は?
・Accelerator のアクセスパターン
・シーケンシャル/ランダム
・アドレスの先出しする/しない
・1 トランザクションの転送量
・TLB の構成(ZynqMP では 512entry 4-way)
・TLB の追い出しアルゴリズム(LRU? Random?)
・Table Walk 時に充填する TLB のエントリ数は?
・TLB ミス時の Table Walk の性能はどのくらい?
61 @ikwzmZynqMP 勉強会(2016/2/20)
・オーバーヘッドの"平均"サイクル数 
TLB ヒット率×1+(1-TLB ヒット率)×TLB ミス時の Table Walk サイクル数
・TLB のヒット率は?
・Accelerator のアクセスパターン
・シーケンシャル/ランダム
・アドレスの先出しする/しない
・1 トランザクションの転送量
・TLB の構成(ZynqMP では 512entry 4-way)
・TLB の追い出しアルゴリズム(LRU? Random?)
・Table Walk 時に充填する TLB のエントリ数は?
・TLB ミス時の Table Walk の性能はどのくらい?
IOMMU のアドレス変換のオーバヘッドはどのくらいだろう?
やってみないとわからん
62 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP の Global System Address Map
DDR SDRAM
LPD-PL interface
FPD-PL(HPM0) interface
FPD-PL(HPM1) interface
Quad-SPI
PCIe Low
Reserved
Coresight System Trace
RPU Low Latency Port
Reserved
FPS Slave
Lower LPS Slave
CSU, PMU, TCM, OCM
Reserved
DDR SDRAM
2GB
512MB
256MB
256MB
512MB
256MB
128MB
16MB
1MB
63MB
16MB
Upper LPS Slave 16MB
12MB
4MB
12GB
FPD-PL(HPM0) interface 4GB
FPD-PL(HPM1) interface 4GB
PCIe High 8GB
32GB
DDR SDRAM
FPD-PL(HPM0) interface 224GB
FPD-PL(HPM1) interface 224GB
PCIe High 256GB
256GB
Range Name Size Start Address End Address
0x00_0000_0000
0x00_8000_0000
0x00_A000_0000
0x00_B000_0000
0x00_C000_0000
0x00_E000_0000
0x00_F000_0000
0x00_F800_0000
0x00_F900_0000
0x00_F910_0000
0x00_FD00_0000
0x00_FE00_0000
0x00_FF00_0000
0x00_FFC0_0000
0x01_0000_0000
0x04_0000_0000
0x05_0000_0000
0x06_0000_0000
0x08_0000_0000
0x10_0000_0000
0x48_0000_0000
0x80_0000_0000
0xC0_0000_0000
0x00_7FFF_FFFF
0x00_9FFF_FFFF
0x00_AFFF_FFFF
0x00_BFFF_FFFF
0x00_DFFF_FFFF
0x00_EFFF_FFFF
0x00_F7FF_FFFF
0x00_F8FF_FFFF
0x00_F90F_FFFF
0x00_FCFF_FFFF
0x00_FDFF_FFFF
0x00_FEFF_FFFF
0x00_FFBF_FFFF
0x00_FFFF_FFFF
0x03_FFFF_FFFF
0x04_FFFF_FFFF
0x05_FFFF_FFFF
0x07_FFFF_FFFF
0x0F_FFFF_FFFF
0x47_FFFF_FFFF
0x7F_FFFF_FFFF
0xBF_FFFF_FFFF
0xFF_FFFF_FFFF
32bitaddr
36bitaddr
40bitaddr
63 @ikwzmZynqMP 勉強会(2016/2/20)
32bit アドレスの注意事項
・MMU を使わないとアクセス可能なメインメモリは最大 2GB
・APU が Aarch32(ARM 32bit mode)の場合
・RPU(Cortex-R5)の場合
・PL 側のマスターのアドレスが 32bit しかない場合
64 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP PS-PL Interface
S_AXI_ACP_FPD
S_AXI_ACE_FPD
S_AXI_HPC0_FPD
S_AXI_HPC1_FPD
S_AXI_HP0_FPD
S_AXI_HP1_FPD
S_AXI_HP2_FPD
S_AXI_HP3_FPD
M_AXI_HPM0_FPD
M_AXI_HPM1_FPD
S_AXI_LPD
M_AXI_HPM0_LPD
PL
Interface Name Addr
Width
Data
Width
40
49
40
32
49
32
or
64
or
128
MMU
No
Yes
Cache
Coherence
I/O
No
Full
I/O
Yes
No
I/O
No
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
65 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP の S_AXI_ACP_FPD
S_AXI_ACP_FPD
・利点(Benefit)
・ Lowest latency to L2 cache.
・ Cache coherency.
・ Ability to allocate into L2 cache.
・検討事項(Considerations)
・ Only 64B and 16B transactions supported
- requires specially designed PL-DMA.
・ Shares CPU interconnect bandwidth.
・ More complex PL master design.
・推奨使用方法(Suggested Uses)
・ PL logic tightly coupled with APU.
・ Medium granularity CPU offload.
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
66 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP の S_AXI_ACE_FPD
S_AXI_ACE_FPD
・利点(Benefit)
・ Optional cache coherency.
・ APU can snoop into PL cached masters (two-way coherency).
・検討事項(Considerations)
・ Limited burst length (64B) support when snooping into cached master
in PL (PS to PL).
・ When used as ACELITE, larger burst length from PL to PS can cause the
CPU to hang (direct AXI4 path between CCI and PS-DDR, which impacts
other applications waiting to access DDR).
・ Complex PL design that require support for ACE.
・推奨使用方法(Suggested Uses)
・ Cached accelerators in PL.
・ System cache in PL using block RAM.
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
67 @ikwzmZynqMP 勉強会(2016/2/20)
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
ZynqMP の S_AXI_HPC[01]_FPD
S_AXI_HPC[01]_FPD
・利点(Benefit)
・ High throughput (Best Effort).
・ Multiple interfaces.
・ AXI FIFO interface with QoS-400 traffic shaping.
・ Hardware assisted coherency;
no cache flush/invalidate in software driver.
・ Virtualization support with SMMU in path.
・検討事項(Considerations)
・ More complex PL master design.
・ PL design to drive AxCACHE as needed for coherency.
・推奨使用方法(Suggested Uses)
・ High performance DMA for large datasets.
68 @ikwzmZynqMP 勉強会(2016/2/20)
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU
ZynqMP の S_AXI_HP[0123]_FPD
S_AXI_HP[0123]_FPD
・利点(Benefit)
・ High throughput (Best Effort).
・ Multiple interfaces.
・ AXI FIFO interface with QoS-400 traffic shaping.
・ Virtualization support with SMMU in path.
・検討事項(Considerations)
・ Software driver to handle cache flush/invalidate.
・ More complex PL master design.
・推奨使用方法(Suggested Uses)
・ High performance DMA for large datasets.
69 @ikwzmZynqMP 勉強会(2016/2/20)
ZynqMP の S_AXI_LPD
S_AXI_LPD
・利点(Benefit)
・ Fastest, low latency path to the OCM and TCM.
・ Optional coherency.
・ SMMU in datapath provides option for virtualization.
・ PL access to LPD when FPD is powered off.
・ High throughput.
・推奨使用方法(Suggested Uses)
・ Safety applications.
Cache
Coherent
Interconnect
MemorySubsystem
RPUI/O
GPU
PCIe
SATA
1MB L2 Cache ACE I/F ACP I/F
Snoop Control Unit
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
Cortex-A53
32KB I/D
MMU
PS
MMU
MMU

More Related Content

What's hot

C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説Takateru Yamagishi
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいwata2ki
 
4章 Linuxカーネル - 割り込み・例外 3
4章 Linuxカーネル - 割り込み・例外 34章 Linuxカーネル - 割り込み・例外 3
4章 Linuxカーネル - 割り込み・例外 3mao999
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)Kentaro Ebisawa
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!Mr. Vengineer
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方Fixstars Corporation
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdfYasunori Goto
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことNVIDIA Japan
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料直久 住川
 
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Tetsuya Morizumi
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫Yuta Imai
 

What's hot (20)

C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
 
4章 Linuxカーネル - 割り込み・例外 3
4章 Linuxカーネル - 割り込み・例外 34章 Linuxカーネル - 割り込み・例外 3
4章 Linuxカーネル - 割り込み・例外 3
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
 
ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!ARM Trusted FirmwareのBL31を単体で使う!
ARM Trusted FirmwareのBL31を単体で使う!
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編Zynq MPSoC勉強会 Codec編
Zynq MPSoC勉強会 Codec編
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 

Viewers also liked

MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能についてmarsee101
 
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編Mr. Vengineer
 
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜Ryousei Takano
 
Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向Taira Hajime
 
高位合成友の会第三回(2015/12/08)LTスライド@ikwzm
高位合成友の会第三回(2015/12/08)LTスライド@ikwzm高位合成友の会第三回(2015/12/08)LTスライド@ikwzm
高位合成友の会第三回(2015/12/08)LTスライド@ikwzm一路 川染
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらTakuma Nakajima
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Mr. Vengineer
 
Detecting Silent Data Corruptions using Linux DMA Debug API
Detecting Silent Data Corruptions using Linux DMA Debug APIDetecting Silent Data Corruptions using Linux DMA Debug API
Detecting Silent Data Corruptions using Linux DMA Debug APISamsung Open Source Group
 
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)Mr. Vengineer
 
ARM AAE - Developing Code for ARM
ARM AAE - Developing Code for ARMARM AAE - Developing Code for ARM
ARM AAE - Developing Code for ARMAnh Dung NGUYEN
 
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析Mr. Vengineer
 
XPDS13: Xen on ARM Update - Stefano Stabellini, Citrix
XPDS13: Xen on ARM Update - Stefano Stabellini, CitrixXPDS13: Xen on ARM Update - Stefano Stabellini, Citrix
XPDS13: Xen on ARM Update - Stefano Stabellini, CitrixThe Linux Foundation
 
高位合成友の会第四回(2016/11/22)スライド
高位合成友の会第四回(2016/11/22)スライド高位合成友の会第四回(2016/11/22)スライド
高位合成友の会第四回(2016/11/22)スライド一路 川染
 
SDSoC 2016.3+yocto project
SDSoC 2016.3+yocto projectSDSoC 2016.3+yocto project
SDSoC 2016.3+yocto projectHidemi Ishihara
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方wata2ki
 

Viewers also liked (20)

ZynqMP勉強会
ZynqMP勉強会ZynqMP勉強会
ZynqMP勉強会
 
ZynqMPのQEMU
ZynqMPのQEMUZynqMPのQEMU
ZynqMPのQEMU
 
MPSoCのPLの性能について
MPSoCのPLの性能についてMPSoCのPLの性能について
MPSoCのPLの性能について
 
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
 
I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜I/O仮想化最前線〜ネットワークI/Oを中心に〜
I/O仮想化最前線〜ネットワークI/Oを中心に〜
 
Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向Linux KVM環境におけるGPGPU活用最新動向
Linux KVM環境におけるGPGPU活用最新動向
 
高位合成友の会第三回(2015/12/08)LTスライド@ikwzm
高位合成友の会第三回(2015/12/08)LTスライド@ikwzm高位合成友の会第三回(2015/12/08)LTスライド@ikwzm
高位合成友の会第三回(2015/12/08)LTスライド@ikwzm
 
もしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったらもしCloudStackのKVMホストでPCIパススルーできるようになったら
もしCloudStackのKVMホストでPCIパススルーできるようになったら
 
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編Xilinx SDSoC(2016.2)解体新書ソフトウェア編
Xilinx SDSoC(2016.2)解体新書ソフトウェア編
 
Detecting Silent Data Corruptions using Linux DMA Debug API
Detecting Silent Data Corruptions using Linux DMA Debug APIDetecting Silent Data Corruptions using Linux DMA Debug API
Detecting Silent Data Corruptions using Linux DMA Debug API
 
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
FPGAアクセラレータの作り方 (IBM POWER+CAPI編)
 
ARM AAE - Developing Code for ARM
ARM AAE - Developing Code for ARMARM AAE - Developing Code for ARM
ARM AAE - Developing Code for ARM
 
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
RISC-V : Berkeley Boot Loader & Proxy Kernelのソースコード解析
 
XPDS13: Xen on ARM Update - Stefano Stabellini, Citrix
XPDS13: Xen on ARM Update - Stefano Stabellini, CitrixXPDS13: Xen on ARM Update - Stefano Stabellini, Citrix
XPDS13: Xen on ARM Update - Stefano Stabellini, Citrix
 
高位合成友の会第四回(2016/11/22)スライド
高位合成友の会第四回(2016/11/22)スライド高位合成友の会第四回(2016/11/22)スライド
高位合成友の会第四回(2016/11/22)スライド
 
SDSoC 2016.3+yocto project
SDSoC 2016.3+yocto projectSDSoC 2016.3+yocto project
SDSoC 2016.3+yocto project
 
ARM AAE - System Issues
ARM AAE - System IssuesARM AAE - System Issues
ARM AAE - System Issues
 
Memory model
Memory modelMemory model
Memory model
 
FPGA Community
FPGA CommunityFPGA Community
FPGA Community
 
YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
 

Similar to Zynq mp勉強会資料

高位合成友の会(2018秋)スライド
高位合成友の会(2018秋)スライド高位合成友の会(2018秋)スライド
高位合成友の会(2018秋)スライド一路 川染
 
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4) (and spdmem...
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4) (and spdmem...Masanobu Saitoh
 
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...Insight Technology, Inc.
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache maruyama097
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムShinichi Hirauchi
 
【A-1】AIを支えるGPUコンピューティングの今
【A-1】AIを支えるGPUコンピューティングの今【A-1】AIを支えるGPUコンピューティングの今
【A-1】AIを支えるGPUコンピューティングの今Developers Summit
 
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法 by 株式会社日立製作...
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法  by 株式会社日立製作...[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法  by 株式会社日立製作...
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法 by 株式会社日立製作...Insight Technology, Inc.
 
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Shinichi Hirauchi
 
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツA100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツKuninobu SaSaki
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったCHY72
 
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までSatoyuki Tsukano
 
IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.Takuma Usui
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月Masahiro Nagano
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 

Similar to Zynq mp勉強会資料 (20)

高位合成友の会(2018秋)スライド
高位合成友の会(2018秋)スライド高位合成友の会(2018秋)スライド
高位合成友の会(2018秋)スライド
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
Reconf 201901
Reconf 201901Reconf 201901
Reconf 201901
 
Reconf 201506
Reconf 201506Reconf 201506
Reconf 201506
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4) (and spdmem...
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...Yet another Intel Chipset Internal SMBus device’s driver: ismt(4)(and spdmem...
Yet another Intel Chipset Internal SMBus device’s driver: ismt(4) (and spdmem...
 
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
[INSIGHT OUT 2011] B32 open hardwareの夜明け pci express 3・infiniband fdrの登場(yama...
 
Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache Java EE7 䛸㻌JCache 
Java EE7 䛸㻌JCache 
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
Wiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラムWiresharkで検出できないチャットプログラム
Wiresharkで検出できないチャットプログラム
 
【A-1】AIを支えるGPUコンピューティングの今
【A-1】AIを支えるGPUコンピューティングの今【A-1】AIを支えるGPUコンピューティングの今
【A-1】AIを支えるGPUコンピューティングの今
 
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法 by 株式会社日立製作...
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法  by 株式会社日立製作...[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法  by 株式会社日立製作...
[db tech showcase Tokyo 2014] B23: SSDとHDDの混在環境でのOracleの超効率的利用方法 by 株式会社日立製作...
 
PFI Seminar 2010/01/21
PFI Seminar 2010/01/21PFI Seminar 2010/01/21
PFI Seminar 2010/01/21
 
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
 
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツA100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス 使いこなしのコツ
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用までPacketbeatの基礎から、IoTデバイス異常検知への応用まで
Packetbeatの基礎から、IoTデバイス異常検知への応用まで
 
IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 

Zynq mp勉強会資料

  • 1. 1 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP で PL から PS へのアクセス 2016 年 2 月 20 日 @ikwzm
  • 2. 2 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP PS-PL Interface S_AXI_ACP_FPD S_AXI_ACE_FPD S_AXI_HPC0_FPD S_AXI_HPC1_FPD S_AXI_HP0_FPD S_AXI_HP1_FPD S_AXI_HP2_FPD S_AXI_HP3_FPD M_AXI_HPM0_FPD M_AXI_HPM1_FPD S_AXI_LPD M_AXI_HPM0_LPD PL Interface Name Addr Width Data Width 40 49 40 32 49 32 or 64 or 128 MMU No Yes Cache Coherence I/O No Full I/O Yes No I/O No Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 4. 4 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency でトラブルが発生するケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト
  • 5. 5 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency でトラブルが発生するケース1 CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xDEAD この時まだ Mem にはライトされてない 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 1. CPU が Addr=0x0080 に Data=0xABED をライト
  • 6. 6 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency でトラブルが発生するケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 4. 未だ Mem の Addr=0x0080 には Data=0xABED は書き込まれて いないので、 Accelerator は Data=0xDEAD を読んでしまう 0x0080 0xABED 0x0080 0xDEAD 3. Accelerator が Addr=0x0080 を リード 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ
  • 7. 7 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency でトラブルが発生するケース 2 CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xABED 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 2. Cache に無いので Mem にリード 1. CPU が Addr=0x0080 をリード
  • 8. 8 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency でトラブルが発生するケース 2 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 をリード 0x0080 0xABED 0x0080 0xDEAD 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 2. Cache に無いので Mem にリード
  • 9. 9 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency でトラブルが発生するケース 2 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 をリード 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト Data Cache に Addr=0x0080 のデ ータ(0xABED)が残っているので、 CPU は data=0xABED と誤った値を リード(Mem にはリードしない) 0x0080 0xABED 0x0080 0xDEAD 2. Cache に無いので Mem にリード 5. CPU が Addr=0x0080 をリード 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ
  • 10. 10 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherency トラブルの解決方法 ・キャッシュを使わない ・ソフトウェアによる解決方法 ソフトウェアで Cache Flush/Invalidiate する ・ハードウェアによる解決方法 Cache Coherency に対応した Cache と Interconnect
  • 11. 11 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース1 CPU addr data CPU addr data Mem Accelerator 0x0080 0xDEAD 1. CPU が Addr=0x0080 に Data=0xABED をライト
  • 12. 12 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 0x0080 0xABED 0x0080 0xDEAD
  • 13. 13 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 0x0080 0xABED 0x0080 0xABED 3. Data Cache の Addr=0x0080 を強制的に Flush
  • 14. 14 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 4. Accelerator が Addr=0x0080 をリード 0x0080 0xDEAD 3. Data Cache の Addr=0x0080 を強制的に Flush Accelerator は正しい値 (0xABED)が読める
  • 15. 15 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース2 CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xABED 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 2. Cache に無いので Mem にリード 1. CPU が Addr=0x0080 をリード
  • 16. 16 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース2 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 をリード 0x0080 0xABED 0x0080 0xDEAD 2. Cache に無いので Mem にリード 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ
  • 17. 17 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース2 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 をリード 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 0x0080 0xABED 0x0080 0xDEAD 2. Cache に無いので Mem にリード 5. Data Cache の Addr=0x0080 を Invalidiate(無効化)
  • 18. 18 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御してトラブル回避 ケース2 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 をリード 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 0x0080 0xDEAD 0x0080 0xDEAD 2. Cache に無いので Mem にリード 5. Data Cache の Addr=0x0080 を Invalidiate(無効化) 7. Cache に無いので Mem にリード 6. CPU が Addr=0x0080 をリード
  • 19. 19 @ikwzmZynqMP 勉強会(2016/2/20) ソフトウェアで Cache を制御する方法の問題点 ・ 面倒くせ~よ ・ 相手がリード/ライトするタイミングが判ってないと無理 ・ CPU が DMA や Accelerator を制御する場合は可能だけど、 マルチプロセッサ間では難しい ・ 時間がかかる ・ キャッシュの操作は意外と時間がかかる ・ しかもクリティカルセクション(他の処理ができない)
  • 20. 20 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency - 用意するもの CPU addr data CPU addr data Mem Accelerator Cache Coherency に対応した Interface Protocol Cache Coherency に対応した InterConnect Cache Coherency に対応した Cache
  • 21. 21 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 0x0080 0xABED 0x0080 0xDEAD 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ
  • 22. 22 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 3. Accelerator が Addr=0x0080 をリード 0x0080 0xABED 0x0080 0xDEAD
  • 23. 23 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 3. Accelerator が Addr=0x0080 をリード 0x0080 0xABED 0x0080 0xDEAD 4.InterConnect 内でキャッシュを持つ マスターに Addr を通知(snoop)
  • 24. 24 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 3. Accelerator が Addr=0x0080 をリード 0x0080 0xABED 0x0080 0xDEAD 4.InterConnect 内でキャッシュを持つ マスターに Addr を通知(snoop) 5.該当する Addr(0x0080)のデータを キャッシュしているマスターがいる場合は マスターがデータを出力
  • 25. 25 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース1 CPU addr data CPU addr data Mem Accelerator 1. CPU が Addr=0x0080 に Data=0xABED をライト 2. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 3. Accelerator が Addr=0x00C0 をリード 0x0080 0xABED 0x00C0 0xDEAD 4.InterConnect 内でキャッシュを持つ マスターに Addr を通知(snoop) 5.該当する Addr(0x00C0)のデータを キャッシュしているマスターがいない場合 は Mem から読む
  • 26. 26 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース 2 CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xABED 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 2. Cache に無いので Mem にリード 1. CPU が Addr=0x0080 をリード
  • 27. 27 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース 2 CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xABED 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 1. CPU が Addr=0x0080 をリード 2. Cache に無いので Mem にリード 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト
  • 28. 28 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース 2 CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xABED 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 1. CPU が Addr=0x0080 をリード 2. Cache に無いので Mem にリード 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 5.InterConnect 内でキャッシュを持つ マスターに Addr を通知(snoop)
  • 29. 29 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース 2(キャッシュラインサイズの書き込みの場合) CPU addr data CPU addr data Mem Accelerator 0x0080 0xABED 0x0080 0xDEAD 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 1. CPU が Addr=0x0080 をリード 2. Cache に無いので Mem にリード 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 5.InterConnect 内でキャッシュを持つ マスターに Addr を通知(snoop) 6.該当する Addr(0x0080)のデータを キャッシュしているマスターはキャッシュを 無効化(Invalidiate) 7. Mem の Addr=0x0080 に Data=0xDEAD をライト
  • 30. 30 @ikwzmZynqMP 勉強会(2016/2/20) ハードウェアで Cache Coherency ケース 2 (キャッシュラインサイズの書き込みの場合) CPU addr data CPU addr data Mem Accelerator 0x0080 0xDEAD 0x0080 0xDEAD 3. Data Cache に Addr=0x0080 Data=0xABED をキャッシュ 1. CPU が Addr=0x0080 をリード 2. Cache に無いので Mem にリード 4. Accelerator が Addr=0x0080 に Data=0xDEAD をライト 5.InterConnect 内でキャッシュを持つ マスターに Addr を通知(snoop) 6.該当する Addr(0x0080)のデータを キャッシュしているマスターはキャッシュを 無効化(Invalidiate) 7. Mem の Addr=0x0080 に Data=0xDEAD をライト 8. CPU が Addr=0x0080 をリード9. Cache に無いので Mem にリード
  • 31. 31 @ikwzmZynqMP 勉強会(2016/2/20) 補足 キャッシュラインのアライメント問題 CPU addr data Accelerator キャッシュするデータの単位(通称キャッシュラインサイズ)は 64 バイト Addr Tag 34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte 16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit) Cache Line Size = 64byte
  • 32. 32 @ikwzmZynqMP 勉強会(2016/2/20) 補足 キャッシュラインのアライメント問題 CPU addr data Accelerator 1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト Addr Tag 34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte 16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit) Cache Line Size = 64byte 0x0080 2. ハッチング部がまだメモリに書き込まれていない(dirty)
  • 33. 33 @ikwzmZynqMP 勉強会(2016/2/20) 補足 キャッシュラインのアライメント問題 CPU addr data Accelerator 1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト Addr Tag 34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte 16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit) Cache Line Size = 64byte 0x0080 2. ハッチング部がまだメモリに書き込まれていない(dirty) 3. Accelerator が Addr=0x0080 から 64 バイトのデータをライト 4. この場合はキャッシュを Invalidiate するだけで事足りる 5. Accelerator からのデータをメモリにライト
  • 34. 34 @ikwzmZynqMP 勉強会(2016/2/20) 補足 キャッシュラインのアライメント問題 CPU addr data Accelerator 1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト Addr Tag 34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte 16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit) Cache Line Size = 64byte 0x0080 2. ハッチング部がまだメモリに書き込まれていない(dirty) 3. Accelerator が Addr=0x0090 から 8 バイトのデータをライト
  • 35. 35 @ikwzmZynqMP 勉強会(2016/2/20) 補足 キャッシュラインのアライメント問題 CPU addr data Accelerator 1.CPU が Addr=0x00A0 から 32 バイトのデータをキャッシュにライト Addr Tag 34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte 16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit) Cache Line Size = 64byte 0x0080 2. ハッチング部がまだメモリに書き込まれていない(dirty) 3. Accelerator が Addr=0x0090 から 8 バイトのデータをライト ハッチング部をメモリに書かなければならない
  • 36. 36 @ikwzmZynqMP 勉強会(2016/2/20) 補足 キャッシュラインのアライメント問題 CPU addr data Accelerator Addr Tag 34bit 8byte 8byte 8byte 8byte 8byte 8byte 8byte 8byte 16byte(128bit) 16byte(128bit) 16byte(128bit) 16byte(128bit) Cache Line Size = 64byte 0x0080 7. キャッシュを Invalidiate 6.マージしたデータをメモリにライト 5.キャッシュからの データと Accelerator からのデータをマージ
  • 37. 37 @ikwzmZynqMP 勉強会(2016/2/20) ACP(Accelerator Coherency Port)の制約 S_AXI_ACP_FPD ACP Limitations The ACP accepts only the following (cache-line friendly) transactions. . 64-byte aligned (of 64-byte) read/write INCR transactions. All write- byte strobes must be same (either enabled or disabled). . 16-byte aligned (of 16-byte) read/write INCR transactions. Write-byte strobes can have any value.  『 Zynq UltraScale+ MPSoC TRM UG1085 (v1.0) November 24,2015』 826 ACP Coherency The PL masters can also snoop APU caches through the APU’ s accelerator coherency port (ACP). The ACP accesses can be used to (read or write) allocate into L2 cache. However, the ACP only supports aligned 64-byte and 16-byte accesses. All other accesses get a SLVERR response.  『 Zynq UltraScale+ MPSoC TRM UG1085 (v1.0) November 24,2015』 228 Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 38. 38 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU ZynqMP の Cache Coherency Architecture Cache Coherency に対応した Interface Protocol ACE(AXI Coherency Extension) Cache Coherency に対応した InterConnect CCI(Cache Coherency Interconnect) Cache Coherency に対応した Cache Cache Coherency に対応した InterConnect SCU(Snoop Control Unit)
  • 39. 39 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU ZynqMP の Cache Coherency Interconnect I/F Full Coherency (ACE Slave Port) Cache を持っているマスターとの I/F Cache Snoop Channel 有り APU から1本 PL の S_AXI_ACE_FPD から 1 本 I/O Coherency (ACE-Lite Slave Port) Cache を持っていないマスターとの I/F Cache Snoop Channel 無し GPU/PCIe/SATA から 1 本 PL の S_AXI_HPC[01]_FPD から 1 本 LPD のスイッチから1本 ACE-Lite Master Port Memory Subsystem へ 2 本 その他の各種 I/O(FPGA 含む)へ 1 本
  • 40. 40 @ikwzmZynqMP 勉強会(2016/2/20) Memory Management Unit のはなし
  • 41. 41 @ikwzmZynqMP 勉強会(2016/2/20) Memory Management Unit の働き ・ 仮想アドレスから物理アドレスへの変換 ・仮想記憶 - 個々のプロセスからは単一のメモリマップ ・物理メモリの有効利用 ・物理アドレス空間と仮想アドレス空間の分離 ・ メモリ保護 ・ キャッシュ制御
  • 42. 42 @ikwzmZynqMP 勉強会(2016/2/20) 仮想アドレスから物理アドレスへの変換(Aarch32-LPAE の例) Main Memory (物理アドレス)12 11 02021293031 PTE Table Phys Addr Phys Addr PMD Table Table Ptr Table Ptr PGD Table Table Ptr Table Ptr TTBRx プロセス(仮想アドレス) 64 bit/entry64 bit/entry 64 bit/entry 512 entry 512 entry 4Kbyte/page LPAE : Large Physical Address Extension PTE : Page Table Entry PMD : Page Middle Directory PGD : Page Global Directory
  • 43. 43 @ikwzmZynqMP 勉強会(2016/2/20) 仮想アドレスから物理アドレスへの変換(Aarch32-LPAE の例) Main Memory (物理アドレス)12 11 02021293031 PTE Table Phys Addr Phys Addr PMD Table Table Ptr Table Ptr PGD Table Table Ptr Table Ptr TTBRx プロセス(仮想アドレス) 64 bit/entry64 bit/entry 64 bit/entry 512 entry 512 entry 4Kbyte/page 仮想アドレスから物理アドレスに変換するのに 最大3回テーブルを読む必要がある
  • 44. 44 @ikwzmZynqMP 勉強会(2016/2/20) 仮想アドレスから物理アドレスへの変換(Aarch32-LPAE の例) Main Memory (物理アドレス)12 11 02021293031 PTE Table Phys Addr Phys Addr PMD Table Table Ptr Table Ptr PGD Table Table Ptr Table Ptr TTBRx プロセス(仮想アドレス) 64 bit/entry64 bit/entry 64 bit/entry 512 entry 512 entry 4Kbyte/page アドレス変換用キャッシュ TLB  (Transalation-Lookaside Buffer) 仮想アドレスから物理アドレスに変換するのに 最大3回テーブルを読む必要がある
  • 45. 45 @ikwzmZynqMP 勉強会(2016/2/20) 仮想記憶 - 個々のプロセスからは単一のメモリマップ プロセス 1 (仮想アドレス) Main Memory (物理アドレス)MMU 0x0000_0000 0x08_0000_0000 0x0000_0000 0x0000_1000 0x0000_2000 0x0000_3000 0x0000_2000 0x0000_3000 0x0000_4000 0x0000_1000 0x08_0000_1000 0x08_0000_2000 0x08_0000_3000 0x08_0000_4000 0x08_0000_5000 0x08_0000_6000 0x08_0000_7000 0x08_0000_8000 プロセス 2 (仮想アドレス)
  • 46. 46 @ikwzmZynqMP 勉強会(2016/2/20) Accelerator から見た場合の問題 プロセス 1 (仮想アドレス) Main Memory (物理アドレス)MMU 0x0000_0000 0x0000_1000 0x0000_2000 0x0000_3000 0x0000_4000 buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] 仮想アドレス上は 連続でも物理アド レス上はバラバラに 配置されている
  • 47. 47 @ikwzmZynqMP 勉強会(2016/2/20) Accelerator からバラバラに配置されたバッファへのアクセス方法 ・ ハードウェアのアシスト無し - 物理メモリ上に連続領域(DMA バッファ)を確保 ・バッファから/へ DMA バッファへ/からデータをコピー ・DMA バッファをユーザープロセスからアクセス ・ ハードウェアのアシスト有り ・Scatter-Gather DMA ・IOMMU
  • 48. 48 @ikwzmZynqMP 勉強会(2016/2/20) バッファから/へ DMA バッファへ/からデータをコピー プロセス 1 (仮想アドレス) Main Memory (物理アドレス)MMU 0x0000_0000 0x0000_1000 0x0000_2000 0x0000_3000 0x0000_4000 buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] メモリ上に連続領 域(DMA バッファ) を確保 バッファから/へ DMA バッファに/か らデータをコピー
  • 49. 49 @ikwzmZynqMP 勉強会(2016/2/20) バッファから/へ DMA バッファへ/からデータをコピー ・良い点 ・特殊なハードウェアを必要としない ・悪い点 ・データのコピーによる性能劣化 ・課題 ・連続領域(DMA バッファ)の確保方法(後述) ・例 ・レガシーなデバイス(一昔前はわりとメジャーな方法) ・今でも低速なデバイス(UART など)ではよく使われる
  • 50. 50 @ikwzmZynqMP 勉強会(2016/2/20) DMA バッファをユーザープロセスからアクセス プロセス 1 (仮想アドレス) Main Memory (物理アドレス)MMU 0x0000_0000 0x0000_1000 0x0000_2000 0x0000_3000 0x0000_4000 buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] メモリ上に連続領 域(DMA バッファ) を確保 DMA バッファをユ ーザープロセスの仮 想空間にマッピング
  • 51. 51 @ikwzmZynqMP 勉強会(2016/2/20) DMA バッファをユーザープロセスからアクセス ・良い点 ・特殊なハードウェアを必要としない ・悪い点 ・ユーザープログラム側に対処が必要 ・課題 ・連続領域(DMA バッファ)の確保方法(後述) ・例 ・UIO(User space I/O) ・udmabuf
  • 52. 52 @ikwzmZynqMP 勉強会(2016/2/20) 連続領域(DMA バッファ)の確保方法 - Linux の場合 ・Linux の管理外領域に連続領域を確保 ・メモリ管理をユーザープログラムが行う必要がある ・領域は Linux 起動時に確保 ・キャッシュ対象外(キャッシュが効かない) ・CMA(Contiguous Memory Allocator)を使う ・メモリ管理は Linux のカーネルが行う ・CMA 領域の最大値は Linux 起動時に指定 ・"ある程度"動的にバッファを確保できる(フラグメンテーション問題) ・キャッシュの対象
  • 53. 53 @ikwzmZynqMP 勉強会(2016/2/20) Scatter-Gather DMA ・専用 DMA がバラバラに配置された物理領域を順番にアクセスする ・例 ・USB ホストコントローラー(xHCI) ・ネットワークコントローラー ・SerialATA ホストコントローラー(AHCI) ・メジャーかつ高スループットが必要なデバイスは大抵この方法
  • 54. 54 @ikwzmZynqMP 勉強会(2016/2/20) Scatter-Gather DMA ・良い点 ・デバイスに特化した DMA による性能向上(高スループット) ・バッファ間のデータコピーの削減 ・悪い点 ・専用の DMA コントローラハードウェアが必要 ・専用のデバイスドライバ(の開発とメンテナンス)が必要 ・ランダムアクセスに難がある(たいていはシーケンシャルアクセス)
  • 55. 55 @ikwzmZynqMP 勉強会(2016/2/20) IOMMU プロセス 1 (仮想アドレス) Main Memory (物理アドレス)MMU 0x0000_0000 0x0000_1000 0x0000_2000 0x0000_3000 0x0000_4000 buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] buf[0x0000] buf[0x1000] buf[0x2000] buf[0x3000] Accelerator からみた アドレス空間 IOMMU
  • 56. 56 @ikwzmZynqMP 勉強会(2016/2/20) IOMMU ・良い点 ・DMA の開発が楽(面倒は MMU にお任せ) ・ドライバの開発が楽(MMU の管理は OS にお任せ) ・バッファ間のデータコピーの削減 ・ランダムアクセスに強い ・悪い点 ・IOMMU が必要 ・仮想アドレスから物理アドレスに変換する際のオーバーヘッド ・いまいち流行ってない(知見が少ない、 これからに期待)
  • 57. 57 @ikwzmZynqMP 勉強会(2016/2/20) I/O ZynqMP の IOMMU S_AXI_ACP_FPD S_AXI_ACE_FPD S_AXI_HPC0_FPD S_AXI_HPC1_FPD S_AXI_HP0_FPD S_AXI_HP1_FPD S_AXI_HP2_FPD S_AXI_HP3_FPD M_AXI_HPM0_FPD M_AXI_HPM1_FPD S_AXI_LPD M_AXI_HPM0_LPD PL Interface Name Addr Width Data Width 40 49 40 32 49 32 or 64 or 128 IOMMU No Yes Yes No Cache Coherence No Full I/O I/O No Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 58. 58 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP の S_AXI_LPD の注意点 S_AXI_LPD LPD-PL Interface This port can be used in physical or virtual mode by setting the AxUSER bit. In virtual mode, it cannot directly access the LPD. Instead, virtual mode accesses are routed as follows. PL → LPD → FPD (SMMU/CCI) → LPD The S_AXI_PL_LPD is a PL interface that connects into the low-power domain. For situations where the FP domain is powered down, this interface provides a high-performance mastering capability from the PL. Due to the interconnect topology, this port has a relatively long latency to DDR. 『 Zynq UltraScale+ MPSoC TRM UG1085 (v1.0) November 24,2015』 822 Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 59. 59 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP の IOMMU(ちょっと詳細に) Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D TBU2 PS TBU1 TBU0TBUTBUTBU TCU SMMU(System Memory Management Unit) 各 I/F 毎に MMU があるのではない 全体で IOMMU は一つ 次の2つのコンポーネントで構成 ・TBU(Traslation Buffer Unit) ・ アドレス変換用キャッシュ TLB(Translation Lookaside Buffer) ・ TLB にヒットした時のみアドレス変換を行う ・ TLB ミスの時は TCU にテーブルウォークを依頼する ・ 各 I/F の近くに分散配置 ・TCU(Translation Control Unit) ・ テーブルウォークを行い、 各 TBU に変換結果を通知
  • 60. 60 @ikwzmZynqMP 勉強会(2016/2/20) IOMMU のアドレス変換のオーバヘッドはどのくらいだろう? ・オーバーヘッドの"平均"サイクル数  TLB ヒット率×1+(1-TLB ヒット率)×TLB ミス時の Table Walk サイクル数 ・TLB のヒット率は? ・Accelerator のアクセスパターン ・シーケンシャル/ランダム ・アドレスの先出しする/しない ・1 トランザクションの転送量 ・TLB の構成(ZynqMP では 512entry 4-way) ・TLB の追い出しアルゴリズム(LRU? Random?) ・Table Walk 時に充填する TLB のエントリ数は? ・TLB ミス時の Table Walk の性能はどのくらい?
  • 61. 61 @ikwzmZynqMP 勉強会(2016/2/20) ・オーバーヘッドの"平均"サイクル数  TLB ヒット率×1+(1-TLB ヒット率)×TLB ミス時の Table Walk サイクル数 ・TLB のヒット率は? ・Accelerator のアクセスパターン ・シーケンシャル/ランダム ・アドレスの先出しする/しない ・1 トランザクションの転送量 ・TLB の構成(ZynqMP では 512entry 4-way) ・TLB の追い出しアルゴリズム(LRU? Random?) ・Table Walk 時に充填する TLB のエントリ数は? ・TLB ミス時の Table Walk の性能はどのくらい? IOMMU のアドレス変換のオーバヘッドはどのくらいだろう? やってみないとわからん
  • 62. 62 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP の Global System Address Map DDR SDRAM LPD-PL interface FPD-PL(HPM0) interface FPD-PL(HPM1) interface Quad-SPI PCIe Low Reserved Coresight System Trace RPU Low Latency Port Reserved FPS Slave Lower LPS Slave CSU, PMU, TCM, OCM Reserved DDR SDRAM 2GB 512MB 256MB 256MB 512MB 256MB 128MB 16MB 1MB 63MB 16MB Upper LPS Slave 16MB 12MB 4MB 12GB FPD-PL(HPM0) interface 4GB FPD-PL(HPM1) interface 4GB PCIe High 8GB 32GB DDR SDRAM FPD-PL(HPM0) interface 224GB FPD-PL(HPM1) interface 224GB PCIe High 256GB 256GB Range Name Size Start Address End Address 0x00_0000_0000 0x00_8000_0000 0x00_A000_0000 0x00_B000_0000 0x00_C000_0000 0x00_E000_0000 0x00_F000_0000 0x00_F800_0000 0x00_F900_0000 0x00_F910_0000 0x00_FD00_0000 0x00_FE00_0000 0x00_FF00_0000 0x00_FFC0_0000 0x01_0000_0000 0x04_0000_0000 0x05_0000_0000 0x06_0000_0000 0x08_0000_0000 0x10_0000_0000 0x48_0000_0000 0x80_0000_0000 0xC0_0000_0000 0x00_7FFF_FFFF 0x00_9FFF_FFFF 0x00_AFFF_FFFF 0x00_BFFF_FFFF 0x00_DFFF_FFFF 0x00_EFFF_FFFF 0x00_F7FF_FFFF 0x00_F8FF_FFFF 0x00_F90F_FFFF 0x00_FCFF_FFFF 0x00_FDFF_FFFF 0x00_FEFF_FFFF 0x00_FFBF_FFFF 0x00_FFFF_FFFF 0x03_FFFF_FFFF 0x04_FFFF_FFFF 0x05_FFFF_FFFF 0x07_FFFF_FFFF 0x0F_FFFF_FFFF 0x47_FFFF_FFFF 0x7F_FFFF_FFFF 0xBF_FFFF_FFFF 0xFF_FFFF_FFFF 32bitaddr 36bitaddr 40bitaddr
  • 63. 63 @ikwzmZynqMP 勉強会(2016/2/20) 32bit アドレスの注意事項 ・MMU を使わないとアクセス可能なメインメモリは最大 2GB ・APU が Aarch32(ARM 32bit mode)の場合 ・RPU(Cortex-R5)の場合 ・PL 側のマスターのアドレスが 32bit しかない場合
  • 64. 64 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP PS-PL Interface S_AXI_ACP_FPD S_AXI_ACE_FPD S_AXI_HPC0_FPD S_AXI_HPC1_FPD S_AXI_HP0_FPD S_AXI_HP1_FPD S_AXI_HP2_FPD S_AXI_HP3_FPD M_AXI_HPM0_FPD M_AXI_HPM1_FPD S_AXI_LPD M_AXI_HPM0_LPD PL Interface Name Addr Width Data Width 40 49 40 32 49 32 or 64 or 128 MMU No Yes Cache Coherence I/O No Full I/O Yes No I/O No Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 65. 65 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP の S_AXI_ACP_FPD S_AXI_ACP_FPD ・利点(Benefit) ・ Lowest latency to L2 cache. ・ Cache coherency. ・ Ability to allocate into L2 cache. ・検討事項(Considerations) ・ Only 64B and 16B transactions supported - requires specially designed PL-DMA. ・ Shares CPU interconnect bandwidth. ・ More complex PL master design. ・推奨使用方法(Suggested Uses) ・ PL logic tightly coupled with APU. ・ Medium granularity CPU offload. Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 66. 66 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP の S_AXI_ACE_FPD S_AXI_ACE_FPD ・利点(Benefit) ・ Optional cache coherency. ・ APU can snoop into PL cached masters (two-way coherency). ・検討事項(Considerations) ・ Limited burst length (64B) support when snooping into cached master in PL (PS to PL). ・ When used as ACELITE, larger burst length from PL to PS can cause the CPU to hang (direct AXI4 path between CCI and PS-DDR, which impacts other applications waiting to access DDR). ・ Complex PL design that require support for ACE. ・推奨使用方法(Suggested Uses) ・ Cached accelerators in PL. ・ System cache in PL using block RAM. Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU
  • 67. 67 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU ZynqMP の S_AXI_HPC[01]_FPD S_AXI_HPC[01]_FPD ・利点(Benefit) ・ High throughput (Best Effort). ・ Multiple interfaces. ・ AXI FIFO interface with QoS-400 traffic shaping. ・ Hardware assisted coherency; no cache flush/invalidate in software driver. ・ Virtualization support with SMMU in path. ・検討事項(Considerations) ・ More complex PL master design. ・ PL design to drive AxCACHE as needed for coherency. ・推奨使用方法(Suggested Uses) ・ High performance DMA for large datasets.
  • 68. 68 @ikwzmZynqMP 勉強会(2016/2/20) Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU ZynqMP の S_AXI_HP[0123]_FPD S_AXI_HP[0123]_FPD ・利点(Benefit) ・ High throughput (Best Effort). ・ Multiple interfaces. ・ AXI FIFO interface with QoS-400 traffic shaping. ・ Virtualization support with SMMU in path. ・検討事項(Considerations) ・ Software driver to handle cache flush/invalidate. ・ More complex PL master design. ・推奨使用方法(Suggested Uses) ・ High performance DMA for large datasets.
  • 69. 69 @ikwzmZynqMP 勉強会(2016/2/20) ZynqMP の S_AXI_LPD S_AXI_LPD ・利点(Benefit) ・ Fastest, low latency path to the OCM and TCM. ・ Optional coherency. ・ SMMU in datapath provides option for virtualization. ・ PL access to LPD when FPD is powered off. ・ High throughput. ・推奨使用方法(Suggested Uses) ・ Safety applications. Cache Coherent Interconnect MemorySubsystem RPUI/O GPU PCIe SATA 1MB L2 Cache ACE I/F ACP I/F Snoop Control Unit Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D Cortex-A53 32KB I/D MMU PS MMU MMU