共有メモリとは? わかりやすく解説

共有メモリ

読み方きょうゆうメモリ
【英】shared memory

共有メモリとは、マルチタスクを行う際、ユーザー複数メモリアクセスするが、そのそれぞれ衝突することのない技術のことである。

半導体メモリのほかの用語一覧
メモリ:  揮発性メモリ  キャッシュメモリ  記憶領域  共有メモリ  コヒーレンシ  メモリスイッチ  メモリ

セマフォ・共有メモリおよび IPC 関数(semaphore)

導入

このモジュールは、System V IPC 関連の関数へのラッパーを提供します。 セマフォ・共有メモリおよびプロセス間通信(IPC)がその中に含まれます。
セマフォは、マシーン上のリソースへの排他的アクセス機能や、 同時にあるリソースを使用することができるプロセスの数を制限するために 使用することができます。
このモジュールは、System V 共有メモリを使用した共有メモリ関数も 提供します。共有メモリは、グローバル変数へのアクセス手段を提供するために 使用することが可能です。別の httpd デーモンおよび (Perl, C, ... のような)他のプログラムさえ、グローバルデータ交換を 提供するこのデータにアクセスすることが可能です。 共有メモリは、同時アクセスに関して安全ではないということを覚えておいて ください。 同期をとるには、セマフォを使用してください。 表 263. Unix OS による共有メモリの制限
SHMMAX共有メモリの最大サイズ。通常は 131072 バイト
SHMMIN共有メモリの最小サイズ。通常は 1 バイト
SHMMNI共有メモリセグメントの最大数。通常は 100
SHMSEGプロセス毎の共有メモリの最大数。通常は 6


メッセージング関数は、他のプロセスと相互にメッセージを送受信する ために使用することができます。 これにより簡単で効率的なプロセス間のデータ交換が可能であり、 Unix ドメインソケットを用いる場合のような設定は不要です。
注意: この拡張モジュールは Windows 環境では利用できません。

要件

外部ライブラリを必要としません。

インストール手順

この関数はデフォルトでは有効になってはいません。System V セマフォの サポートを有効にするには、オプション --enable-sysvsem を指定して PHP を コンパイルする必要があります。System V 共有メモリのサポートを有効にするには、 オプション --enable-sysvshm を 指定して PHP をコンパイルする必要があります。System V メッセージを有効に するには、オプション --enable-sysvmsg を指定して PHP をコンパイル します。

実行時設定

php.ini の設定により動作が変化します。
表 264. セマフォ設定オプション
名前デフォルト変更の可否変更履歴
sysvmsg.value"42"PHP_INI_ALL 
sysvmsg.string"foobar"PHP_INI_ALL 

PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。

リソース型


定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。
表 265. System V メッセージ定数
定数変更履歴
MSG_IPC_NOWAITinteger 
MSG_EAGAINinteger5.2.0 以降
MSG_ENOMSGinteger5.2.0 以降
MSG_NOERRORinteger 
MSG_EXCEPTinteger 


目次

ftok — パス名とプロジェクト ID を、System V IPC キーに変換する
msg_get_queue — メッセージキューを作成またはそれにアタッチする
msg_receive — メッセージキューからメッセージを受信する
msg_remove_queue — メッセージキューを破棄する
msg_send — メッセージキューにメッセージを送信する
msg_set_queue — メッセージキューデータ構造体の情報を設定する
msg_stat_queue — メッセージキューデータ構造体の情報を返す
sem_acquire — セマフォを得る
sem_get — セマフォ ID を得る
sem_release — セマフォを解放する
sem_remove — セマフォを削除する
shm_attach — 共有メモリセグメントを作成またはオープンする
shm_detach — 共有メモリセグメントへの接続を閉じる
shm_get_var — 共有メモリから変数を返す
shm_put_var — 共有メモリの変数を挿入または更新する
shm_remove_var — 共有メモリから変数を削除する
shm_remove — Unix システムから共有メモリを削除する

共有メモリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/10/28 23:23 UTC 版)

情報処理において共有メモリ(きょうゆうメモリ)とは、複数のプログラムが同時並行的にアクセスするメモリである。


  1. ^ CUDAプログラミングの基本 / パート II - カーネル | NVIDIA
  2. ^ Documentation of shm_open from the Single UNIX Specification
  3. ^ 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. https://books.google.co.jp/books?id=tdsZHyH9bQEC&redir_esc=y&hl=ja 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." 
  4. ^ Shared memory facility from the Single UNIX Specification.
  5. ^ Stevens, Richard (1999). UNIX Network Programming, Volume 2, Second Edition: Interprocess Communications. (2 ed.). Prentice Hall PTR. p. 311. ISBN 0-13-081081-9 
  6. ^ Creating Named Shared Memory - Windows applications | Microsoft Docs
  7. ^ CreateSharedMemory function (Windows), Internet Archive
  8. ^ LSA_CREATE_SHARED_MEMORY (ntsecpkg.h) - Win32 apps | Microsoft Learn
  9. ^ Chapter 16. Boost.Interprocess - 1.80.0
  10. ^ QSharedMemory Class Reference
  11. ^ PHP 共有メモリ関数
  12. ^ MemoryMappedFile Class (System.IO.MemoryMappedFiles) | Microsoft Docs


