text: GPGPUに対応したモダンなGPUは、GPUのスレッドブロック（ワークグループ、スレッドグループ）内でのみアクセス可能な共有メモリ（ローカルメモリ、グループ共有メモリ）を有している。この共有メモリは、VRAM上に確保されるグローバルメモリと比べると小容量だが高速であり、アプリケーションコードから操作可能なキャッシュメモリの役割を果たす。CUDA、OpenCL、DirectComputeのようなAPIは、それぞれ名称は異なるものの、このGPU共有メモリを利用する機能を持ち、グローバルメモリから読み出したデータをGPUのスレッドブロック内で共有したり、計算結果を交換したりする用途に活用することで、高速化を図ることができる。ソフトウェアによる共有メモリ  ソフトウェアにおける共有メモリは、以下のいずれかを意味する。プロセス間通信 (IPC) の技法の一つ。同時に動作しているプログラム間でデータを交換する方法である。1つのプロセスがメモリ上に他のプロセスからもアクセスできる領域を作成する。通常、アクセスする主体ごとにコピーを用意するようなデータがあるとき、仮想記憶機構や何らかの明示的プログラム機構を使ってそれらが同じ実体（物理メモリ）をアクセスするようマッピングすること。共有ライブラリや (Execute in Place) でよく使われる。スレッド実装の一方式 プロセス群は共有メモリ領域に通常のメモリ領域と同じようにアクセスできるので、他のプロセス間通信（名前付きパイプ、ソケット、CORBAなど）と比較して通信手段としては非常に高速である。しかし、プロセス群が同じマシン上で動作しなければならないという制約があり（他のIPC手段はネットワーク上でも機能する）、プロセスが別々のCPU上で動作する場合はハードウェアによる共有メモリを使っていることになり、キャッシュコヒーレンシなどに注意が必要となる。プロセス間の通信がFIFOなストリーム型の場合は、名前付きパイプも通信手段として検討すべきである。一般に共有メモリ自体は保護機能をもたないので動作は高速である。しかし共有されるメモリは不定のタイミングで複数のプロセスからアクセスされる可能性がある。競合を避ける為にはセマフォやロックなどで競合を回避しなければならない。