JP6319473B1 - 情報処理装置 - Google Patents

情報処理装置 Download PDF

Info

Publication number
JP6319473B1
JP6319473B1 JP2017020049A JP2017020049A JP6319473B1 JP 6319473 B1 JP6319473 B1 JP 6319473B1 JP 2017020049 A JP2017020049 A JP 2017020049A JP 2017020049 A JP2017020049 A JP 2017020049A JP 6319473 B1 JP6319473 B1 JP 6319473B1
Authority
JP
Japan
Prior art keywords
processor
counter
store
shared memory
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017020049A
Other languages
English (en)
Other versions
JP2018128756A (ja
Inventor
智久 福山
智久 福山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2017020049A priority Critical patent/JP6319473B1/ja
Priority to US15/850,083 priority patent/US10318424B2/en
Application granted granted Critical
Publication of JP6319473B1 publication Critical patent/JP6319473B1/ja
Publication of JP2018128756A publication Critical patent/JP2018128756A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】アクワイヤ側プロセッサに対する無効化要求の大域可視性を保証する際、プロセッサ−共有メモリ間ネットワークの負荷を低減する情報処理装置を提供する。【解決手段】共有メモリは、リリース側プロセッサからのストア命令を受信すると、アクワイヤ側プロセッサにキャッシュの無効化要求を送信し、実行済カウンタを加算し、ストア命令の受信と非同期でカウント値をアクワイヤ側プロセッサへ送信する。リリース側プロセッサは、ストア命令を発行すると加算し、実行済カウンタのカウント値を受信するとカウント値だけ減算するストア・カウンタと、ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算する待機カウンタとを有する。両カウンタが0になった場合、アクワイヤ側プロセッサのキャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行する。【選択図】図4

Description

本発明は、情報処理装置、メモリ順序保障方法、及びプログラムに関する。
複数のプロセッサで共有されるメモリ(もしくは、共有キャッシュ)を持ち、かつ、コヒーレンス制御にディレクトリ方式を採用するコンピュータアーキテクチャがある。そして、このアーキテクチャにおいて、リリースコンシステンシモデルに基づくメモリの順序保証を行う際のアクアイア(Acquire)側プロセッサに対する無効化要求の大域可視性(global Visibility)を保証する情報処理装置の一例が、特許文献1に記載されている。
特許文献1に記載の情報処理装置は、複数のプロセッサと、共有メモリと、複数のプロセッサと共有メモリを接続するネットワークとを有する。各々のプロセッサは、キャッシュと、プロセッサから共有メモリに対するアクセスを制御するメモリアクセス制御手段と、共有メモリの無効化要求に基づいて、キャッシュの無効化の処理を行う無効化要求制御手段とを含む。共有メモリは、データを書き込むリリース(Release)側のプロセッサからのストア命令に基づいて、データを読み出すアクワイヤ側のプロセッサの無効化要求制御手段にキャッシュの無効化要求を送信し、且つストア命令を正しく受信したことを示すAck(工程応答)をリリース側のプロセッサへ送信する。
リリース側のプロセッサのメモリアクセス制御手段は、共有メモリに対しストア命令を発行すると加算し、共有メモリからストア命令を正しく受信したことを示すAckを受信すると減算するストア・カウンタと、ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算する待機カウンタとを有する。また、リリース側のプロセッサのメモリアクセス制御手段は、ストア・カウンタ、及び、待機カウンタが0になった場合、アクワイヤ側のプロセッサのキャッシュの無効化の完了の保証を要求するストア・フェンス(Store Fence)命令を発行する。
アクワイヤ側のプロセッサのメモリアクセス制御手段は、共有メモリからの無効化要求に基づいて、キャッシュの無効化の処理が完了した後で、ストア・フェンス命令に対して、キャッシュの無効化の完了を保証するロード・フェンス(Load Fence)命令を発行する。
特許第5811245号
特許文献1に記載の情報処理装置では、共有メモリは、データを書き込むリリース側のプロセッサからのストア命令に基づいて、データを読み出すアクワイヤ側のプロセッサの無効化要求制御手段にキャッシュの無効化要求を送信し、且つストア命令を正しく受信したことを示すAckをリリース側のプロセッサへ送信する。即ち、ストア命令1個の実行毎に1個のAckが返されるため、複数のプロセッサと共有メモリとの間を接続するネットワークに負荷がかかる、という課題がある。
本発明の目的は、上述した課題を解決する情報処理装置を提供することにある。
本発明の一形態に係る情報処理装置は、
複数のプロセッサと、共有メモリと、前記複数のプロセッサと前記共有メモリを接続するネットワークを有する情報処理装置であって、
各々の前記プロセッサは、
キャッシュと、
前記プロセッサから前記共有メモリに対するアクセスを制御するメモリアクセス制御手段と、
前記共有メモリの無効化要求に基づいて、前記キャッシュの無効化の処理を行う無効化要求制御手段と、を含み、
前記共有メモリは、
ストア命令の完了数をカウントする実行済カウンタを有し、
データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサの前記無効化要求制御手段に前記キャッシュの無効化要求を送信すると共に、前記実行済カウンタを加算し、
前記ストア命令の受信と非同期で、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信し、
前記リリース側のプロセッサの前記メモリアクセス制御手段は、
前記共有メモリに対しストア命令を発行すると加算し、前記共有メモリから前記実行済カウンタのカウント値を受信すると前記実行済カウンタのカウント値だけ減算する、ストア・カウンタと、
前記ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記実行済カウンタのカウント値を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
前記ストア・カウンタ、及び、前記待機カウンタが0になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、
前記アクワイヤ側のプロセッサの前記メモリアクセス制御手段は、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する。
本発明の他の形態に係るメモリ順序保障方法は、
共有メモリが、データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサにキャッシュの無効化要求を送信すると共に、実行済カウンタを加算し、前記ストア命令の受信と非同期で、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信し、
前記リリース側のプロセッサは、
前記共有メモリに対し前記ストア命令を発行すると加算し、前記共有メモリから前記実行済カウンタのカウント値を受信すると前記実行済カウンタのカウント値だけ減算する、ストア・カウンタと、
前記ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記実行済カウンタのカウント値を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
前記ストア・カウンタ、及び、前記待機カウンタが0になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、
前記アクワイヤ側のプロセッサは、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する。
本発明の他の形態に係るプログラムは、
共有メモリが、データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサにキャッシュの無効化要求を送信すると共に、実行済カウンタを加算し、前記ストア命令の受信と非同期で、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信する処理と、
前記リリース側のプロセッサが、
前記共有メモリに対し前記ストア命令を発行すると加算し、前記共有メモリから前記実行済カウンタのカウント値を受信すると前記実行済カウンタのカウント値だけ減算する、ストア・カウンタと、
前記ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記実行済カウンタのカウント値を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
前記ストア・カウンタ、及び、前記待機カウンタが0になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行する処理と、
前記アクワイヤ側のプロセッサが、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する処理と、をコンピュータに実行させる。
本発明は上述した構成を有するため、複数のプロセッサと共有メモリとの間を接続するネットワークの負荷を軽減することができる。
リリースコンシステンシモデルのメモリ順序保障の仕組みを示す図である。 特許文献1のリリース側プロセッサ、共有メモリ、アクワイヤ側プロセッサの動作を時間軸に表したタイムチャートである。 本発明の第1の実施形態に係る情報処理装置のブロック図である。 本発明の第1の実施形態に係る情報処理装置のリリース側プロセッサ、共有メモリ、アクワイヤ側プロセッサの動作を時間軸に表したタイムチャートである。 本発明の第1の実施形態に係る情報処理装置のリリース側プロセッサのメモリアクセス制御部におけるストア・カウンタと待機カウンタの動作を示すフローチャートである。 本発明の第1の実施形態に係る情報処理装置における命令処理の動作を示すフローチャートである。 本発明の第1の実施形態に係る情報処理装置の共有メモリにおけるストア命令の実行済カウンタに関連するメモリ制御部の動作を示すフローチャートである。 本発明の第1の実施形態に係る情報処理装置のリリース側プロセッサ、共有メモリ、アクワイヤ側のプロセッサの動作を時間軸に表したタイムチャートである。 本発明の第2の実施形態に係る情報処理装置における命令処理の動作を示すフローチャートである。 本発明の第2の実施形態に係る情報処理装置の共有メモリにおけるストア命令の実行済カウンタに関連するメモリ制御部の動作を示すフローチャートである。 本発明の第3の実施形態に係る情報処理装置の共有メモリにおけるストア命令の実行済カウンタに関連するメモリ制御部の動作を示すフローチャートである。 本発明の第4の実施形態に係る情報処理装置のブロック図である。 本発明の情報処理装置を、コンピュータ装置で実現したハードウェア回路を示すブロック図である。
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第1の実施形態]
まず、前提となるリリースコンシステンシモデルについて説明する。
図1は、リリースコンシステンシモデルのメモリ順序保証の仕組みを示している。メモリ順序保証とは、データの大域可視性を保証することである。すなわち、共有メモリとキャッシュとが保持するデータの一貫性を実現するために必要な処理の完了を保証することである。具体的には、共有メモリとキャッシュとが保持するデータの一貫性を実現するため、共有メモリへデータを書き込むストア命令(Store命令)に伴って、キャッシュのデータの無効化を要求する無効化要求が発行される。発行された無効化要求の処理完了のタイミングを検出することによって、大域可視性を保証する。リリースコンテンシモデルでは、キャッシュの無効化要求の処理順序は問われない。このため、所定のタイミングまでに発行された無効化要求について、処理が完了している状態を「メモリ順序保証」、あるいは、「データ順序性の保証」という場合がある。図1では、ストア・フェンス命令(Store Fence命令)とロード・フェンス命令(Load Fence命令)とによって、メモリ順序保証を実現している。
図1では、共有メモリと、共有メモリが記憶するデータの一部の写しを保持するキャッシュを有する複数のプロセッサを含む情報処理装置を前提としている。また、複数のプロセッサの一つをリリース側プロセッサ(Release側プロセッサ)、他の一つをアクワイヤ側プロセッサ(Acquire側プロセッサ)とし、リリース側プロセッサがストア・フェンス命令とストア命令(書き込み命令)によるフラグの書き込みとを実行し、アクワイヤ側プロセッサでロード・フェンス命令を実行することにより、リリース側プロセッサとアクワイヤ側プロセッサ間で同期をとる手順を説明している。
ストア・フェンス命令は、リリース側プロセッサとアクワイヤ側プロセッサとが同期をとるタイミングを指示する命令である。言い換えれば、共有メモリが保持するデータと、プロセッサが備えるキャッシュが保持するデータとの一貫性の無効化処理完了を保証することを要求する命令である。従って、アクワイヤ側プロセッサにとって、ストア・フェンス命令を検出したタイミングは、データの一貫性の処理完了保証を要求されたタイミングであるといえる。
リリースコンシステンシモデルでは、ストア・フェンス命令が実行される前のメモリアクセス命令の可視化順序は保証されない。すなわち、メモリアクセス命令、例えば、ストア命令に伴って発行される無効化要求が処理されるタイミングはバンク毎に独立して処理されるため、不確定である。従って、他のプロセッサからメモリアクセス命令を実行した結果が参照できるタイミングは保証されていないといえる。しかし、同期化を行うストア・フェンス命令とそれに続くストア命令の実行をきっかけにストア・フェンス命令以前の共有メモリへのアクセスの完了を保証する処理を開始する。
具体的には、リリース側プロセッサは、ストア・フェンス命令で共有メモリへのアクセス命令(特に、ストア命令)が完了したことを保証し、続くストア命令で共有メモリの所定の領域に所定のフラグを書き込む。アクワイヤ側プロセッサは、ストア命令によるフラグを読み出すロード命令と分岐命令とを実行することによって待ち合わせをし(待ち状態)、待ち合わせが完了すると次の処理に進むシーケンスになっている。フラグについては、予め、リリース側プロセッサとアクワイヤ側プロセッサとの間で取り決めてあることを前提とする。また、フラグの書き込み、読み出し先は共有メモリではなく、同期用に別途レジスタを設け、その同期用のレジスタに対する書き込み、読み出しでもよい。
分岐命令でフラグの書き込みが検出されると、アクワイヤ側プロセッサは、ロード・フェンス命令を発行する。このロード・フェンス命令が発行された以降では、共有メモリのデータの順序性を保証しなければならない。すなわち、共有メモリとキャッシュメモリとの一貫性が保証される必要がある。従って、ロード・フェンス命令が発行された後の期間(厳密には、ロード・フェンス命令の処理完了後の期間)は、ストア・フェンス命令が発行される前に要求された無効化要求の処理が完了し、共有メモリのデータ順序性が保証される必要がある。
共有メモリのデータの順序性を保証するために、ストア・フェンス命令とロード・フェンス命令は次の3つを実現しなければならない。
(1)ストア・フェンス命令で、ストア・フェンス命令より前のストア命令の完了を保証すること。
(2)ロード・フェンス命令より後続のロード命令が投機的に実行されないこと。すなわち、待ち合わせが完了する前の共有メモリへのアクセスを抑止しなければならない。
(3)アクワイヤ側プロセッサで、ロード・フェンス完了時にストア・フェンス命令以前のストア命令によるアクワイヤ側プロセッサに対する無効化要求の完了を保証すること。
通常、(2)の機能はプロセッサ内で、ロード命令がロード・フェンス命令を追い越すことを不許可にすることで実現できるため、ここでは述べない。
前述のようにリリースコンシステンシモデルでは、同期化処理であるロード・フェンス命令完了時には、無効化要求の完了順序は保証されていなければならない。すなわち、ストア・フェンス命令が発行される前に要求されたキャッシュの無効化要求の処理がすべて完了している必要がある。
従って、ロード・フェンス命令の完了時には、ストア・フェンス命令以前のストア命令による無効化要求が全て完了していることを保証する何らかの機構が必要である。
<本実施形態が解決しようとする課題>
特許文献1では、各プロセッサに同期用の2種類のカウンタ(ストア・カウンタ、待機カウンタ)を備えることで大域可視性を保証する方法について述べている。
ストア・カウンタは、共有メモリに対しストア命令を発行した時に+1し、共有メモリからAckを受信すると−1する。共有メモリは、ストア命令を受信後、ストアデータの共有メモリへの反映が確実になった時点、つまり後続の命令に追い越されないことが決定した時点でストア命令の送信元のプロセッサにAckを返す。このストア・カウンタの値が「0」の場合、そのプロセッサが発行したストア命令は全て完了していることを表す。
待機カウンタは、ストア・カウンタが「1」から「0」になった時に、定められた値をセットし、以降カウンタの値が「0」になるまで1サイクル毎に−1していく。待機カウンタが「0」になる前に、ストア・カウンタが再び「1」から「0」になった場合には、待機カウンタには定められた値が再度セットされる。待機カウンタにセットする値に関しては後述する。
プロセッサがストア・フェンス命令を検出した場合、ストア・カウンタと待機カウンタの両方が「0」になるまで待機し、後続のストア命令のメモリへの発行を抑止することで、アクワイヤ側プロセッサでロード・フェンス命令実行以前に無効化要求の完了を保証する。
以下に、リリース側プロセッサ、共有メモリ、アクワイヤ側プロセッサの動作を時間軸に表した図2のタイムチャートを参照して、特許文献1による大域可視性の保証方法を説明する。
(1)リリース側プロセッサは、共有メモリに対しストア命令を発行する。そして、リリース側プロセッサは、ストア・カウンタを+1する。
(2)共有メモリは、ストアデータの共有メモリへの反映が確実になった時点で、ストア命令と同じアドレスのデータを保持するアクワイヤ側プロセッサに無効化要求を送信する。
(3)共有メモリは、上記(2)と同時に、ストア命令の送信元にAckを送信する。リリース側プロセッサは、Ackを受信すれば、ストア・カウンタを−1する。また、リリース側プロセッサは、ストア・カウンタが「0」になった場合、待機カウンタに「X」をセットする。以降、リリース側プロセッサは、1サイクル毎に待機カウンタを−1する。
(4)リリース側プロセッサは、ストア・フェンス命令を検出すれば、ストア・カウンタと待機カウンタの両方が「0」になるまで待機する。
(5)リリース側プロセッサは、ストア・カウンタと待機カウンタの両方が「0」になれば、後続のストア命令でフラグを書き込む。
(6)アクワイヤ側プロセッサは、(5)で書き込まれたフラグを読み出す。
(7)アクワイヤ側プロセッサは、ロード・フェンス命令を実行する。
(8)アクワイヤ側プロセッサは、ロード命令で、(1)でリリース側プロセッサがストア命令によって書き込んだストアデータを読み出す。
ところで、(2)の共有メモリからの無効化要求送信とその無効化要求を受信したアクワイヤ側プロセッサでの無効化処理は、(7)のロード・フェンス命令の実行より前でなければならない。ロード・フェンス命令より後になった場合、(8)のデータ読み出しは共有メモリからではなく、アクワイヤ側プロセッサ内のキャッシュメモリから行われてしまう。このため、データ順序性が保証できなくなってしまう。
よって、ストア・カウンタが「1」から「0」になった時に、待機カウンタにセットする値Xは、常に以下を満たすようなXとする。
((2)で共有メモリが無効化要求を送信してからアクワイヤ側プロセッサでキャッシュが無効化されるまでの時間)<((3)で共有メモリがAckを送信し、(5)リリース側プロセッサがフラグを書き込み、(6)でアクワイヤ側プロセッサがフラグを読み出すのにかかる時間)+X
即ち、次の式(1)である。
X=(無効化処理に掛かる時間の最大)−((3)、(5)、(6)に掛かる時間の最小)
…式(1)
このように特許文献1では、リリース側プロセッサからストア命令を受信した共有メモリは、図2のタイムチャートの(2)でアクワイヤ側プロセッサに無効化要求を送信すると同時に、(3)でストア命令の送信元プロセッサに対しAckを送信している。即ち、ストア命令1個の実行毎に1個のAckが返される。このため、複数のプロセッサと共有メモリとの間を接続するネットワークに負荷がかかる。また、Ackの送信に専用線を用いた場合、図3に示すように複数のプロセッサと複数のメモリバンクが存在するような構成においては、各プロセッサと各メモリバンクを全対全で接続する必要があり、多くの信号線が必要になり、ハードウェア量の増大の原因となる。
<本実施形態の概要>
本実施形態では、共有メモリに実行済のストアの数をカウントする実行済カウンタを備える。実行済カウントは、それぞれのプロセッサに1対1に対応して設けられる。特許文献1では、共有メモリは、ストア命令を受信後、ストアデータのメモリへの反映が確実になった時点、つまり後続の命令に追い越されないことが決定した時点でストア命令の送信元のプロセッサにAckを返していた。これに対して本実施形態では、Ackを返さず、その代わりにストア命令の送信元のプロセッサに対応する実行済カウンタをカウントアップする。そして、共有メモリは、この実行済カウンタの内容、即ちストア命令の完了数を、ストア命令の受信と非同期で、送信元のプロセッサに通知する。この通知は、共有メモリからプロセッサへのリプライで使用する信号線を使用する。通知のタイミングは、(A)共有メモリからプロセッサへのリプライがあり未使用の信号線がある時、または、(B)プロセッサ・共有メモリ間ネットワークの負荷が小さい時に行われる。
プロセッサは、実行済カウンタの内容を受信すると、実行済カウンタの数の分だけ、ストア・カウンタを減ずる。このストア・カウンタの値が「0」の場合、そのプロセッサが発行したストア命令は全て完了していることを表す。その他の動作は、特許文献1と基本的に同じである。
<本実施形態の構成>
図3を参照すると、本実施形態に係る情報処理装置10は、複数のプロセッサ1(1−1〜1−M)と、共有メモリ4と、複数のプロセッサ1と共有メモリ4とを接続するプロセッサ・メモリ間ネットワーク2とを有している。共有メモリ4は、共有キャッシュでも構わない。共有キャッシュには、近年のマルチコア構成のプロセッサ間で共有されるオンチップのキャッシュも含まれる。
それぞれのプロセッサ1は、命令制御部11、L1キャッシュ12、無効化要求制御部13、メモリアクセス制御部14を含む。
命令制御部11は、命令の制御を行う。命令制御部11は、ロード・フェンス命令の後続のロード命令の投機実行を抑止する機能を有している。
L1キャッシュ12は、一般的にプロセッサ、もしくは、プロセッサコアごとに設けられる一次キャッシュである。
他のプロセッサ1から共有メモリ4へストア命令が発行された際、自身のプロセッサ1で同一キャッシュラインを保持している場合、共有メモリ4から、当該キャッシュラインの無効化要求が発行される。プロセッサ1の無効化要求制御部13は、その無効化要求を受け、L1キャッシュ12を無効化する機能を有している。
メモリアクセス制御部14は、プロセッサ1から共有メモリ4に対するメモリアクセス命令の発行を制御する機能を有している。メモリアクセス制御部14は、ストア・カウンタ15と待機カウンタ16とを有する。メモリアクセス制御部14は、ストア・フェンス命令の検出時には、2つのカウンタ、即ちストア・カウンタ15と待機カウンタ16の値が「0」になるまで、後続のストア命令の実行を抑止する機能を有している。
プロセッサ・メモリ間ネットワーク2は、複数のプロセッサ1と共有メモリ4を接続する機構である。プロセッサ・メモリ間ネットワーク2の接続形態は問わない。
共有メモリ4は、複数のメモリバンク3(3−1〜3−N)と、複数の実行済カウンタ34(34−1〜34−M)を記憶する記憶部35とにより構成される。実行済カウンタ34は、プロセッサ1に1対1に対応する。メモリバンク3は、共有メモリ4を構成するバンク型メモリである。各メモリバンク3(3−1〜3−N)は、ディレクトリ31とメモリ32とメモリ制御部33とを含む。
ディレクトリ31は、L1キャッシュ12−共有メモリ4間の一貫性を一元管理するために必要なメモリ管理情報を保持する。このディレクトリ31は、例えば、共有メモリを所定の管理単位に分け、管理単位の状態と、その管理単位のコピーをL1キャッシュ12に保持しているプロセッサ1の情報とを記録している。メモリ制御部33は、プロセッサ・メモリ間ネットワーク2から要求を受け付け、ディレクトリ31をアクセスして、L1キャッシュ12−共有メモリ4間の一貫性を一元管理する機能を持つ。またメモリ制御部33は、L1キャッシュ12の無効化が必要と判断された場合には、無効化が必要なL1キャッシュ12を有するプロセッサ1に向けた無効化要求を発行する機能を有する。またメモリ制御部33は、メモリ32の読み書きの処理を行う。またメモリ制御部33は、実行済カウンタ34の動作を制御する機能を有する。メモリ32は、コンピュータシステムにおける一般的なメモリである。
ここで、命令制御部11、無効化要求制御部13、メモリアクセス制御部14、及び、メモリ制御部33は、たとえば、論理回路等のハードウェア回路で構成される。また、共有メモリ4(各メモリバンク3)、及び実行済カウンタ34は、たとえば、ディスク装置、半導体メモリ等の記憶装置で構成される。また、情報処理装置10は、コンピュータ装置によって実現されてもよい。この場合、命令制御部11、無効化要求制御部13、メモリアクセス制御部14、及びメモリ制御部33は、コンピュータである情報処理装置10のプロセッサが、図示されないメモリ上のプログラムを実行することで実現されてもよい。プログラムは、不揮発性メモリに格納されてもよい。
図13は、情報処理装置10を、コンピュータ装置50で実現したハードウェア回路を示すブロック図である。図13に示されるように、コンピュータ装置50は、CPU(Central Processor Unit)51、メモリ52、プログラムを格納するハードディスク等の記憶装置53、およびネットワーク接続用のI/F(Interface)54を含む。また、コンピュータ装置50は、バス55を介して入力装置56および出力装置57に接続されている。
CPU51は、オペレーティングシステムを動作させてコンピュータ装置50の全体を制御する。また、CPU51は、例えばドライブ装置などに装着された記録媒体58からプログラムやデータを読み出し、メモリ52に格納してもよい。また、CPU51は、図3に示す情報処理装置10における、命令制御部11、無効化要求制御部13、メモリアクセス制御部14、及びメモリ制御部33の一部として機能し、プログラムに基づいて各種の処理を実行する。CPU51は、複数のCPUによって構成されてもよい。また、それら複数のCPUは、プロセッサ1−1〜1−Mであってもよい。
記憶装置53は、例えば、光ディスク、フレキシブルディスク、磁気光ディスク、外付けハードディスク、または半導体メモリ等である。記録媒体58は、不揮発性記憶装置であり、そこにCPU51が実行するプログラムを記録する。記録媒体58は、記憶装置53の一部であってもよい。また、プログラムは、通信網に接続されている図示しない外部コンピュータからI/F54を介してダウンロードされてもよい。記憶装置53とメモリ52は、共有メモリ4を構成するものであってもよい。
入力装置56は、例えばマウスやキーボード、内蔵のキーボタンなどで実現され、入力操作に用いられる。入力装置56は、マウスやキーボード、内蔵のキーボタンに限らず、例えばタッチパネルでもよい。出力装置57は、例えばディスプレイで実現され、出力を確認するために用いられる。
以上のように、図3に示す情報処理装置10に対応するコンピュータ装置50は、図13に示されるハードウェア構成によって実現される。ただし、コンピュータ装置50は、図13の構成に限定されない。例えば、入力装置56、出力装置57は、インターフェース54を介して外付けされるものでもよい。
また、コンピュータ装置50は、物理的に結合した一つの装置により実現されてもよいし、物理的に分離した二つ以上の装置を有線または無線で接続し、これら複数の装置により実現されてもよい。
<本実施形態の動作>
以下に、リリース側のプロセッサ1(以下、リリース側プロセッサと記載する)、共有メモリ4、アクワイヤ側のプロセッサ1(以下、アクワイヤ側プロセッサと記載する)の動作を時間軸に表した図4のタイムチャートを参照して、本実施形態による大域可視性の保証方法を説明する。図4において、(3)以外の動作は図2と同じである。
(1)リリース側プロセッサは、共有メモリに対しストア命令を発行する。そして、リリース側プロセッサは、ストア・カウンタを+1する。
(2)共有メモリは、ストアデータのメモリへの反映が確実になった時点で、スコア命令発行元のプロセッサに対応する実行済カウンタを+1する。それと同時に、共有メモリは、ストア命令と同じアドレスのデータを保持するアクワイヤ側プロセッサに無効化要求を送信する。
(3)共有メモリは、共有メモリからプロセッサへのリプライがあり未使用の信号線がある時、または、(B)プロセッサ・共有メモリ間ネットワークの負荷が小さい時、ストア命令の送信元に、実行済カウンタの値を送信する。リリース側プロセッサは、実行済カウンタの値を受信すれば、カウンタの値分だけストア・カウンタを減ずる。リリース側プロセッサは、ストア・カウンタが「0」になった場合、待機カウンタに「X」をセットする。以降、リリース側プロセッサは、1サイクル毎に待機カウンタを−1する。
待機カウンタにセットする値Xは、式(1)における右辺の(3)に掛かる時間の最小を、共有メモリが実行済カウンタの値を送信するのにかかる時間の最小に置換した値である。
(4)リリース側プロセッサは、ストア・フェンス命令を検出すれば、ストア・カウンタと待機カウンタの両方が「0」になるまで待機する。
(5)リリース側プロセッサは、ストア・カウンタと待機カウンタの両方が「0」になれば、後続のストア命令でフラグを書き込む。
(6)アクワイヤ側プロセッサは、(5)で書き込まれたフラグを読み出す。
(7)アクワイヤ側プロセッサは、ロード・フェンス命令を実行する。
(8)アクワイヤ側プロセッサは、ロード命令で、リリース側プロセッサが(1)でストア命令を使用して書き込んだストアデータを読み出す。
次に、本実施形態に係る情報処理装置10の動作を図5、図6、図7に示すフローチャートを使用して更に詳しく説明する。
図5は、リリース側プロセッサのメモリアクセス制御部14におけるストア・カウンタ15と待機カウンタ16の動作を示すフローチャートである。なお、アクワイヤ側プロセッサでの動作は、命令制御部11でロード・フェンス命令以降の投機のロード命令を抑止するのみである。よって、これらの動作は、一般的な処理であるため、ここでは、フローチャートを用いての説明は行わない。
図5を参照すると、メモリアクセス制御部14は、まず待機カウンタ16が0よりも大きければ(ステップS11)、待機カウンタ16の値を−1する(ステップS12)。次に、メモリアクセス制御部14は、共有メモリ4に対しストア命令を発行した場合(ステップS13)、ストア・カウンタ15を+1する(ステップS14)。次に、メモリアクセス制御部14は、共有メモリ4から実行済カウンタ34の値を受信した場合(ステップS15)には、実行済カウンタ34の値をストア・カウンタ15から減ずる更新を行う(ステップS16)。さらにメモリアクセス制御部14は、ストア・カウンタ15の値が「0」になった場合(ステップS17)、待機カウンタ16に定数Xをセットする(ステップS18)。以上の操作は、1サイクルに1度実施される。よって、待機カウンタ16の値は1サイクル毎に−1される。
図6は、情報処理装置10における命令処理の動作を示すフローチャートである。図6を参照すると、メモリアクセス制御部14で検出した命令がストア・フェンス命令である場合(ステップS21)、ストア・カウンタ15と待機カウンタ16が両方「0」であれば(ステップS22)、情報処理装置10におけるストア・フェンス命令の処理は終了となる。しかし、ストア・カウンタ15か、待機カウンタ16のどちらかが「0」より大きい場合には(ステップS22でNo)、メモリアクセス制御部14はステップS21に戻り、次のサイクルに同じ処理をする。以降、メモリアクセス制御部14は、ストア・カウンタ15と待機カウンタ16の両方が「0」になり、ストア・フェンス命令の処理が終了するまで同じ操作を繰り返す。
一方、メモリアクセス制御部14で検出した命令がストア命令である場合(ステップS23)、メモリアクセス制御部14で処理が終了していないストア・フェンス命令がなければ(ステップS24でYes)、メモリアクセス制御部14は、プロセッサ・メモリ間ネットワーク2にストア命令を発行する(ステップS25)。これにより、ストア命令の処理は終了となる。しかし、メモリアクセス制御部14で処理が終了していないストア・フェンス命令がある場合には(ステップS24でNo)、メモリアクセス制御部14は、ステップS21に戻る。以降、ストア・カウンタ15と待機カウンタ16の両方が「0」になり、ストア・フェンス命令の処理が終了するまで、メモリアクセス制御部14は、同じ操作を繰り返す。
また、メモリアクセス制御部14で検出した命令がロード命令である場合(ステップS26でYes)、メモリアクセス制御部14は、プロセッサ・メモリ間ネットワーク2にロード命令を発行する(ステップS25)。これにより、ロード命令の処理は終了となる。ステップS26でロード命令を検出しなかった場合は、メモリアクセス制御部14は、検出した命令がなかったことを示し、処理を終了する。
図7は、共有メモリ4におけるストア命令の実行済カウンタ34に関連するメモリ制御部33の動作を示すフローチャートである。ストア命令の実行済カウンタ34は、プロセッサ1毎に設けられている。図7に示す動作は、或る1個のプロセッサ1に対応して設けられた実行済カウンタ34に関連する動作を示している。図7に示した動作は、他のプロセッサ1に対応して設けられた実行済カウンタ34でも同様に行われる。
図7を参照すると、共有メモリ4のメモリ制御部33は、メモリ32で或るプロセッサから発行されたストア命令の実行が完了した時点で(ステップS31でYes)、そのプロセッサに対応する実行済カウンタを+1する(ステップS32)。ここで、メモリ32でストア命令の実行が完了した時点とは、ストアデータのメモリ32への反映が確実になった時点、つまり後続の命令に追い越されないことが決定した時点を意味する。次に、メモリ制御部33は、ディレクトリ31を参照し、対応するプロセッサ1のL1キャッシュ12の無効化の必要性を決定する(ステップS33)。メモリ制御部33は、ストア命令と同じアドレスのデータを保持するL1キャッシュ12は無効化の必要性があると判断する。L1キャッシュ12の無効化が必要と判断された場合には、メモリ制御部33は、無効化が必要なL1キャッシュ12を有するプロセッサ1に対して該当するアドレスのデータに対する無効化要求を送信する(ステップ34)。
また、メモリ制御部33は、実行済カウンタ34の値が0である場合(ステップS35でNo)、処理を終える。一方、メモリ制御部33は、実行済カウンタ34の値が0でなければ(1以上であれば)(ステップS35でYes)、プロセッサ1に返す予定のリプライが有り未使用の信号線があるか、またはプロセッサ・メモリ間ネットワーク2の負荷が小さいかを判断する(ステップS36)。
メモリ制御部33は、リプライが無いか、有っても未使用の信号線がなく、且つネットワーク負荷が小さくなければ(ステップS36でNo)、図7の処理を終える。しかし、リプライが有り未使用の信号線があるか、またはネットワーク負荷が小さければ、メモリ制御部33は、リプライに実行済カウンタの値を埋め込み、プロセッサ・メモリ間ネットワーク2を通じてプロセッサ1に対し送信する(ステップS37)。この時、メモリ制御部33は、実行済カウンタ34の値を0にし(ステップS38)、処理は終了となる。以上の操作は1サイクルに1度実施される。
上記ステップS36、S37について、以下に、より具体的に説明する。メモリ制御部33は、プロセッサ・メモリ間ネットワーク2を構成する信号線のうちリプライで使用する信号線を用いて、実行済カウンタの値を共有メモリ4からプロセッサ1へ送信する。
一般に、リプライで使用する信号線は、並列伝送を行うために複数本存在する。送信予定のリプライのビット数が、リプライで使用する信号線数より少ない場合、一部の信号線は未使用になる。この未使用の信号線の本数が実行済カウンタのビット数以上であれば、未使用の信号線を用いて実行済カウンタの値を共有メモリ4からプロセッサ1へ送信することができる。ステップS36における、プロセッサ1に返す予定のリプライが有り未使用の信号線があるかの判断は、上記観点に基づいてメモリ制御部33が判断する。例えば、メモリ制御部33は、送信予定のリプライを一時的に蓄積するバッファを参照して、実行済カウンタ34に対応するプロセッサ1に返すリプライが有るか否かを判断する。また、例えば、メモリ制御部33は、リプライの送信に使用する信号線の本数とリプライのデータサイズとを比較して、未使用の信号線があるか否かを判断する。但し、リプライが有り未使用の信号線があるか否かの判断方法は、上記の判断方法に限定されず、任意の判断方法を使用してよい。そして、この場合、ステップS37におけるリプライへの実行済カウンタの値の埋め込みは、上記未使用の信号線を用いて、実行済カウンタの値をリプライと一緒に共有メモリ4からプロセッサ1へ送信することである(以下、この送信形態を第1の送信形態と記す)。
他方、メモリ制御部33は、ステップS36におけるネットワーク負荷が小さいか否かの判断は、プロセッサ・メモリ間ネットワーク2を構成する信号線のうちリプライで使用する信号線のネットワークの負荷に基づいて行う。例えば、共有メモリ4は、リプライで使用する信号線のネットワークを流れるトラフィック量を計測し、直近の単位時間当たりのトラフィック量が閾値より少なければ、ネットワークの負荷が小さいと判断する。但し、ネットワーク負荷の判断方法は、上記の判断方法に限定されず、任意の判断方法を使用してよい。そして、この場合、ステップS37におけるリプライへの実行済カウンタの値の埋め込みは、リプライで使用する信号線を用いて、実行済カウンタの値をリプライとは別に共有メモリ4からプロセッサ1へ送信することである(以下、この送信形態を第2の送信形態と記す)。
なお、ステップS36において、プロセッサ1に返す予定のリプライが有り未使用の信号線があり、且つ、プロセッサ・メモリ間ネットワーク2の負荷が小さい場合、メモリ制御部33は、例えば、第2の送信形態よりも優先的に第1の送信形態を使用する。但し、共有メモリ4は、第1の送信形態よりも優先的に第2の送信形態を使用してもよい。
<本実施形態の効果>
本実施形態によれば、複数のプロセッサと共有メモリとの間を接続するネットワークの負荷を軽減しつつ、リリースコンシステンシモデルに基づくメモリの順序保証を行う際のアクアイア側プロセッサに対する無効化要求の大域可視性を保証することができる。その理由は、共有メモリがストア命令の完了数をカウントする実行済カウンタを有し、データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサの無効化要求制御部にキャッシュの無効化要求を送信すると共に、実行済カウンタを加算し、ストア命令の受信と非同期で、実行済カウンタのカウント値をリリース側のプロセッサへ送信しているためである。このようにストア命令の受信と関連のない時期に実行済カウンタの値をプロセッサへ送信することにより、ストア命令を1個受信する毎に実行済カウンタの値を1個送信するという事象は必ずしも発生しなくなる。ストア命令が高頻度で発生した場合には、複数のストア命令当たりに実行済カウンタの2以上の値を1個送信するという事象が発生し得る。これによってネットワークの負荷が軽減される。
また本実施形態によれば、実行済カウンタの値を、(A)共有メモリからプロセッサへのリプライがあり未使用の信号線がある時、または、(B)プロセッサ・メモリ間ネットワークの負荷が小さい時に行うため、ネットワークの負荷を更に削減することができる。
また本実施形態によれば、実行済カウンタの値を、リプライで使用する信号線を用いて、共有メモリからプロセッサへ送信するため、ハードウェア量の増大を防ぐことができる。
[第2の実施形態]
第1の実施形態では、共有メモリからプロセッサへの実行済カウンタの値の通知を、(A)共有メモリからプロセッサへのリプライがあり未使用の信号線がある時、または、(B)プロセッサ・メモリ間ネットワークの負荷が小さい時、とした。しかし、共有メモリからプロセッサへのリプライが無く、かつ、ネットワークの負荷が大きい場合には、実行済カウンタの値の通知が遅くなる場合がある。本実施形態は、このような課題を解決する。
本実施形態では、メモリアクセス制御部14は、ストア・フェンス命令を検出すれば、プロセッサ・メモリ間ネットワーク2にストア・フェンス検出通知を発行する機能を有する。また、共有メモリ4のメモリ制御部33は、上記ストア・フェンス検出通知を受信すると、上記ストア・フェンス検出通知の発行元のプロセッサに対応する実行済カウンタ34の値を、上記ストア・フェンス検出通知の発行元のプロセッサに通知する機能を有する。
図8は、本実施形態のリリース側プロセッサ、共有メモリ、アクワイヤ側のプロセッサの動作を時間軸に表したタイムチャートである。図8を参照すると、リリース側プロセッサに、(a)ストア・フェンス検出と、(a)ストア・フェンス検出通知とが追加されている点で、図4と相違し、それ以外は図4と同じである。
図9は、本実施形態のリリース側プロセッサにおける命令処理の動作を示すフローチャートである。図9を参照すると、ストア・フェンス命令を検出すると(ステップS21)、メモリアクセス制御部14が共有メモリにストア・フェンス検出通知を出すステップS27が追加されている点で、図6と相違し、それ以外は図6と同じである。なお、ストア・フェンス検出通知は、1つのストア・フェンス命令に対して1つだけ出されるようにしてよい。
図10は、本実施形態の共有メモリ4におけるストア命令の実行済カウンタ34に関連するメモリ制御部33の動作を示すフローチャートである。図10を参照すると、共有メモリ4のメモリ制御部33は、実行済カウンタの値が0でない場合(ステップS35でYes)、ストア・フェンス検出通知を受けていなければ(ステップS39でNo)、ステップS36の処理へ進むが、ストア・フェンス検出通知を受けていれば(ステップS39でYes)、ステップS36をスキップしてステップS37へ進む。図10は、上記の点で図7と相違し、それ以外は図7と同じである。
このように本実施形態によれば、プロセッサ1のメモリアクセス制御部14は、ストア・フェンス命令を検出すれば、プロセッサ・メモリ間ネットワーク2にストア・フェンス検出通知を発行し、共有メモリ4のメモリ制御部33は、ストア・フェンス検出通知を受信すると、実行済カウンタ34の値をプロセッサに通知するため、実行済カウンタ34の値の参照を必要とするプロセッサに実行済カウンタの値を速やかに通知することができる。
[第3の実施形態]
本実施形態では、共有メモリ4のメモリ制御部33は、リリース側のプロセッサ1から一定時間にわたってリクエストが無い場合、そのプロセッサに対応する実行済カウンタ34の値をリリース側のプロセッサに通知する機能を有する。
図11は、本実施形態の共有メモリ4におけるストア命令の実行済カウンタ34に関連するメモリ制御部33の動作を示すフローチャートである。図11を参照すると、共有メモリ4のメモリ制御部33は、実行済カウンタの値が0でない場合(ステップS35でYes)、プロセッサから一定時間内にリクエストを受けていれば(ステップS40でNo)、ステップS36の処理へ進むが、一定時間以上リクエストが無ければ(ステップS40でYes)、ステップS36をスキップしてステップS37へ進む。図11は、上記の点で図7と相違し、それ以外は図7と同じである。
このように本実施形態によれば、共有メモリ4のメモリ制御部33は、プロセッサ1から一定時間にわたってリクエストが無い場合、そのプロセッサに対応する実行済カウンタ34の値をそのプロセッサに通知するため、共有メモリからプロセッサへの実行済カウンタの値の通知が遅くなるのを防ぐことができる。
[第4の実施形態]
図12を参照すると、本発明の第4の実施形態に係る情報処理装置40は、複数のプロセッサ41と、共有メモリ43と、複数のプロセッサ41と共有メモリ43を接続するネットワーク42とを有する。
各々のプロセッサ41は、キャッシュ44と、プロセッサ41から共有メモリ43に対するアクセスを制御するメモリアクセス制御部46と、共有メモリ43の無効化要求に基づいて、キャッシュ44の無効化の処理を行う無効化要求制御部45とを含む。
共有メモリ43は、ストア命令の完了数をカウントする実行済カウンタ49を有する。実行済カウンタ49は、プロセッサ41に1対1に対応付けて設けられる。共有メモリ43は、データを書き込むリリース側のプロセッサ41から発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサ41の無効化要求制御部45にキャッシュの無効化要求を送信すると共に、実行済カウンタ49を加算する。また、共有メモリ43は、ストア命令の受信と非同期で、実行済カウンタ49のカウント値をリリース側のプロセッサ41へ送信する。
リリース側のプロセッサ41のメモリアクセス制御部46は、ストア・カウンタ47と、待機カウンタ48とを有する。ストア・カウンタ47は、共有メモリ43に対しストア命令を発行すると加算し、共有メモリ43から実行済カウンタ49のカウント値を受信すると実行済カウンタ49のカウント値だけ減算する。待機カウンタ48は、ストア・カウンタ47が0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算する。上記所定の時間は、共有メモリ43が無効化要求を送信してからアクワイヤ側のプロセッサ41でキャッシュの無効化の処理が完了するまでの時間に比べ、共有メモリ43が実行済カウンタ49のカウント値を送信し、リリース側のプロセッサ41が上記所定の時間の後に共有メモリ43にフラグを書き込み、アクワイヤ側のプロセッサ41が上記フラグを読み出す時間の方が大きくなるように設定される。
また、リリース側のプロセッサ41のメモリアクセス制御部46は、ストア・カウンタ47、及び、待機カウンタ48が0になった場合、アクワイヤ側のプロセッサ41のキャッシュ44の無効化の完了の保証を要求するストア・フェンス命令を発行する。
一方、アクワイヤ側のプロセッサ41のメモリアクセス制御部46は、共有メモリ43からの無効化要求に基づいて、キャッシュ44の無効化の処理が完了した後で、ストア・フェンス命令に対して、キャッシュ44の無効化の完了を保証するロード・フェンス命令を発行する。
このように本実施形態によれば、複数のプロセッサと共有メモリとの間を接続するネットワークの負荷を軽減しつつ、リリースコンシステンシモデルに基づくメモリの順序保証を行う際のアクアイア側プロセッサに対する無効化要求の大域可視性を保証することができる。その理由は、共有メモリがストア命令の完了数をカウントする実行済カウンタを有し、データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサの無効化要求制御部にキャッシュの無効化要求を送信すると共に、実行済カウンタを加算し、ストア命令の受信と非同期で、実行済カウンタのカウント値をリリース側のプロセッサへ送信しているためである。このようにストア命令の受信と関連のない時期に実行済カウンタの値をプロセッサへ送信することにより、ストア命令を1個受信する毎に実行済カウンタの値を1個送信するという事象は必ずしも発生しなくなる。ストア命令が高頻度で発生した場合には、複数のストア命令当たりに実行済カウンタの2以上の値を1個送信するという事象が発生し得る。これによってネットワークの負荷が軽減される。
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態に限定されない。本発明の構成や詳細には、本発明の範囲内で当業者が理解しうる様々な変更をすることができる。
本発明は、リリースコンシステンシモデルに基づくメモリの順序保証を行う際のアクアイア側プロセッサに対する無効化要求の大域可視性を保証する情報処理装置全般に利用できる。
1 プロセッサ
1−1〜1−M…プロセッサ
2…プロセッサ・メモリ間ネットワーク
3−1〜3−N…メモリバンク
4…共有メモリ
10…情報処理装置
11…命令制御部
12…キャッシュ
13…無効化要求制御部
14…メモリアクセス制御部
15…ストア・カウンタ
16…待機カウンタ
31…ディレクトリ
32…メモリ
33…メモリ制御部
34−1〜34−M…実行済カウンタ
35…記憶部
40…情報処理装置
41…プロセッサ
42…ネットワーク
43…共有メモリ
44…キャッシュ
45…無効化要求制御部
46…メモリアクセス制御部
47…ストア・カウンタ
48…待機カウンタ
49…実行済カウンタ
50…コンピュータ装置
52…メモリ
53…記憶装置
54…インターフェース
55…バス
56…入力装置
57…出力装置
58…記録媒体
L1…命令制御部

Claims (7)

  1. 複数のプロセッサと、共有メモリと、前記複数のプロセッサと前記共有メモリを接続するネットワークを有する情報処理装置であって、
    各々の前記プロセッサは、
    キャッシュと、
    前記プロセッサから前記共有メモリに対するアクセスを制御するメモリアクセス制御手段と、
    前記共有メモリの無効化要求に基づいて、前記キャッシュの無効化の処理を行う無効化要求制御手段と、を含み、
    前記共有メモリは、
    ストア命令の完了数をカウントする実行済カウンタを有し、
    データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサの前記無効化要求制御手段に前記キャッシュの無効化要求を送信すると共に、前記実行済カウンタを加算し、
    前記ストア命令の受信と非同期で、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信し、
    前記リリース側のプロセッサの前記メモリアクセス制御手段は、
    前記共有メモリに対しストア命令を発行すると加算し、前記共有メモリから前記実行済カウンタのカウント値を受信すると前記実行済カウンタのカウント値だけ減算する、ストア・カウンタと、
    前記ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記実行済カウンタのカウント値を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
    前記ストア・カウンタ、及び、前記待機カウンタが0になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、
    前記アクワイヤ側のプロセッサの前記メモリアクセス制御手段は、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する、
    情報処理装置。
  2. 前記共有メモリは、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信するために、前記共有メモリから前記リリース側のプロセッサへのリプライに前記実行済カウンタのカウント値を付加する、
    請求項1に記載の情報処理装置。
  3. 前記共有メモリは、前記ネットワークの負荷が小さい時に、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信する、
    請求項1または2に記載の情報処理装置。
  4. 前記リリース側のプロセッサの前記メモリアクセス制御手段は、前記ストア・フェンス命令を検出すると、前記共有メモリにストア・フェンス検出通知を送信し、
    前記共有メモリは、前記ストア・フェンス検出通知を受信すると、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信する、
    請求項1乃至3の何れかに記載の情報処理装置。
  5. 前記共有メモリは、前記リリース側のプロセッサから一定時間にわたってリクエストが無い場合、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信する、
    請求項1乃至4の何れかに記載の情報処理装置。
  6. 共有メモリが、データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサにキャッシュの無効化要求を送信すると共に、実行済カウンタを加算し、前記ストア命令の受信と非同期で、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信し、
    前記リリース側のプロセッサは、
    前記共有メモリに対し前記ストア命令を発行すると加算し、前記共有メモリから前記実行済カウンタのカウント値を受信すると前記実行済カウンタのカウント値だけ減算する、ストア・カウンタと、
    前記ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記実行済カウンタのカウント値を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
    前記ストア・カウンタ、及び、前記待機カウンタが0になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行し、
    前記アクワイヤ側のプロセッサは、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する、
    メモリ順序保障方法。
  7. 共有メモリが、データを書き込むリリース側のプロセッサから発行されたストア命令を受信すると、データを読み出すアクワイヤ側のプロセッサにキャッシュの無効化要求を送信すると共に、実行済カウンタを加算し、前記ストア命令の受信と非同期で、前記実行済カウンタのカウント値を前記リリース側のプロセッサへ送信する処理と、
    前記リリース側のプロセッサが、
    前記共有メモリに対し前記ストア命令を発行すると加算し、前記共有メモリから前記実行済カウンタのカウント値を受信すると前記実行済カウンタのカウント値だけ減算する、ストア・カウンタと、
    前記ストア・カウンタが0になった場合に、所定の時間を示す値を設定し、単位時間毎に減算し、前記所定の時間が、前記共有メモリが前記無効化要求を送信してから前記アクワイヤ側のプロセッサで前記キャッシュの無効化の処理が完了するまでの時間に比べ、前記共有メモリが前記実行済カウンタのカウント値を送信し、前記リリース側のプロセッサが前記所定の時間の後に前記共有メモリにフラグを書き込み、前記アクワイヤ側のプロセッサが前記フラグを読み出す時間の方が大きくなるように設定される、待機カウンタと、を有し、
    前記ストア・カウンタ、及び、前記待機カウンタが0になった場合、前記アクワイヤ側のプロセッサの前記キャッシュの無効化の完了の保証を要求するストア・フェンス命令を発行する処理と、
    前記アクワイヤ側のプロセッサが、前記共有メモリからの前記無効化要求に基づいて、前記キャッシュの無効化の処理が完了した後で、前記ストア・フェンス命令に対して、前記キャッシュの無効化の完了を保証するロード・フェンス命令を発行する処理と、をコンピュータに実行させるプログラム。
JP2017020049A 2017-02-07 2017-02-07 情報処理装置 Active JP6319473B1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017020049A JP6319473B1 (ja) 2017-02-07 2017-02-07 情報処理装置
US15/850,083 US10318424B2 (en) 2017-02-07 2017-12-21 Information processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017020049A JP6319473B1 (ja) 2017-02-07 2017-02-07 情報処理装置

Publications (2)

Publication Number Publication Date
JP6319473B1 true JP6319473B1 (ja) 2018-05-09
JP2018128756A JP2018128756A (ja) 2018-08-16

Family

ID=62106174

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017020049A Active JP6319473B1 (ja) 2017-02-07 2017-02-07 情報処理装置

Country Status (2)

Country Link
US (1) US10318424B2 (ja)
JP (1) JP6319473B1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11132145B2 (en) * 2018-03-14 2021-09-28 Apple Inc. Techniques for reducing write amplification on solid state storage devices (SSDs)
US20240069736A1 (en) * 2022-08-31 2024-02-29 Nvidia Corporation Self-synchronizing remote memory operations in a multiprocessor system

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5811245B1 (ja) * 2014-07-24 2015-11-11 日本電気株式会社 情報処理装置、メモリ順序保障方法、及び、プログラム

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6839808B2 (en) * 2001-07-06 2005-01-04 Juniper Networks, Inc. Processing cluster having multiple compute engines and shared tier one caches
US7080213B2 (en) * 2002-12-16 2006-07-18 Sun Microsystems, Inc. System and method for reducing shared memory write overhead in multiprocessor systems
US7206922B1 (en) * 2003-12-30 2007-04-17 Cisco Systems, Inc. Instruction memory hierarchy for an embedded processor
JP2009251713A (ja) * 2008-04-02 2009-10-29 Toshiba Corp キャッシュメモリ制御装置
JP4631948B2 (ja) * 2008-08-13 2011-02-16 日本電気株式会社 情報処理装置及び順序保証方式
US8176262B2 (en) * 2009-01-12 2012-05-08 Arm Limited Handling of memory access requests to shared memory in a data processing apparatus
US9274960B2 (en) * 2012-03-20 2016-03-01 Stefanos Kaxiras System and method for simplifying cache coherence using multiple write policies
US20140282564A1 (en) * 2013-03-15 2014-09-18 Eli Almog Thread-suspending execution barrier
JP5998998B2 (ja) * 2013-03-22 2016-09-28 富士通株式会社 演算処理装置、情報処理装置、及び演算処理装置の制御方法
JP6089891B2 (ja) * 2013-03-29 2017-03-08 富士通株式会社 演算処理装置、情報処理装置及び情報処理装置の制御方法
US9996402B2 (en) * 2014-04-07 2018-06-12 Oracle International Corporation System and method for implementing scalable adaptive reader-writer locks

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5811245B1 (ja) * 2014-07-24 2015-11-11 日本電気株式会社 情報処理装置、メモリ順序保障方法、及び、プログラム

Also Published As

Publication number Publication date
US10318424B2 (en) 2019-06-11
US20180225208A1 (en) 2018-08-09
JP2018128756A (ja) 2018-08-16

Similar Documents

Publication Publication Date Title
JP6087532B2 (ja) 同時保留中データアクセスリクエストのためのデータハザード処理
JP4687729B2 (ja) キャッシュメモリ及びベクトル処理装置並びにベクトルデータ整列方法
US8949549B2 (en) Management of ownership control and data movement in shared-memory systems
JP4474570B2 (ja) キャッシュコヒーレンシ制御方法
JP5909566B2 (ja) 計算機システム及びその制御方法
US11210263B1 (en) Using persistent memory technology as a host-side storage tier for clustered/distributed file systems, managed by cluster file system
JP2001117859A (ja) バス制御装置
JP5811245B1 (ja) 情報処理装置、メモリ順序保障方法、及び、プログラム
JP6083714B2 (ja) プロセッサによるメモリの共有のための方法、システム、およびコンピュータ・プログラム
JP5499987B2 (ja) 共有キャッシュメモリ装置
JP6319473B1 (ja) 情報処理装置
JP5970461B2 (ja) 仮想計算機制御装置、仮想計算機制御方法、仮想計算機制御プログラム、及び集積回路
KR20200049529A (ko) 데이터 처리 시스템에서의 캐시 유지보수 동작
JP5040121B2 (ja) 情報処理装置、キャッシュ制御方法及びプログラム
US10452543B1 (en) Using persistent memory technology as a host-side storage tier for clustered/distributed file systems, managed by storage appliance
US10775870B2 (en) System and method for maintaining cache coherency
JP2015191604A (ja) 制御装置、制御プログラム、および制御方法
KR102526431B1 (ko) 데이터 처리
JP2013015990A (ja) 情報処理システム、情報処理プログラム、情報処理方法
JPWO2010119932A1 (ja) マルチプロセッサシステム、マルチプロセッサシステムにおけるメモリ管理方法及び通信プログラム
JP5625536B2 (ja) キャッシュ装置、及び情報処理装置
US9009412B2 (en) Information processing apparatus and control method of information processing apparatus
JP2009032085A (ja) データ処理システム
US10452544B1 (en) Using persistent memory technology as a host-side storage tier for clustered/distributed file systems, managed by host-side tier
US20190138466A1 (en) Reflective memory bridge for external computing nodes

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180306

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180319

R150 Certificate of patent or registration of utility model

Ref document number: 6319473

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150