「共有メモリ」の続きの解説一覧

共有メモリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/18 09:34 UTC 版)

GPGPU」の記事における「共有メモリ」の解説

GPUによるVRAMへのアクセスは、複数プロセッサ群によって並列的に発生するため、連続したメモリ領域対するコアレスアクセス(coalesce access、≒シーケンシャルアクセス)を行なうことで効率化高速化できる。NVIDIA GPUでは32のハードウェアスレッドを束ねるバッチ単位Warp呼びAMD GPUでは64のハードウェアスレッドを束ねるバッチ単位Wavefront呼んでいるが、これらのユニット内ではプロセッサが完全に同期し動作するため、バッチ単位ごとにまとめて連続領域アクセス(コアレスアクセス)することで効率良くなる逆に言えばバッチ単位内のスレッドそれぞれ遠く離れたばらばらのアドレスアクセスするような非コアレスアクセス(≒ランダムアクセス)は効率悪くなるGPGPU本質は、大量演算器によって実現されるハードウェアマルチスレッド集合用いたデータ並列演算により性能を稼ぐ点にある。例えNVIDIA GPUのFermi/Keplerマイクロアーキテクチャでは、演算器の最小単位CUDAコア (SP, streaming processor) と呼び、また複数CUDAコア束ねる単位SMX (SM, streaming multiprocessor) と呼んでいるが、GPUでの演算は、複数SMXに対して同一命令発行していき、各々のハードウェアスレッドに割り当てられデータに対して並列的に演算行なうスタイルとなる。またWarp単位内における各スレッドはすべて同一命令実行する(SIMT(英語版))。基本概念としてはAMDVLIWGraphics Core NextといったGPUアーキテクチャにおいても同様である。 しかし、このGPGPUプログラミングが特に従来型CPUプログラミング異なる点は、共有メモリ(shared memory、シェアードメモリ)の存在である。共有メモリは小容量だが高速で、ユーザープログラマーが明示的に管理できるキャッシュメモリ(≒L1キャッシュ)の仕組み果たし複数コアデータ共有交換する目的使用できる。なお各APIにおいてはCUDAは共有メモリ、OpenCLはローカルメモリ、DirectComputeグループ共有メモリ、そしてC++ AMPタイル静的メモリという名称で、それぞれ同等機能備えている。 例えばFermi/Keplerマイクロアーキテクチャでは、1SMXあたり最大48KBの共有メモリを使用できるが、外部にあるDRAMキャッシュなしでアクセスする場合比べて、共有メモリのレイテンシは(スレッド間のバンクコンフリクトがないかぎり)100倍小さくなる。そのため、複数スレッドから参照されるデータ一時書き込み場所として共有メモリを活用することにより、高速並列アルゴリズム(たとえば高速総和求め並列リダクションなど)や、GPUプログラミングにおける高速化必要なコアレスアクセス(≒シーケンシャルアクセス)を実現することができるとNVIDIA説明している。しかしながら最大でも48KBしかない共有メモリというハードウェア制約アルゴリズムの幅に制限をかけるため、共有メモリの存在GPUプログラミング難しさにもつながってしまう。また、共有メモリに読み書きする際、スレッド間の同期をとるための処理もプログラマー明示的に記述する必要がある。 なお、インテルCPUL2キャッシュメモリはL1キャッシュメモリ比べて容量大きく、またプロセッサコア側に直結されているが、NVIDIA GPUL2キャッシュメモリはL1キャッシュメモリ比べて容量がほとんど変わらず、またメモリ側に直結されているなど、データアクセス傾向違いハードウェア設計思想違いにも反映されており、単純にキャッシュメモリ容量だけを比較して性能優劣決めることはできない

※この「共有メモリ」の解説は、「GPGPU」の解説の一部です。
「共有メモリ」を含む「GPGPU」の記事については、「GPGPU」の概要を参照ください。

ウィキペディア小見出し辞書の「共有メモリ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「共有メモリ」の関連用語

共有メモリのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



共有メモリのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2024 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリ共有メモリの記事を利用しております。
PHP Documentation GroupPHP Documentation Group
Copyright © 1997 - 2024 by the PHP Documentation Group.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの共有メモリ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのGPGPU (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS