(cache memory) CPU/

CPUCPU

 ()

意義

編集

データ帯域

編集



 SGEMV2.0 GHz Haswell CPU128GB/s[1] (8 [FMA/inst.] ÷ 0.5 [CPI=cycle/inst.][2] * 2.0G [Hz=cycle/sec] * 4 [Byte/FP32])-5GB/s[3]CPU5%[4]

構成

編集
 
キャッシュメモリの構造

RAMCPULSICPU

キャッシュ階層

編集

: multi level caches[5]CPUCPUL11L22[6]2013L4CPUCPULLCLast Level Cache

データ格納構造

編集

()(Intel Pentium 48kByte L164Byte)(1)()1()
 

 (Direct Mapped)

11

 (Set Associative)

(2)nnCAM (Content Addressable Memory)使32

 (Fully Associative)


ライン入替え方式 (Refill)

編集

()

 (Round Robin)



LRU (Least Recently Used)



 (Random)


データ更新方式 (Replacement policy)

編集
 
 

CPU22

 (Write Through Algorithm)

CPUCPUCPUL1

 (Write Back Algorithm)

CPUCPUL22Write allocate  No-write allocate 
Write allocate  fetch on write 

No-write allocate  write-no-allocate  write around  

キャッシュコヒーレンシ (Cache Coherency)

編集

マルチCPU/キャッシュ構成など複数のバスマスタが存在し、各々がデータ更新を行った場合でも最新の正しいデータにアクセスできるよう保つべきデータの一貫性のことをキャッシュコヒーレンシもしくはキャッシュコンシステンシ (Cache Consistency) という。データ更新に上記ライトバック方式を用いた場合など、キャッシュに更新されたデータが滞留して主記憶装置など下位レベルのメモリには最新のデータが存在しない可能性がある。この時に複数のCPUが同一の記憶領域を参照/更新しようとすると、データの不整合が起こり正しい結果が得られないため、これを解決しどのCPUも必ず最新のデータにアクセスできるようにする必要がある。このための代表的なアルゴリズムにスヌープ方式やディレクトリ方式、共有キャッシュがある。

スヌープ方式 (Cache Snooping)

CPU
 (Invalidate Protocol)

MESI(Illinois)MOSI(Berkeley)

 (Update Protocol)

MEI(Firefly)MOES(DRAGON)


 (Directory-based Protocol)



 (Shared Cache)

1CPU1CPUCPU

その他機構

編集
プリフェッチ (Pre-fetch)
CPUが専用命令などによりあらかじめデータをキャッシュに汲んでおく動作。データの流れがある程度予測できるような特定のソフトウエアアルゴリズムは、先んじてプリフェッチを行うことで実際にデータが必要な場面で余分なレイテンシがかかることなくスムーズに処理を行うことができる。例えばストリーミング処理のようなデータの流れや処理量などが単純で予測しやすい処理などは、プリフェッチを行うことで大幅に性能向上する場合がある。

目的別分類

編集



CPU(x86CPU)CPU



CPU2CPUCPUCPU



Pentium 4(ISA)CISCRISC使Pentium 4L1120008



x86(PentiumISA)CPU(CMS)Crusoe16CMSx86CPU



ISA使AMD Am29000

ソフトウェアへの影響

編集



Solaris 2.4[7]使

LinuxFreeBSDGNU ldOSELF使[8][9]

脚注

編集


(一)^ "to sustain Haswells CPU peak (e.g., 16 multiply-adds per cycle), a core must access 16 matrix elements (= 64 bytes) per cycle, all from memory ... assuming 2.0GHz processor, it requires memory bandwidth of:  64 × 2.0 GHz = 128 GB/s" . (2016). What You Must Know about Memory, Caches, and Shared Memory. , .

(二)^ "__m256 _mm256_fmadd_ps ... Throughput (CPI) ... Haswell ... 0.5" Intel Intrinsics Guide. 2022-04-03.

(三)^ "A simple memcpy experiment ... 4.575611 GB/sec ... an almost proportional improvement up to 10 lists" . (2016). What You Must Know about Memory, Caches, and Shared Memory. , .

(四)^ "it requires memory bandwidth ...  20× more than it provides" . (2016). What You Must Know about Memory, Caches, and Shared Memory. , .

(五)^ "multi level caches ... recent processors have multiple levels of caches" . (2018). What You Must Know about Memory, Caches, and Shared Memory. , .

(六)^ "multiple levels of caches (L1, L2, . . . )" . (2018). What You Must Know about Memory, Caches, and Shared Memory. , .

(七)^ Bonwick, Jeff (6 June 1994). "The Slab Allocator: An Object-Caching Kernel". USENIX Summer 1994 Technical Conference. USENIX.

(八)^ Torvalds, Linus. arch/x86/kernel/vmlinux.lds.S at master. GitHub. 2024526 Linux x86.data..read_mostlyREAD_MOSTLY_DATA()

(九)^ The FreeBSD Project. sys/conf/ldscript.amd64 at main. GitHub. 2024526 FreeBSD amd64.data.read_mostly

参考文献

編集

, L, A /  /   BP19935ISBN 4-8222-7152-8 

, L, A   2BP19995ISBN 4-8222-8056-X 

, L, A   2BP19995ISBN 4-8222-8057-8 

,  RISCCQ︿TECHI Vol.2020044ISBN 4-7898-3331-3 

IA-32    

関連項目

編集