スクラッチパッドメモリ(SPM )は、コンピュータ用語ではスクラッチパッド、スクラッチパッドRAM、ローカルストアとも呼ばれ、通常は高速な内部メモリで、計算、データ、その他の作業中のデータを一時的に保存するために使用されます。マイクロプロセッサ(またはCPU)に関して言えば、スクラッチパッドは、小さなデータ項目を保持して素早く取り出すために使用される特殊な高速メモリを指します。これは、日常生活におけるスクラッチパッド(メモやスケッチ、文章などを書き留めるための紙の束)の用途やサイズに似ています。スクラッチパッドがメインメモリの隠された部分である場合、バンプストレージと呼ばれることもあります。
一部のシステムでは、プロセッサがメインメモリとの間でデータを移動するための明示的な命令をレジスタした後、 ALUに最も近いメモリであるという点で、 L1キャッシュに似ていると考えることができます。多くの場合、 DMAベースのデータ転送が使用されます。[ 1 ]キャッシュを使用するシステムとは対照的に、スクラッチパッドを使用するシステムは、異なるスクラッチパッドとメインメモリへのメモリアクセスのレイテンシーが異なるため、非均一メモリアクセス(NUMA)レイテンシーのシステムです。キャッシュを使用するシステムとのもう1つの違いは、スクラッチパッドには通常、メインメモリにも格納されているデータのコピーが含まれていないことです。
スクラッチパッドは、キャッシュロジックの簡素化、および複数のプロセッサを使用するシステム、特に組み込みシステム向けのマルチプロセッサシステムオンチップにおいて、ユニットがメインメモリの競合なしに動作することを保証するために用いられます。これらは主に、CPUスタックにあるような一時的な結果を格納するのに適しており、通常はメインメモリに常にコミットする必要はありません。ただし、DMAによって供給される場合は、低速なメインメモリの状態をミラーリングするためのキャッシュの代わりにも使用できます。使用効率に関しては、参照の局所性の問題が同様に適用されます。ただし、一部のシステムでは、ストライドDMAを使用して矩形データセットにアクセスできます。もう1つの違いは、スクラッチパッドはアプリケーションによって明示的に操作されることです。これらは、キャッシュの動作によって予測可能なタイミングが妨げられるリアルタイムアプリケーションに役立つ可能性があります。
スクラッチパッドは、汎用性が求められる主流のデスクトッププロセッサでは使用されません。汎用性が必要なのは、世代を超えてレガシーソフトウェアが動作し、利用可能なオンチップメモリサイズが変化する可能性があるためです。スクラッチパッドは、組み込みシステム、特殊用途プロセッサ、ゲーム機など、チップがMPSoCとして製造されることが多く、ソフトウェアが特定のハードウェア構成に合わせて調整されていることが多い用途に適しています。
PowerPCなどの一部のアーキテクチャでは、キャッシュ制御命令を使用することで、キャッシュラインのロックやスクラッチパッドの必要性を回避しようとしています。メモリ領域を「データキャッシュブロック:ゼロ」(ラインを割り当て、メインメモリからロードする代わりにその内容をゼロに設定する)でマークし、使用後に破棄する(「データキャッシュブロック:無効化」、メインメモリが更新されたデータを受け取らなかったことを示す)ことで、キャッシュをスクラッチパッドのように動作させることができます。これらの命令はあくまでヒントであり、実際のキャッシュサイズに関係なく、基盤となるハードウェアは正しく動作するため、汎用性が維持されます。
マルチコア構成におけるプロセッサ間通信に関して、Cellのローカルストア間DMAと、Intel Core 2 DuoやXbox 360のカスタムPowerPCのような共有L2キャッシュ構成には類似点があります。L2キャッシュを使用すると、結果をメインメモリにコミットすることなく、プロセッサ間で結果を共有できます。これは、アルゴリズムのワーキングセットがL2キャッシュ全体を包含する場合に有利になります。しかし、ローカルストア間DMAを活用するようにプログラムを作成すると、Cellでは、各ローカルストアが単一プロセッサのプライベートワークスペースとプロセッサ間の共有ポイントの両方の役割を果たすという利点があります。つまり、他のローカルストアは、あるプロセッサから見ると、従来のチップの共有L2キャッシュと同様の立場にあります。トレードオフは、バッファリングでメモリが無駄になり、同期のためのプログラミングが複雑になることですが、これは従来のチップのプリキャッシュページに似ています。この機能が効果的なドメインには、次のものがあります。
従来のプロセッサでも、キャッシュ制御命令を用いることで同様の利点を得ることは可能でしょう。例えば、L2をバイパスしてL1へのプリフェッチを可能にしたり、L1からL2への転送を示すもののメインメモリへの書き込みは行わないエビクションヒントを使用したりすることが可能です。しかしながら、現状ではこのような機能を実用的な形で提供するシステムは存在せず、このような命令は実際には各コアが使用するキャッシュ領域間での明示的なデータ転送を反映するものであるべきです。