共有 メモリ
概要
[![](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Shared_memory.svg/300px-Shared_memory.svg.png)
ハードウェアによる共有 メモリ
[![](https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/MMU_and_IOMMU.svg/220px-MMU_and_IOMMU.svg.png)
コンピュータのハードウェアによる
- CPU-メモリ
間 がボトルネックになりやすい。共有 メモリ型 コンピュータはあまりプロセッサ数 を増 やせない(CPUを増 やしてもCPU数 に比例 して性能 が強化 されなくなる)。多 くの場合 、10個 かそれ以下 のプロセッサ数 である。 - キャッシュコヒーレンシ
問題 。あるキャッシュ上 であるメモリ位置 の情報 が更新 され、それを他 のプロセッサが必要 とする場合 、その更新 を他 のプロセッサにも反映 させなければならない。さもないとそれぞれのプロセッサが一貫 していないデータを使 って動作 することになる。そのためのプロトコルをコヒーレンシプロトコルと呼 び、それがうまく機能 すれば複数 のプロセッサが高速 に共有 メモリ(上 の情報 )にアクセスできるようになる。しかし一方 で、コヒーレンシプロトコルがオーバーヘッドとなり、性能 のボトルネックになることもある。
ボトルネック
GPU内 の共有 メモリ
[GPGPUに
ソフトウェアによる共有 メモリ
[ソフトウェアにおける
- プロセス
間 通信 (IPC) の技法 の一 つ。同時 に動作 しているプログラム間 でデータを交換 する方法 である。1つのプロセスがメモリ上 に他 のプロセスからもアクセスできる領域 を作成 する。 通常 、アクセスする主体 ごとにコピーを用意 するようなデータがあるとき、仮想 記憶 機構 や何 らかの明示 的 プログラム機構 を使 ってそれらが同 じ実体 (物理 メモリ)をアクセスするようマッピングすること。共有 ライブラリやXIP (Execute in Place) でよく使 われる。- スレッド
実装 の一方 式
プロセス
CoMarshalInterThreadInterfaceInStream()
IStream
オブジェクトの
UNIXでのサポート
[POSIX にはshm_open
というshmat
、shmctl
、shmdt
が
shm_open
で
Linuxカーネル 2.6 では、RAMディスク
Androidでのサポート
[Android では Linux カーネルをashmem_pin_region()
を
Windowsでのサポート
[Microsoft Windowsでは、Win32 APIのCreateFileMapping()
OpenFileMapping()
MapViewOfFile()
なおWindows APIには、CreateSharedMemory()
[7][8]など “-SharedMemory” の
プログラミング言語 ごとのサポート
[PHP では POSIX で
.NET Frameworkはバージョン4でSystem.IO.MemoryMappedFiles.MemoryMappedFile
クラス[12]を
脚注
[- ^ CUDAプログラミングの
基本 / パート II - カーネル | NVIDIA - ^ Documentation of shm_open from the Single UNIX Specification
- ^ Robbins, Kay A.; Steven Robbins (2003). UNIX systems programming: communication, concurrency, and threads (2 ed.). Prentice Hall PTR. p. 512. ISBN 978-0-13-042411-2 2011
年 5月 13日 閲覧 . "The POSIX interprocess communication (IPC) is part of the POSIX:XSI Extension and has its origin in UNIX System V interprocess communication." - ^ Shared memory facility from the Single UNIX Specification.
- ^ Stevens, Richard (1999). UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications. (2 ed.). Prentice Hall PTR. p. 311. ISBN 0-13-081081-9
- ^ Creating Named Shared Memory - Windows applications | Microsoft Docs
- ^ CreateSharedMemory function (Windows), Internet Archive
- ^ LSA_CREATE_SHARED_MEMORY (ntsecpkg.h) - Win32 apps | Microsoft Learn
- ^ Chapter 16. Boost.Interprocess - 1.80.0
- ^ QSharedMemory Class Reference
- ^ PHP
共有 メモリ関数 - ^ MemoryMappedFile Class (System.IO.MemoryMappedFiles) | Microsoft Docs
関連 項目
[学習 参考 書
[- Julian Shun: "Shared-Memory Parallelism Can be Simple, Fast, and Scalable", ACM books, ISBN 978-1-97000-191-4, doi:10.1145/3018787 (2017).
外部 リンク
[shm_overview(7)
– JM Project Linux Overview, Conventions and Miscellanea マニュアル- IPC:Shared Memory by Dave Marshall
- Shared Memory Introduction, Ch. 12 from book by Richard Stevens "UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications".