JP5039754B2 - データアクセス違反を検出する方法および装置 - Google Patents

データアクセス違反を検出する方法および装置 Download PDF

Info

Publication number
JP5039754B2
JP5039754B2 JP2009175730A JP2009175730A JP5039754B2 JP 5039754 B2 JP5039754 B2 JP 5039754B2 JP 2009175730 A JP2009175730 A JP 2009175730A JP 2009175730 A JP2009175730 A JP 2009175730A JP 5039754 B2 JP5039754 B2 JP 5039754B2
Authority
JP
Japan
Prior art keywords
memory
access
memory access
memory address
user
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.)
Expired - Fee Related
Application number
JP2009175730A
Other languages
English (en)
Other versions
JP2010067265A (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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2010067265A publication Critical patent/JP2010067265A/ja
Application granted granted Critical
Publication of JP5039754B2 publication Critical patent/JP5039754B2/ja
Expired - Fee Related 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • 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/46Multiprogramming arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Description

マルチスレッドプログラムおよびマルチプロセスプログラム等の並列プログラムのバグは、全てのソフトウェアのバグのなかでも最も試験および診断が難しいものの1つである。並列プログラムのバグの種類には、データレース(data race)およびデータアクセス原子性違反(data access atomicity violation)といったものがある。データレースは、例えば、2つのスレッド(そのうち少なくとも一方が書き込みである)が、正しく同期せずメモリの同じデータに同時にアクセスする際に起こりうる。データアクセス原始性違反は、例えば、原子領域としての実行が期待されているにも関わらず、コード領域を非原子的に実行するような場合に起こりうる。データアクセス原子性の検出アルゴリズムは、あるコード領域の原子性に関連するプログラマの仮定を良く示すアクセスインターリーブ不変量(access interleaving invariant)と称される観察に依存しうる。
ここに記載する発明を、添付図面において限定ではなく例示として示す。図示の簡略化および明瞭化を目指して、図面に示す要素は必ずしも実寸に即して描かれていない場合がある。例えば、幾らかの要素の寸法を他の要素の寸法より大きく描いて、明瞭化に努めている。さらに、適切な場合には、図面間で参照番号を繰り返して、対応する、または、類似した要素であることを示している。
データアクセスインタリーブの一実施形態を示す。 データアクセス違反を検出する装置を有するコンピュータプラットフォームの一実施形態を示す。 メモリアドレスの実施形態を示す。 メモリアドレスの実施形態を示す。 キャッシュエントリの実施形態を示す。 キャッシュページの実施形態を示す。 実際のデータアクセス違反および潜在的なデータアクセス違反の一実施形態を示す。 メモリアクセス情報の格納方法の一実施形態を示す。 データアクセス違反を検出する一実施形態を示す。
以下の記載では、データアクセス違反を検出する技術を記載する。以下の記載においては、ロジック実装、疑似コード、オペランド特定手段、リソース分割/共有/複製の実装、システムコンポーネントの種類および相互関連性、および、ロジック分割/統合の選択といった多数の特定の詳細を述べて、本発明のより完全な理解を促している。しかし、本発明は、これら特定の詳細がなくても実行することが可能である。他の場合には、制御構造、ゲートレベル回路、およびソフトウェア命令列全体は詳細には示さないことで、本発明を曖昧にしないよう心がけている。当業者が記載を読めば、過度の実験を行わずに適切な機能を実装することができる。
明細書における「一実施形態」「実施形態」「例示的実施形態」等の言い回しは、記載されている実施形態が、特定の特徴、構造、または特性を有するが、全ての実施形態がその特定の特徴、構造、または特性を有する必要があるわけではない。さらに、このような言い回しは、必ずしも同じ実施形態のことを言っている場合ばかりではない。さらに、特定の特徴、構造、または特性が一実施形態との関連で記載されている場合、それら特徴、構造、または特性を、明示されているか否かに関わらず他の実施形態と関連させて実行することは当業者の知識の範囲であるとする。
本発明の実施形態は、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせにより実装可能である。本発明の実施形態は、さらに、1以上のプロセッサによる読み取りおよび実行が可能な機械可読媒体に格納されている命令としての実装が可能である。機械可読媒体は、機械(例えばコンピューティングデバイス)による読み取りが可能な形式で情報を格納または送信する任意のメカニズムを含みうる。例えば、機械可読媒体は、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリデバイスその他を含みうる。
図1は、データアクセスインタリーブの一実施形態を示す。図示されているように、2つの異なるスレッド(現在のスレッドと、この現在のスレッドとは異なる別のスレッドであってよい遠隔スレッド)が、メモリの同じデータにアクセスしうる(例えば、メモリからデータを読み出す、および/または、メモリに同じデータを書き込む等)。I命令は、現在のスレッドからの現在のデータアクセス命令を表しうる。P命令は、現在のスレッドからの、時間的にI命令と最も近い先行データアクセス命令を表しうる。R命令は、現在のスレッドによるデータアクセスとインタリーブする遠隔スレッドからのデータアクセス命令を表しうる。つまり、R命令は、現在のスレッドからの時間的にI命令とP命令との間の遠隔データアクセス命令を表しうる。
従来のデータアクセス違反(例えば、データアクセス原子性違反)検出方法では、I命令、P命令、およびR命令という3つの命令が考慮に入れられ得た。以下の表は、8つの種類のデータアクセスインタリーブを示しており、ここで「R」が読み取りを表し、「W」が書き込みを表していてよい。
Figure 0005039754
ケース2、3,5、および6は、それぞれ異なる種類のデータアクセス原子性違反を示す。
図2は、原子性違反等のデータアクセス違反を検出する装置を有するコンピュータプラットフォームを示す。図2のコンピューティングプラットフォームは、他の種類のデータアクセス違反を検出できてもよいことに留意されたい。
コンピューティングプラットフォーム20は、1以上のプロセッサ21、メモリ22、およびデータ送受信および処理用の他のコンポーネント(図2には不図示)を備えてよい。コンピューティングプラットフォームの例は、メインフレームコンピュータ、ミニコンピュータ、パソコン、ワークステーション、携帯コンピュータ、ラップトップコンピュータ、クラスタ、その他のデータ送受信および処理可能なデバイスを含みうる。
プロセッサ21は、プロセッサバス等の1以上のバスを介して様々なコンポーネント(例えばメモリ22)に通信可能に連結される。プロセッサ21は、適切なアーキテクチャ(例えば、カリフォルニア州サンタクララのIntel Corporationから入手可能なIntel(登録商標)Xeon(登録商標)、Intel(登録商標)Pentium(登録商標)、Intel(登録商標)Itanium(登録商標)、Intel(登録商標)Coreアーキテクチャを含む)の下で、コードの実行を行いうる1以上の処理コアを有する集積回路(IC)として実装可能である。
メモリ22は、プロセッサ21が実行するコードを格納しうる。一実施形態では、メモリ22は、データアクセス違反を検出するコードを格納しうる。示すように、2つのスレッドグループ(つまり、ユーザスレッド23から23、および処理スレッド24から24)が、オペレーティングシステム25上で実行されうる。ユーザスレッドは、上述の表に示すように、同じデータを求めてメモリにアクセスする別のユーザスレッドからのアンシリアライザブルインタリーブを利用して、データを求めてメモリ22にアクセスすること(例えば、メモリ22に対してのデータ読み取り/書き込み処理)ができるが、この場合、データアクセス違反が生じうる。処理スレッド24−24は、ユーザスレッド23−23のデータアクセス違反を検出しうる。
一実施形態では、処理スレッド24−24の各々が、複数のバッファおよび1つのキャッシュを有しうる(例えば、処理スレッド24には、処理バッファ26、フィリングバッファ27、およびキャッシュ28、および、処理スレッド24には、処理バッファ26、フィリングバッファ27、およびキャッシュ28、といったように)。キャッシュ28−28は、様々なソフトウェアが管理するソフトウェアキャッシュであってよい。ソフトウェアキャッシュの例としては、通常はオペレーティングシステム25が管理するディスクキャッシュが含まれてよい。他の技術では他の実施形態が実装されうることに留意されたい。例えば、処理スレッドはそれぞれ、任意の数のバッファを含んでよい。別の例としては、キャッシュは、プロセッサキャッシュのようなハードウェアキャッシュであってよい。別の例としては、1つの処理スレッドを多数のスレッドの代わりに利用することができる。
一実施形態では、ユーザスレッド(ユーザスレッド23)は、データを求めて、幾らもの連続するメモリ位置にアクセスすることができるが、ここで各メモリ位置は、アドレスを有しうるデータピース各々を格納している。メモリアドレスは、データの1ピース(データピース)を格納するメモリ位置のアドレスのことであっても、あるいは、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の1アドレス(例えば、連続するメモリ位置の開始メモリ位置)のことであってもよい。
ユーザスレッドがデータを求めてメモリにアクセスすると(例えば、データピースを求めて1つのメモリ位置にアクセスする、または、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置にアクセスすると)、処理スレッド24−24に関連付けられている複数のフィリングバッファ27-27から1つのフィリングバッファを選択して、該メモリアクセスに関連するメモリアクセス情報を格納し、このメモリアクセス情報は後に、データアクセス違反検出および/または他の目的から利用される。一実施形態では、メモリアクセス情報は、1つのメモリ位置または連続するメモリ位置のメモリアドレス、データ長、メモリアクセスの時間情報(例えばタイムスタンプまたは時間インジケータ)および種類(例えば読み出し、書き込み)、メモリアクセス長、ユーザスレッドの識別子、および、データアクセス違反検出および/または他の目的に有用な他の情報を含むグループのうちの1以上を含みうる。メモリアクセス情報は、データおよび/または命令の形式であってよい。ユーザスレッドは、メモリアドレスに基づいてフィリングバッファを選択してよい。
図3aは、メモリアドレスの一実施形態を示す。メモリアドレスは、インタリーブビット(1または複数)、アライメントビット(1または複数)、レストビット(rest bit)(1または複数)といった異なる部分を含みうる。他の技術では、図3aのメモリアドレス構造の他の実施形態を実装しうる。例えば、異なる部分の位置が変更可能であってよい。別の例では、メモリアドレスの一部分(例えば、インタリーブビットの部分)を、幾らかの副部分に分割してもよい(図3b参照)。
メモリアドレスのインタリーブビット(1または複数)は、複数のフィリングバッファ27-27からフィリングバッファを識別するのに利用されてよい。例えば、4つの処理スレッド24−24用に4つのフィリングバッファ27-27があり、これらが、00、01、10、および11として識別されてよい。この場合、インタリーブビットは、4つのフィリングバッファから1つを識別するべく2つのビットを含みうる。一実施形態では、ユーザスレッドは、メモリアドレスが対象メモリ領域にあるか否かを決定しうる。決定が肯定的である場合には、ユーザスレッドは、メモリアドレスが識別したフィリングバッファへ、メモリアドレスへのアクセスに関連するメモリアクセス情報を追加してよい。決定が否定的である場合には、ユーザスレッドは、メモリアドレスをスキップしてよい。メモリ領域は、メモリ領域へのアクセスに関連する違反が検出されるよう予め決められていてよい。
アライメントビットは、そのメモリアクセス情報が特定のフィリングバッファに格納されており(例えば、フィリングバッファ27)、後のキャッシュ処理において該フィリングバッファに関連付けられたキャッシュ(例えばキャッシュ28)のキャッシュエントリへロードされうるようなメモリ領域のサイズを示してよい。故に、アライメントビットは、さらに、キャッシュエントリサイズをも示しうる。一実施形態では、メモリ領域は、一纏まりのデータを格納する連続するメモリ位置を含みえて、ここでは、異なるメモリ位置は互いに異なるデータピースを格納しうる。別の実施形態では、連続するメモリ位置同士が、互いに異なるデータを格納しうる。アライメントビットが示すメモリ領域へのアクセスに関連するメモリアクセス情報を同じフィリングバッファへ格納すると性能が向上する。
以下は、メモリアドレスの例である。
0000, 0001, 0010, 0011,
0100, 0101, 0110, 0111,
1000, 1001, 1010, 1011,
1100, 1101, 1110, 1111.
一実施形態では、メモリアドレスの左から二番目のビットをインタリーブビットとして、複数のフィリングバッファからフィリングバッファを識別させてよい、メモリアドレスの左から三番目および四番目のビットをアライメントビットとして、メモリアクセス情報が同じフィリングバッファに格納されうるメモリ領域のサイズを示させてよい。上述から分かるように、メモリアドレスの一番目および三番目のラインに対応するメモリアクセス情報は、1つの同じフィリングバッファへ行き、メモリアドレスの二番目および四番目のラインに対応するメモリアクセス情報は、別の同じフィリングバッファへ行く。別の実施形態では、異なるユーザスレッド同士は、互いに異なるメモリアドレスにアクセスしてよい。
上述のシナリオにおいては、メモリアクセス情報ログイン(logging)に関連するユーザスレッド間のコンフリクトは、異なるメモリ領域へのアクセスに関連するメモリアクセス情報を異なるフィリングバッファへ格納して、メモリアドレスの特定のビット(1以上)を用いて複数のフィリングバッファから特定のフィリングバッファを選択することにより、避けることができる。
図2へ戻ると、フィリングバッファが一杯の場合、それに関連する処理スレッドは、処理スレッドの処理バッファを、フィリングバッファとスイッチして、処理バッファが新たなフィリングバッファとして振舞うようにして、フィリングバッファが新たな処理バッファとして振舞うようにする。そして、処理スレッドは、新たな処理バッファからのメモリアクセス情報を、関連するキャッシュへ入力してよい。例えば、処理スレッド24は、フィリングバッファ27を処理バッファ26とスイッチして、新たな処理バッファ(フィリングバッファ27)からのメモリアクセス情報をキャッシュ28へ入力してよい。
上述のシナリオにおいては、フィリングバッファアクセスにまつわるユーザスレッドと処理スレッドとの間のコンフリクトは、フィリングバッファを処理バッファと分離することにより、避けることができる。
図4aは、キャッシュの一実施形態を示す。キャッシュは複数のキャッシュエントリを含んでよい。一実施形態では、各キャッシュエントリは、メモリ領域にアクセスしたアクセス履歴を含みえて、このアクセス履歴は、1以上のユーザスレッド23−23のメモリ領域へのアクセスに関連するメモリアクセス情報を含んでよい。メモリ領域は、各メモリ位置に関連付けられた各メモリアドレスのアライメントビット(1以上)が示す多くの連続するメモリ位置を含みうる。例えば、メモリアドレスが2つのアライメントビットを含む場合、メモリ領域は4つの連続するメモリ位置を有することができる。
一実施形態では、メモリ領域は、一纏まりのデータを含みえて、キャッシュエントリは、ユーザスレッド23−23による、メモリからの/メモリへの、該データへのアクセス履歴、およびその他の情報を格納しうる。別の実施形態では、メモリ領域は、多種のデータを格納しえて、キャッシュエントリは、ユーザスレッド23−23による、メモリからの/メモリへの、多種のデータへのアクセス履歴を格納しうる。メモリアクセス情報は、メモリ領域にアクセスするユーザスレッドの識別子、ユーザスレッドがアクセスするメモリアドレス、メモリアクセスの時間情報(例えばタイムスタンプまたは時間インジケータ)および種類(例えば読み出し、書き込み)、メモリアクセス長、データ長、および、後の違反検出および/または他の目的に有用な他の情報を含むグループのうちの1以上を含みうる。
様々な実施形態は、処理バッファに格納されているメモリアクセス情報を、アクセス履歴と、おそらくはキャッシュに格納されている他の情報と、リンクさせるよう実装されうる。一実施形態では、メモリアクセス情報のメモリアドレスを鍵として利用して、キャッシュデータと処理バッファデータをリンクさせてよい。例えば、メモリアドレスがどのメモリ領域のものかを決定することで、メモリアクセス情報が、処理バッファから、メモリ領域に関連付けられたキャッシュエントリへと、入力されてよい。別の例では、キャッシュの各キャッシュエントリは、メモリアドレスの特定のビット(例えば、図3a、図3bに示すようなメモリアドレスのレストビットあるいはインタリーブビット)により識別されることで、処理バッファのメモリアクセス情報がどのキャッシュエントリへ向かうべきかを、メモリアドレスのレストビットあるいはインタリーブビットが決定してよい。
キャッシュは、様々なキャッシュ置き換えアルゴリズム(例えば、LRU(最長時間未使用の)アルゴリズムおよびLFU(使用頻度が最も低い)アルゴリズム)により格納データを更新してよい。一実施形態では、LRUアルゴリズムにより、キャッシュはそのメモリに対して最長時間アクセスがなされていないユーザスレッドに関連付けられた格納データの幾らかまたは全てを破棄してよく、および/または、メモリアクセス情報ログインとして最長時間アクセスがなされていないキャッシュエントリを破棄してよい。別の実施形態では、LFUアルゴリズムにより、キャッシュはそのメモリに対するアクセス頻度が最も低いユーザスレッドに関連付けられた格納データの幾らかまたは全てを破棄してよく、および/または、メモリアクセス情報ログインとしてアクセス頻度が最も低いキャッシュエントリを破棄してよい。処理バッファに格納されているメモリアクセス情報は、LRUアルゴリズムおよび/またはLFUアルゴリズムについてアクセス頻度を決定する際に参照されてよい。
一実施形態では、全てのメモリアクセス情報が処理バッファからキャッシュへ入力されなくてもよい。対象メモリ領域に関連するメモリアクセス情報のみがキャッシュに入力されてもよい。
上述のシナリオでは、キャッシュは、後の違反検出用に全てのメモリアクセス情報を格納するのではなくて、メモリアクセス情報を選択的に格納することで格納要件を満たすようにすることもできる。さらに、データは、従来のメモリアクセスのようにバイト単位でのキャッシュではなくて、マルチバイト単位でキャッシュされうるので、幾らかのメモリアクセスに関連するメモリアクセス情報を、処理バッファからキャッシュへいちどきにキャッシュすることができる。例えば、アライメントビット(1または複数)が示すメモリ領域へのアクセスに関連するメモリアクセス情報をいちどきにキャッシュすることができる。
様々な実施形態では、図4aに示すキャッシュの他の変形例および変更例を実装することができる。一実施形態では、キャッシュエントリは、一纏まりのデータではなくて、1つのまたは幾らかのデータピースを格納する1以上のメモリ位置にアクセスしたアクセス履歴を格納してよい。一実施形態では、キャッシュエントリは、2以上のメモリ領域にアクセスしたアクセス履歴を格納してよい。別の実施形態では、1つのメモリ領域にアクセスしたアクセス履歴を、2以上のキャッシュエントリに格納してよい。また別の実施形態では、処理バッファのメモリアクセス情報は、キャッシュのメモリアクセス情報と同一でなくてもよい。つまり、処理スレッドは、処理バッファからのメモリアクセス情報を、修正してからキャッシュしてもよい。例えば、同じデータに対して同じユーザスレッドが連続して行うメモリアクセスに関連する情報は、整理統合してからキャッシュしてもよい。これらはあくまで例示的実施形態であり、様々な開示特徴を選択的に組み合わせた実施形態も可能であることを理解されたい。
図4bは、キャッシュページの一実施形態を示す。キャッシュ28−28に格納されている情報は、図4bの右側に示す幾らかのページへと整理されてよい。各ページは、各ユーザスレッドのメモリアクセス履歴を格納してよい(例えば、ユーザスレッド23用のページ(ユーザスレッドデータ29)、ユーザスレッド23用のページ(ユーザスレッドデータ29)、等といった具合に)。キャッシュ28−28各々は、メモリアドレスのインタリーブビット(1または複数)が識別するある特定のメモリ領域に関連するアクセス情報を格納するので、あるキャッシュページは、図4bが示す様々なキャッシュからのメモリアクセス情報を含みうる。
一実施形態では、処理スレッド(例えば24)は、処理バッファ(例えば26)からメモリアクセス情報(例えば、ユーザスレッド(例えばユーザスレッド23)のメモリアドレスアクセスに関連するメモリアクセス情報)を取得してから、メモリアクセス情報からメモリアドレスを取得してよい。処理スレッドは、さらに、自身に関連付けられたキャッシュ(例えばキャッシュ28)が、メモリアドレスに関連付けられたアクセス履歴を格納しているキャッシュエントリを有するか否か決定してよい。決定が肯定的である場合には、処理スレッドは、キャッシュエントリに格納されているアクセス履歴および処理バッファから取得したメモリアクセス情報を分析して、メモリアドレスのアクセスに関して違反があるか否かを決定してよい。
キャッシュエントリに格納されているアクセス履歴は、ある期間内に(例えば、キャッシュ置き換え期間内に)メモリアドレスにアクセスしうる任意のユーザスレッドに関連付けられたメモリアクセス情報を含みうるので、処理スレッドは、従来の方法が可能とする実際の違反の検出のみならず、潜在的な違反を検出することもできる。例えば、違反(実際の違反および潜在的な違反)は、スレッドのデータアクセス原子性に対する妨害と称される。ここでは、原子性が妨害されうるスレッドを、現在のスレッドと称する場合がある。
図5は、実際の違反および潜在的な違反の一実施形態を示す。図示されているように、スレッド24は、遠隔スレッド(例えばスレッド24、24、および24)によるアクセスをインタリーブすることでその原子性が妨害されうる現在のスレッドであってよい。処理スレッドが取得する現在のメモリアクセス情報は、スレッド24による現在のメモリアクセスに関していてよい。その場合、処理スレッドは、検出間隔(例えば、スレッド24による一番最近の先行するメモリアクセス時間と、スレッド24による現在のメモリアクセス時間との間の時間間隔)を決定してよい。例えば、図5に示すように、スレッド24のop[−1]「W」(つまり、書き込みの種類)メモリアクセスは、現在のメモリアクセスであってよく、それに対応する時間は、現在のメモリアクセス時間を示していてよく、一方で、スレッド24のop[−2]「W」メモリアクセスは、一番最近の先行するメモリアクセスであってよく、それに対応する時間は、一番最近の先行するメモリアクセス時間を示していてよい。
すると、処理スレッドは、メモリアドレスに関連するキャッシュエントリに格納されているアクセス履歴(例えば、遠隔スレッド(スレッド24、24、および24)によるアクセス履歴)を分析して、検出期間中に遠隔スレッドによるインタリーブアクセスがあるか否かを検出してよい。検出結果が肯定的である場合、処理スレッドは、インタリーブアクセス(1以上)が、実際の違反あるいは潜在的な違反のいずれを構成しているかを検出してよい。一実施形態では、処理スレッドは、例えばデータアクセス原子性違反用の上述の表を利用することで、インタリーブアクセスがデータアクセス違反であるか否かを検出することができる。検出結果が肯定的である場合、処理スレッドは、そのアクセス時間が現在のメモリアクセス時間に最も近い場合に、そのインタリーブアクセスが実際の違反であると決定してよく、そうではなければ、処理スレッドはインタリーブアクセスが潜在的な違反であると決定してよい。しかし、1つのインタリーブアクセスのみがデータアクセス違反を構成している場合には、その1つのインタリーブアクセスは実際の違反であってよい。
例えば、図5では、5つのインタリーブアクセスがデータアクセス違反を構成している場合を想定すると(つまり、スレッド24によるop[−1]Rおよびop[−2]Rアクセス、スレッド24によるop[−2]Rおよびop[−3]Rアクセス、および、スレッド24によるop[−1]Rアクセス)、スレッド24によるop[−1]Rアクセスが実際の違反であり、残りが潜在的な違反である、としてよい。
しかし、処理スレッドがメモリアドレスに関連付けられたアクセス履歴を格納するキャッシュエントリを関連キャッシュから見つけられない場合、処理スレッドは、そのメモリアクセス情報をキャッシュへ追加する、あるいは、そのメモリアクセス情報をスキップしてよい。メモリアクセス情報を追加するにあたっては、処理スレッドは、そのメモリアクセス情報のメモリアドレスに関連するアクセス履歴を格納すべく空のキャッシュエントリを取得して、その後、そのメモリアクセス情報を空のキャッシュエントリへ追加してよい。メモリアクセス情報をスキップするにあたっては、処理スレッドは、続いて処理バッファから次のメモリアクセス情報の取得を行い、次のメモリアクセス情報に上述の処理を行ってよい。
上述のプロセスのメモリアドレスは、1データピースを格納するメモリ位置のアドレスのことであっても、または、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の1つのアドレス(例えば開始アドレス)であってもよい。
図6は、メモリアクセス情報を格納する一実施形態を示す。ブロック601で、ユーザスレッド(例えばユーザスレッド23)は、あるメモリアドレスにアクセスしてよい。上述したように、メモリアドレスは、1データピースを格納するメモリ位置のアドレスであってよい。または、メモリアドレスは、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の1つのアドレス(例えば開始アドレス)であってもよい。ブロック602で、ユーザスレッドまたは他のデバイスは、このメモリアドレスが対象領域にあるか否かを決定してよい。決定が肯定的である場合、ユーザスレッドまたは他のデバイスは、そのメモリアドレスに基づいて、複数の処理スレッド(例えば、スレッド24−24)に関連付けられた複数のフィリングバッファ(例えばフィリングバッファ27−27)から1つのフィリングバッファを識別すべく、メモリアドレスを分析してよい(ブロック603)。上述のように、メモリアドレスは、インタリーブビット(1または複数)、アライメントビット(1または複数)、およびレストビット(rest bit)(1または複数)といった異なる部分を含みうる。インタリーブビット(1または複数)は、複数のフィリングバッファからフィリングバッファを識別するのに利用されてよい。一実施形態では、各フィリングバッファは、1以上のビットからなる識別子を有してよい。この場合、ユーザスレッドまたは他のデバイスは、メモリアドレスのインタリーブビット(1または複数)を分析してよい(ブロック603)。
ブロック604で、ユーザスレッドまたは他のデバイスは、メモリアクセスに関連するメモリアクセス情報を生成してよい。一実施形態では、メモリアクセス情報は、該メモリアドレス、メモリアクセスの時間情報(例えばタイムスタンプまたは時間インジケータ)および種類(例えば読み出し、書き込み)、メモリアクセス長、ユーザスレッドの識別子、データ長、および/または、後の違反検出および/または他の目的に有用な他の情報を含むグループのうちの1以上を含みうる。ブロック605で、ユーザスレッドは、ブロック603で識別されたフィリングバッファに対してメモリアクセス情報を格納してよい。
しかし、メモリアドレスが対象領域にない場合には、ブロック606で、ユーザスレッドまたは他のデバイスは、そのメモリアドレスの処理を省いてよい。上述のプロセスはユーザスレッド23−23全てに対して適用可能である点に留意されたい。
様々な実施形態では、図6の方法の他の変形例および変更例を実装することができる。一実施形態では、メモリアドレスが、対象となる所定領域に存在するか否かを決定すること(ブロック602)に加えて、ユーザスレッドまたは他のデバイスはさらに、このメモリアドレスが識別するフィリングバッファが存在するか否かを決定することもできる。このようなフィリングバッファが存在する場合、ユーザスレッドまたは他のデバイスは、このメモリアクセス情報をそのフィリングバッファに格納してよく、そうでなければ、ユーザスレッドまたは他のデバイスは、このメモリアドレス処理を省いてよい。
図7は、データアクセス違反を検出する一実施形態を示す。ブロック701で、処理スレッド(例えばスレッド24)または他のデバイスは、関連付けられたフィリングバッファ(例えばバッファ27)が満杯か否かを検出してよい。満杯な場合には、処理スレッドまたは他のデバイスは、フィリングバッファを、関連する処理バッファ(例えばバッファ26)とスイッチして(ブロック702)、処理バッファが新たなフィリングバッファとして振舞い、フィリングバッファが新たな処理バッファとして振舞ってよい。ブロック703で、処理スレッドまたは他のデバイスは、代理の処理バッファ(新たな処理バッファのこと)がメモリアクセス情報を有するか否かを決定してよい。決定が肯定的である場合には、ブロック704で、処理スレッドまたは他のデバイスは、処理バッファ(代理の処理バッファのこと)からメモリアクセスに関連するメモリアクセス情報を読み取ってよい。
ブロック705で、処理スレッドまたは他のデバイスは、関連付けられたキャッシュ(例えばキャッシュ28)が、メモリアクセス情報のメモリアドレスに関連するエントリを有するか否かを決定してよい。一実施形態では、キャッシュは、複数のキャッシュエントリを含みえて、ここで、各キャッシュエントリは、メモリアドレスにアクセスしたアクセス履歴および他の情報を含みうる。一実施形態では、メモリアドレスは、1データピースを格納するメモリ位置のことであってよい。別の実施形態では、メモリアドレスは、一纏まりのデータまたは多種のデータを格納する連続するメモリ位置の1つのアドレス(例えば開始アドレス)であってよい。
処理バッファから読み取ったメモリアクセス情報のメモリアドレスに関連付けられたキャッシュエントリをキャッシュが有している際には、処理スレッドまたは他のデバイスは、メモリアクセス情報およびキャッシュエントリに格納されているアクセス履歴を分析して、そのメモリアクセス情報に記録されているユーザスレッドの該メモリアドレスに対するデータアクセス違反があるか否かを検出する(ブロック706)。ここで、ユーザスレッドとは、現在のユーザスレッドのことであってよい。
一実施形態では、処理スレッドまたは他のデバイスは、検出間隔を決定してよく、その検出間隔において遠隔ユーザスレッド(例えば、現在のユーザスレッド以外のユーザスレッド)によるインタリーブアクセスがあるか否かを決定してよい。一実施形態では、処理スレッドまたは他のデバイスは、処理バッファから読み取られたメモリアクセス情報に記録されている現在のメモリアクセス時間と、アクセス履歴に記録されている一番最近の先行するメモリアクセス時間との間の期間を、検出間隔として決定してよい。一番最近の先行するメモリアクセス時間は、アクセス履歴に基づいて、現在のメモリアクセス時間より前であるが直近の現在のスレッドによるメモリアクセス時間を表していてよい。
ブロック707で、処理スレッドまたは他のデバイスは、実際のデータアクセス違反および/または潜在的なデータアクセス違反が現在のユーザスレッドに存在するか否かを決定してよい。一実施形態では、処理スレッドまたは他のデバイスは、現在のスレッドにデータアクセス違反があるか否かを検出してよい。検出結果が肯定的である場合には、処理スレッドまたは他のデバイスは、そのデータアクセス違反が実際の違反であるか潜在的な違反であるかを検出してよい。一実施形態では、検出間隔中に1つのデータアクセス違反しかない場合には、そのデータアクセス違反を実際の違反として決定してよい。しかし、その検出間隔中に2以上のデータアクセス違反がある場合には、現在のユーザスレッドの現在のメモリアクセス時間に対して直近のデータアクセス違反を実際の違反として決定し、他のデータアクセス違反は潜在的な違反として決定してよい。
実際の/潜在的な違反がある場合、処理スレッドまたは他のデバイスは、ブロック708で、実際の/潜在的な違反を処理する。一実施形態では、検出された違反に関連する情報を、さらなる分析およびユーザへの報告用に格納してよい。ブロック708の処理は省くことも出来ることを理解されたい。そしてブロック709で、処理スレッドまたは他のデバイスは、処理バッファから読み取ったメモリアクセス情報を、メモリアクセス情報のメモリアドレスに関連付けられたキャッシュエントリに追加する。ブロック709の処理は、例えばブロック705等の他のブロックの後に行うこともできる。
ブロック705で、メモリアクセス情報のメモリアドレスに関連付けられたキャッシュにキャッシュエントリがないと決定された場合には、ブロック711で、処理スレッドまたは他のデバイスは、そのメモリアクセス情報を追加するかスキップするかを決定してよい。一実施形態では、処理スレッドまたは他のデバイスは、ブロック711の決定を、少なくとも部分的に対象メモリ領域にそのメモリアドレスが存在するか否かに基づいて行ってよい。メモリアクセス情報を追加するにあたっては、処理スレッドは、空のキャッシュエントリを取得して(ブロック712)、キャッシュ記録をイニシャライズして(ブロック713)、メモリアクセス情報を空のキャッシュエントリに追加してよい(ブロック714)。メモリアクセス情報をスキップするにあたっては、処理スレッドまたは他のデバイスは、そのメモリアクセス情報を無視して、続いて処理バッファから次のメモリアクセス情報を読み出してよい(ブロック715)。
本発明を特定の実施形態との関連で記載してきたが、当業者であれば容易に理解するように、本発明の精神および範囲を逸脱しない範囲で変形例および変更例が可能であることを理解されたい。このような変形例および変更例もまた本発明および添付請求項の範囲内にあることを意図している。

Claims (18)

  1. 方法であって、
    現在のユーザスレッドによるメモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を第1のバッファから取得する段階と、
    キャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定する段階と、
    前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報および前記キャッシュエントリに格納されているアクセス履歴を分析して、前記メモリアドレスに対するアクセスに関して実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する段階と、
    を備え、
    複数の前記第1のバッファにそれぞれ対応して第2のバッファが設けられ、
    前記第2のバッファには、複数の前記ユーザスレッドによるメモリ領域へのアクセスに関連する情報が記録され、
    前記方法は、
    前記第2のバッファが満杯の場合、対応する前記第1のバッファを前記第2のバッファとスイッチする段階
    をさらに備える、方法。
  2. 前記アクセス履歴は、前記メモリアドレスに対する複数のメモリアクセスに関連するメモリアクセス情報を含み、
    前記複数のメモリアクセスの各々は、前記複数のユーザスレッドのいずれかが行い、
    前記複数のメモリアクセスのうち1つのメモリアクセスに関連する前記メモリアクセス情報は、前記メモリアクセスの時間情報、前記メモリアクセスの種類、メモリアクセス長、前記複数のユーザスレッドのうち前記メモリアクセスを行っているユーザスレッドの識別子、および前記メモリアドレスからなる群のうち1以上を含む、
    請求項1に記載の方法。
  3. 前記分析する段階は、さらに、
    前記アクセス履歴が前記現在のユーザスレッドによる前記メモリアドレスに対する先行するメモリアクセスに関連する先行するメモリアクセス情報を含むか否かを決定する段階と、
    前記アクセス履歴が前記先行するメモリアクセス情報を含む場合、前記先行するメモリアクセスの先行するアクセス時間から、前記現在のメモリアクセスの現在のアクセス時間まで継続する検出間隔を決定する段階と、
    を有する、請求項1または2に記載の方法。
  4. 前記分析する段階は、さらに、
    前記アクセス履歴が、遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき前記メモリアドレスにアクセスした一番最近の時間である場合に、前記実際の違反を検出する段階と、
    前記アクセス履歴が、遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき前記メモリアドレスにアクセスした一番最近の時間ではない場合に、前記潜在的な違反を検出する段階と、
    を有する、請求項1から3のいずれか一項に記載の方法。
  5. 前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報を前記キャッシュエントリに追加する段階
    をさらに備える、請求項1から4のいずれか一項に記載の方法。
  6. 前記キャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含まない場合、
    前記メモリアドレスが所定のメモリ領域にある場合、前記キャッシュの別のキャッシュエントリを見つけて、前記現在のメモリアクセス情報を前記別のキャッシュエントリに格納する段階と、
    前記メモリアドレスが前記所定のメモリ領域にない場合、前記現在のメモリアクセス情報をスキップする段階と、
    をさらに備える、請求項1から5のいずれか一項に記載の方法。
  7. 前記メモリアドレスは、複数の前記第2のバッファを識別するビットを少なくとも1つ含む、請求項1から6のいずれか一項に記載の方法。
  8. 複数のユーザスレッドは、複数の前記第2のバッファのうちの1のバッファを前記メモリアドレスに基づいて選択して、選択したバッファに前記メモリアクセス情報を格納する
    請求項1から7のいずれか一項に記載の方法。
  9. 前記複数のユーザスレッドによるメモリアクセスに関する違反は、複数の処理スレッドによって検出され、
    前記決定する段階は、複数の前記キャッシュのうちの1のキャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定し、
    前記複数の処理スレッドはそれぞれ、前記複数のキャッシュのうちの1のキャッシュ、前記複数の第1のバッファのうちの1のバッファおよび複数の前記第2のバッファのうちの1のバッファに関連付けられている
    請求項1から8のいずれか一項に記載の方法。
  10. メモリにアクセスする複数のユーザスレッドと、
    前記複数のユーザスレッドによるメモリアクセスに関する違反を検出する複数の処理スレッドと、
    前記複数の処理スレッドにそれぞれ関連付けられた複数のキャッシュと、
    前記複数の処理スレッドにそれぞれ関連付けられた複数の第1のバッファと、
    前記複数の処理スレッドにそれぞれ関連付けられた複数の第2のバッファと、
    を備え、
    前記複数のキャッシュの1つのキャッシュエントリは、1つのメモリアドレスへの複数のメモリアクセスに関連するメモリアクセス情報を含むアクセス履歴を格納しており、
    前記複数のメモリアクセスの各々は前記複数のユーザスレッドにより行われ、
    前記メモリアクセス情報は前記複数の第1のバッファから取得され、
    前記複数の第2のバッファには、前記複数のユーザスレッドによるメモリ領域へのアクセスに関連するメモリアクセス情報が記録され、
    前記複数の処理スレッドは、さらに、前記複数の第2のバッファのうちの関連付けられた第2のバッファが満杯の場合、当該第2のバッファを前記複数の第1のバッファのうちの関連付けられた第1のバッファとスイッチする、
    システム。
  11. 前記複数のメモリアクセスのうち1つのメモリアクセスに関連する前記メモリアクセス情報は、前記メモリアクセスの時間情報、前記メモリアクセスの種類、メモリアクセス長、前記複数のユーザスレッドのうち前記メモリアクセスを行っているユーザスレッドの識別子、および前記メモリアドレスからなる群のうち1以上を含む、
    請求項10に記載のシステム。
  12. 前記複数のキャッシュはソフトウェアキャッシュである、
    請求項10または11に記載のシステム。
  13. 前記複数の処理スレッドは、さらに、
    前記複数のユーザスレッドのうち現在のユーザスレッドによる前記メモリアドレスへの現在のメモリアクセスに関連する現在のメモリアクセス情報を、前記複数の第1のバッファのうちの関連付けられた第1のバッファから取得し、
    前記複数のキャッシュのうちの関連付けられたキャッシュが前記メモリアドレスに関連付けられたキャッシュエントリを含むか否かを決定し、
    前記複数のキャッシュのうちの関連付けられたキャッシュが前記メモリアドレスに関連付けられた前記キャッシュエントリを含む場合、前記現在のメモリアクセス情報および前記キャッシュエントリに格納されている前記アクセス履歴を分析して、実際の違反および潜在的な違反の少なくともいずれかがあるか否かを検出する、
    請求項10から12のいずれか一項に記載のシステム。
  14. 前記複数の処理スレッドは、さらに、
    前記アクセス履歴が前記現在のユーザスレッドによる前記メモリアドレスに対する先行するメモリアクセスに関連する先行するメモリアクセス情報を含むか否かを決定し、
    前記アクセス履歴が前記先行するメモリアクセス情報を含む場合、前記先行するメモリアクセスの先行するアクセス時間から、前記現在のメモリアクセスの現在のアクセス時間まで継続する検出間隔を決定する、
    請求項13に記載のシステム。
  15. 前記複数の処理スレッドは、さらに、
    前記アクセス履歴が、前記複数のユーザスレッドのうち遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき一番最近のメモリアクセス時間である場合に、前記実際の違反を検出し、
    前記アクセス履歴が、前記複数のユーザスレッドのうち遠隔ユーザスレッドによる検出間隔中の遠隔アクセス時間における前記メモリアドレスへの遠隔メモリアクセスを示す場合であって、前記遠隔メモリアクセスにより、前記現在のユーザスレッドの前記メモリアドレスに対するアクセス違反が生じ、前記遠隔アクセス時間が、前記アクセス履歴に基づき一番最近のメモリアクセス時間ではない場合に、前記潜在的な違反を検出する、
    請求項13または14に記載のシステム。
  16. 前記メモリアドレスは、前記複数の第2のバッファを識別するビットを少なくとも1つ含む、請求項10から15のいずれか一項に記載のシステム。
  17. 前記複数のユーザスレッドは、前記複数の第2のバッファのうちの1のバッファを前記メモリアドレスに基づいて選択して、選択したバッファに前記メモリアクセス情報を格納する
    請求項10から16のいずれか一項に記載のシステム。
  18. コンピュータに、請求項1から9のいずれか一項に記載の方法を実行させるためのプログラム。
JP2009175730A 2008-08-05 2009-07-28 データアクセス違反を検出する方法および装置 Expired - Fee Related JP5039754B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/186,416 US8032706B2 (en) 2008-08-05 2008-08-05 Method and apparatus for detecting a data access violation
US12/186,416 2008-08-05

Publications (2)

Publication Number Publication Date
JP2010067265A JP2010067265A (ja) 2010-03-25
JP5039754B2 true JP5039754B2 (ja) 2012-10-03

Family

ID=41396994

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009175730A Expired - Fee Related JP5039754B2 (ja) 2008-08-05 2009-07-28 データアクセス違反を検出する方法および装置

Country Status (5)

Country Link
US (1) US8032706B2 (ja)
EP (1) EP2151760B1 (ja)
JP (1) JP5039754B2 (ja)
KR (1) KR101109210B1 (ja)
CN (1) CN101645034B (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110258421A1 (en) * 2010-04-19 2011-10-20 International Business Machines Corporation Architecture Support for Debugging Multithreaded Code
US8959442B2 (en) * 2010-06-11 2015-02-17 Microsoft Corporation Memory allocation visualization for unmanaged languages
US9081628B2 (en) 2011-05-27 2015-07-14 Intel Corporation Detecting potential access errors in a multi-threaded application
JP5576563B2 (ja) * 2011-06-23 2014-08-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 秘密情報を管理する情報処理装置、方法およびプログラム
US8898794B1 (en) 2011-09-06 2014-11-25 Andrei Teodor Borac Efficient and secure data structure synchronization
US9003126B2 (en) 2012-09-25 2015-04-07 Intel Corporation Apparatus, system and method for adaptive cache replacement in a non-volatile main memory system
EP2972878B1 (en) * 2013-03-15 2018-09-26 Intel Corporation Mechanism for facilitating dynamic and efficient management of instruction atomicity violations in software programs at computing systems
US9740635B2 (en) * 2015-03-12 2017-08-22 Intel Corporation Computing method and apparatus associated with context-aware management of a file cache

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701432A (en) * 1995-10-13 1997-12-23 Sun Microsystems, Inc. Multi-threaded processing system having a cache that is commonly accessible to each thread
US6920634B1 (en) 1998-08-03 2005-07-19 International Business Machines Corporation Detecting and causing unsafe latent accesses to a resource in multi-threaded programs
US6412043B1 (en) * 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6701528B1 (en) 2000-01-26 2004-03-02 Hughes Electronics Corporation Virtual video on demand using multiple encrypted video segments
JP2002091795A (ja) * 2000-09-14 2002-03-29 Toshiba Corp キャッシュ制御装置
US6502170B2 (en) * 2000-12-15 2002-12-31 Intel Corporation Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes
JP2002207613A (ja) 2001-01-12 2002-07-26 Fujitsu Ltd 履歴採取装置及び履歴採取方法
US7516446B2 (en) * 2002-06-25 2009-04-07 International Business Machines Corporation Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs
US7093262B2 (en) 2002-07-30 2006-08-15 Intel Corporation Detecting deadlocks in multithreaded programs
US7168010B2 (en) * 2002-08-12 2007-01-23 Intel Corporation Various methods and apparatuses to track failing memory locations to enable implementations for invalidating repeatedly failing memory locations
CA2435148A1 (en) * 2003-07-15 2005-01-15 Robert J. Blainey System and method for lock caching for compound atomic operations on shared memory
US7711931B2 (en) * 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7849297B2 (en) * 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7549150B2 (en) * 2004-03-24 2009-06-16 Microsoft Corporation Method and system for detecting potential races in multithreaded programs
JP2006318412A (ja) * 2005-05-16 2006-11-24 Toshiba Corp 半導体装置
US7716645B2 (en) * 2005-06-10 2010-05-11 International Business Machines Corporation Using atomic sets of memory locations
US7844971B2 (en) 2005-09-28 2010-11-30 Intel Corporation Method and apparatus for detecting cross-thread stack access in multithreaded programs
US7577795B2 (en) * 2006-01-25 2009-08-18 International Business Machines Corporation Disowning cache entries on aging out of the entry
US7653789B2 (en) 2006-02-01 2010-01-26 Sun Microsystems, Inc. Multiprocessor system that supports both coherent and non-coherent memory accesses
JP4944518B2 (ja) * 2006-05-26 2012-06-06 富士通セミコンダクター株式会社 タスク遷移図表示方法及び表示装置
US7673181B1 (en) * 2006-06-07 2010-03-02 Replay Solutions, Inc. Detecting race conditions in computer programs
US8533681B2 (en) 2007-03-07 2013-09-10 The Board Of Trustees Of The University Of Illinois Atomicity violation detection using access interleaving invariants
US7861118B2 (en) * 2007-03-30 2010-12-28 Microsoft Corporation Machine instruction level race condition detection
US7539979B1 (en) * 2008-03-31 2009-05-26 International Business Machines Corporation Method and system for forcing context-switch during mid-access to non-atomic variables

Also Published As

Publication number Publication date
EP2151760B1 (en) 2015-10-28
JP2010067265A (ja) 2010-03-25
KR20100017078A (ko) 2010-02-16
US20100037025A1 (en) 2010-02-11
EP2151760A3 (en) 2010-06-02
KR101109210B1 (ko) 2012-01-30
EP2151760A2 (en) 2010-02-10
US8032706B2 (en) 2011-10-04
CN101645034B (zh) 2013-07-24
CN101645034A (zh) 2010-02-10

Similar Documents

Publication Publication Date Title
JP5039754B2 (ja) データアクセス違反を検出する方法および装置
JP6725671B2 (ja) 拡張されたシステム性能のための適応可能な値範囲のプロファイリング
JP6916751B2 (ja) ハイブリッドメモリーモジュール及びその動作方法
US6584549B2 (en) System and method for prefetching data into a cache based on miss distance
CN105701033B (zh) 取决于模式而可动态配置的高速缓存存储器
US8195925B2 (en) Apparatus and method for efficient caching via addition of branch into program block being processed
CN1303535C (zh) 用于虚拟存储器的管理的方法和分析高速缓存
US9201806B2 (en) Anticipatorily loading a page of memory
CN105701030A (zh) 根据卷标比特的动态高速缓存置换路选择
CN105701031A (zh) 取决于模式而可动态配置以选择分配至全部或是一个组的多模式组相联高速缓存存储器
US20100205344A1 (en) Unified cache structure that facilitates accessing translation table entries
KR20210019584A (ko) 다중 테이블 분기 타겟 버퍼
GB2510523A (en) Storage device access system
US8707014B2 (en) Arithmetic processing unit and control method for cache hit check instruction execution
US20140281238A1 (en) Systems and methods for accessing cache memory
US6810473B2 (en) Replacement algorithm for a replicated fully associative translation look-aside buffer
US6990551B2 (en) System and method for employing a process identifier to minimize aliasing in a linear-addressed cache
US7979640B2 (en) Cache line duplication in response to a way prediction conflict
CN115964309A (zh) 预取
CN114116529A (zh) 快速加载装置和数据高速缓存方法
CN112527395A (zh) 数据预取方法和数据处理装置
US20190378477A1 (en) Image processing system and memory managing method thereof
US11106589B2 (en) Cache control in a parallel processing system
CN114996024A (zh) 内存带宽监测方法、服务器和计算机可读存储介质
CN114860724A (zh) 数据库共享内存缓冲池的处理方法、存储介质与设备

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111220

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120314

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: 20120612

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120709

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150713

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5039754

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees