(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-19
(54)【発明の名称】オフロードされた動作における実行ハザードの検出
(51)【国際特許分類】
G06F 9/38 20180101AFI20240312BHJP
G06F 9/50 20060101ALI20240312BHJP
G06F 9/52 20060101ALI20240312BHJP
【FI】
G06F9/38 380B
G06F9/50 150D
G06F9/52 150B
G06F9/50 150E
G06F9/38 370C
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023558343
(86)(22)【出願日】2022-03-25
(85)【翻訳文提出日】2023-10-24
(86)【国際出願番号】 US2022021875
(87)【国際公開番号】W WO2022212190
(87)【国際公開日】2022-10-06
(32)【優先日】2021-03-31
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ジョナサン オルソップ
(72)【発明者】
【氏名】シャイジーン アガ
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013DD03
5B013EE04
(57)【要約】
オフロードされた動作における実行ハザードを検出することが開示される。第2のオフロード動作が、第2のオフロード動作に先行する第1のオフロード動作と比較される。第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかが判定される。実行ハザードが検出される場合に、エラーハンドリング動作が行われ得る。いくつかの例では、オフロード動作は、プロセッシングインメモリ動作である。
【選択図】
図1
【特許請求の範囲】
【請求項1】
オフロードされた動作における実行ハザードを検出する方法であって、
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することと、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することと、を含む、
方法。
【請求項2】
前記第2のオフロード動作が前記オフロードターゲットデバイス上で前記実行ハザードを生じさせると判定したことに応じて、エラーハンドリングアクションを開始することを更に含む、
請求項1の方法。
【請求項3】
エラーハンドリングアクションを開始することは、エラーメッセージを送信することと、エラーログエントリを生成することと、フォールトをトリガすることと、のうち少なくとも1つを含む、
請求項2の方法。
【請求項4】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、前記第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のオフロードターゲットデバイス識別子と前記第2のオフロードターゲットデバイス識別子とが一致しない場合に前記実行ハザードを検出することを含む、
請求項1の方法。
【請求項5】
前記第1のオフロード動作がオフロード動作のシーケンスを開始するという指標に応じて、前記第1のオフロードターゲットデバイス識別子を記憶することを更に含む、
請求項4の方法。
【請求項6】
前記第1のオフロード動作のシーケンスラベルを記憶することを更に含み、
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、
前記第2のオフロード動作のシーケンスラベルを識別することと、
前記第2のオフロード動作の前記シーケンスラベルに基づいて、前記第1のオフロードターゲットデバイス識別子を識別することと、を含む、
請求項5の方法。
【請求項7】
前記第1のオフロードターゲットデバイス識別子を有するシーケンシャルオフロード命令のパターンを識別することを更に含む、
請求項4の方法。
【請求項8】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のスレッド識別子を、前記第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のスレッド識別子と前記第2のスレッド識別子とが一致しない場合に、前記オフロードターゲットデバイスにおいて前記実行ハザードを検出することを含む、
請求項1の方法。
【請求項9】
オフロードターゲットデバイス上でレース検出が有効化されていることを識別することを更に含む、
請求項8の方法。
【請求項10】
前記オフロードターゲットデバイス上でレース検出が有効化されていることを識別することは、レース検出インジケータに関連付けられている第1のオフロード動作のための前記第1のスレッド識別子を記憶することを含む、
請求項9の方法。
【請求項11】
前記第2のオフロード動作は、プロセッシングインメモリ(PIM)動作であり、前記オフロードターゲットデバイスは、PIMモジュールである、
請求項1の方法。
【請求項12】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較すること、及び、前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、ランタイム時に実行される、
請求項1の方法。
【請求項13】
オフロードされた動作における実行ハザードを検出するための装置であって、
論理回路を備え、
前記論理回路は、
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することと、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することと、
を行うように構成されている、
装置。
【請求項14】
前記論理回路は、前記第2のオフロード動作が前記オフロードターゲットデバイス上で前記実行ハザードを生じさせると判定したことに応じて、エラーハンドリングアクションを開始するように構成されている、
請求項13の装置。
【請求項15】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、前記第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のオフロードターゲットデバイス識別子と前記第2のオフロードターゲットデバイス識別子とが一致しない場合に前記実行ハザードを検出することを含む、
請求項13の装置。
【請求項16】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のスレッド識別子を、前記第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のスレッド識別子と前記第2のスレッド識別子とが一致しない場合に、前記オフロードターゲットデバイスにおいて前記実行ハザードを検出することを含む、
請求項13の装置。
【請求項17】
オフロードされた動作における実行ハザードを検出するためのシステムであって、
2つ以上のプロセッサコアと、
2つ以上のプロセッシングインメモリ(PIM)モジュールと、
論理回路と、を備え、
前記論理回路は、
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することと、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することと、
を行うように構成されている、
システム。
【請求項18】
前記論理回路は、前記第2のオフロード動作が前記オフロードターゲットデバイス上で前記実行ハザードを生じさせると判定したことに応じて、エラーハンドリングアクションを開始するように構成されている、
請求項17のシステム。
【請求項19】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、前記第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のオフロードターゲットデバイス識別子と前記第2のオフロードターゲットデバイス識別子とが一致しない場合に前記実行ハザードを検出することを含む、
請求項17のシステム。
【請求項20】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のスレッド識別子を、前記第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のスレッド識別子と前記第2のスレッド識別子とが一致しない場合に、前記オフロードターゲットデバイスにおいて前記実行ハザードを検出することを含む、
請求項17のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
コンピューティングシステムは、多くの場合、命令を取り出して実行し、実行した命令の結果を適切な場所に記憶することができるいくつかの処理リソース(例えば、1つ以上のプロセッサ)を含む。処理リソース(例えば、中央処理ユニット(central processing unit、CPU)又はグラフィック処理ユニット(graphics processing unit、GPU))は、データに対して論理演算を行うことによって命令を実行するために使用することができる、例えば、算術論理ユニット(arithmetic logic unit、ALU)回路、浮動小数点ユニット(floating point unit、FPU)回路及び/又は組み合わせ論理ブロック等のいくつかの機能ユニットを備えることができる。例えば、機能ユニット回路は、オペランドに対する加算、減算、乗算及び/又は除算等の算術演算を実施するために使用されてもよい。典型的には、処理リソース(例えば、プロセッサ及び/又は関連機能ユニット回路)は、メモリアレイの外部にあり、データは、命令セットを実行するために、処理リソースとメモリアレイとの間のバスを介してアクセスされる。メモリアレイ内のデータをフェッチするため又は記憶するためのアクセスの量を低減するために、コンピューティングシステムは、処理リソース又は処理リソース群による使用のために最近アクセスされた又は変更されたデータを一時的に記憶するキャッシュ階層を用い得る。しかしながら、データを処理リソースのより近くにもってくるのではなく、データを記憶する記憶場所のより近くでデータ処理が実行されるように、処理リソースがメモリの内部及び/又は近くに実装されるメモリベース実行デバイスにある特定の動作をオフロードすることによって、処理性能が更に改善され得る。メモリベース実行デバイスは、外部通信(すなわち、プロセッサからメモリアレイへの通信)を低減することによって時間を削減し、電力も節約し得る。
【図面の簡単な説明】
【0002】
【
図1】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための例示的なシステムのブロック図である。
【
図2】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的なシステムのブロック図である。
【
図3】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的なシステムのブロック図である。
【
図4】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的なシステムを示すフローチャートである。
【
図5】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図6】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図7】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図8】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図9】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図10】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図11】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【
図12】本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための別の例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【0003】
計算スループットは、メモリ帯域幅よりも速くスケーリングするので、増大する計算能力にデータを送り込み続けるために多くの技術が提案されてきた。プロセッシングインメモリ(processing-in-memory、PIM)対応ハードウェアは、計算をメモリの近くに移動させ、メモリの近くのロジックに、ホストが利用可能なメモリ帯域幅よりも高いメモリ帯域幅の利益をもたらす。一例として、可能なPIM構成は、各ダイナミックランダムアクセスメモリ(dynamic random access memory、DRAM)バンク内に単純なベクトル計算要素及びローカルレジスタを追加することを含む。次いで、ホストプロセッサは、単にターゲットアドレスを指定することで、このバンクローカル論理において行われる細粒度コマンド(レジスタへのロード、レジスタからのストア、加算、乗算累算等)を送信することができる。メモリに直接アクセスしない動作の場合、アドレスのバンク識別子ビットのみが、何れのPIMユニットがアドレス指定されているかを指定するために必要とされる。このような構成では、PIMは、メモリインターフェースにわたってデータを転送すること及びメモリインターフェースを遅くすることを回避し、したがって、達成可能なメモリ帯域幅を増加させ、データが制限された作業負荷の増大するカテゴリに対する性能を改善することができる。
【0004】
しかしながら、PIMは、ソフトウェア開発のためのメモリモデルを複雑にし、高性能で機能的なアプリケーションを開発するためにアーキテクチャ固有のメモリ配置の詳細の認識を必要とする。PIM動作のシーケンスが、メモリローカルレジスタ内の同じ中間値に対して動作している間に複数のアドレスをターゲットとする場合(例えば、ロード+加算[A]->R1の後にR1->[B]のストア)、これらのアドレスは、同じPIMメモリパーティション内に位置しなければならない。これが当てはまらない場合、依存PIM動作は、異なるパーティション内のレジスタにマッピングされ、プログラムを失敗させることになり、失敗のソースは、デバッグすることが非常に困難であり得る。例えば、PIM実行ユニットは、一般に、メモリ階層(例えば、バンク又はチャネル)内のある特定のレベルに配置される。PIM実行ユニットが2つのアドレスに対して動作するためには、両方のアドレスが、PIM実行ユニットが関連付けられる同じメモリ階層パーティションに含まれなければならない(例えば、ターゲットオペランドのメモリアドレスは、同じ物理メモリバンクにマッピングされなければならない)。アドレスから物理メモリへのマッピングについてのソフトウェア仮定がハードウェアの現実と一致しない場合(例えば、誤構成に起因して)又はアドレス指定エラーが発生する場合には、依存PIM動作が誤って間違ったメモリバンクに発行されることがあり、その結果、デバッグが困難であり得る微妙なメモリ又はPIMレジスタファイルの破損が生じる。これは、メモリに記憶され得るか又はメモリから戻され得るデータの値に影響を及ぼすので、メモリモデルに対する新たな複雑さを表し、正しい動作のために低レベルのハードウェア詳細の認識を必要とする。したがって、これらの誤ったPIM動作を早期に検出する能力は、PIMソフトウェアにおけるプログラム可能性及び移植性を保証するために非常に重要である。
【0005】
また、PIMは、レースの性質をもつPIMアクセスに関して、第2の関連する複雑さをメモリモデルに導入する。ソースオペランド又はデスティネーションオペランドとしてバンクローカルレジスタをアドレス指定するPIMコマンドが発行される場合にはいつでも、アクセスされる特定のレジスタは、(特定のPIMコマンドのレジスタIDビットに加えて)ターゲットメモリアドレスのバンクIDビットによって判定される。異なるコアから複数のPIMコマンドを並行して発行するために(これは、PIMの帯域幅の利点を利用するために必要であり得る)、ソフトウェアは、独立したコマンドが同じバンク及びレジスタを対象とする場合に、中間データの破損をもたらし得るので、独立したコマンドを同時に発行することを回避しなければならない。
【0006】
PIMシステムにおけるアドレスマッピングエラーの検出は、従来のマルチスレッドプログラムにおける不正なレース又はメモリエラーの検出の問題とは異なる問題である。メモリのハードウェアマッピングに依存しているため、これらのタイプのPIMエラーは、アーキテクチャ及びマッピング構成と完全に絡み合っている。この認識は、標準的な共有メモリマルチスレッドプログラムには存在しないPIMソフトウェアの基本的な移植性及びプログラム可能性の課題であり、単にスレッド間のデータレースを検出するよりも問題を困難にする。例えば、1つのアドレスマッピングのために書かれたプログラムが、異なる数のPIMモジュール又は異なるように構成されたインターリーブパターンを有する新しいアーキテクチャ上で直接実行される場合、ランタイム時にのみ検出可能な方法で失敗し得る。対照的に、共有メモリプログラムにおけるデータレースは、ハードウェアにとらわれない方法で検出することができる。これは、PIMマッピングエラーの課題をはるかに困難なハードルにし、デバッグをサポートすることをより重要にする。
【0007】
上記に対処するために、本開示による実施形態は、PIMモジュール等のオフロード実行デバイスを対象とするオフロード動作における潜在的なマッピングエラーを検出するための技術及び機構を提供する。1つの例示的なマッピングエラータイプは、単一のスレッドからの2つのPIM動作が同じPIMモジュールにマッピングされることが意図されているが、それらが異なるモジュールにマッピングされる場合に発生する。別の例示的なマッピングエラータイプは、異なるスレッドからの2つのPIM動作が異なるPIMモジュールにマッピングされることが意図されているが、それらが同じPIMモジュールにマッピングされる場合に発生する。このようなマッピングエラーは、オフロード実行デバイスにおいて実行ハザード及び不正確な実行を引き起こし得る。これらのマッピングエラーの検出は、違反している命令の識別を容易にし、プログラム可能性の向上を可能にし、ポータブルPIMソフトウェアにおける信頼性を改善し、デバッグを著しく改善する。
【0008】
本開示による実施形態は、オフロードされた動作における実行ハザードを検出する方法を対象とする。本方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することと、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することと、を含む。いくつかの実施形態では、本方法は、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせると判定することに応じて、エラーハンドリングアクションを開始(始動)することを含む。エラーハンドリングアクションは、エラーメッセージを送信すること、エラーログエントリを生じさせること、又は、フォールトをトリガすることを含み得る。
【0009】
いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含む。これらの実施形態では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出することを含む。
【0010】
いくつかの実施形態では、本方法は、第1のオフロード動作が従属オフロード動作のシーケンスを開始するという指標に応じて、第1のオフロードターゲットデバイス識別子を記憶することを含み得る。これらの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作のシーケンスラベルを識別することと、第2のオフロード動作のシーケンスラベルに基づいて第1のオフロードターゲットデバイス識別子を識別することと、を含む。
【0011】
いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含む。これらの実施形態では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合に、オフロードターゲットデバイスにおいて実行ハザードを検出することを含む。いくつかの実施形態では、本方法は、レース検出がオフロードターゲットデバイス上で有効化されていることを識別することを含む。これらの実施形態では、レース検出がオフロードターゲットデバイス上で有効化されていることを識別することは、レース検出インジケータに関連付けられている第1のオフロード動作のための第1のスレッド識別子を記憶することを含み得る。
【0012】
いくつかの実施形態では、本方法は、第1のオフロードターゲットデバイス識別子を有するシーケンシャルオフロード命令のパターンを識別することを含む。いくつかの例では、第2のオフロード動作及び第1のオフロード動作は、PIM動作である。これらの例では、第1のオフロードターゲットデバイス及び第2のオフロードターゲットデバイスは、PIMモジュールである。いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること、及び、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、ランタイム時に行われる。
【0013】
本開示による別の実施形態は、オフロードされた動作における実行ハザードを検出するための装置を対象とする。本装置は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較し、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定するように構成された論理回路を含む。いくつかの実施形態では、論理は、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせると判定することに応じて、エラーハンドリングアクションを開始するように構成されている。エラーハンドリングアクションは、エラーメッセージを送信すること、エラーログエントリを生じさせること、又は、フォールトをトリガすることを含み得る。
【0014】
いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含む。これらの実施形態では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出することを含む。
【0015】
いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含む。これらの実施形態では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合に、オフロードターゲットデバイスにおいて実行ハザードを検出することを含む。
【0016】
本開示による更に別の実施形態は、オフロードされた動作における実行ハザードを検出するためのシステムを対象とし、本システムは、2つ以上のプロセッサコアと、2つ以上のインメモリ処理(PIM)モジュールと、論理回路と、を含み、論理回路は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較し、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定するように構成されている。いくつかの実施形態では、論理は、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせると判定することに応じて、エラーハンドリングアクションを開始するように構成されている。エラーハンドリングアクションは、エラーメッセージを送信すること、エラーログエントリを生じさせること、又は、フォールトをトリガすることを含み得る。
【0017】
いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含む。これらの実施形態では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出することを含む。
【0018】
いくつかの実施形態では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較することは、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含む。これらの実施形態では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合に、オフロードターゲットデバイスにおいて実行ハザードを検出することを含む。
【0019】
本開示による実施形態は、
図1から始めて更に詳細に説明される。明細書及び図面を通じて、同じ符号は同じ構成要素を指す。
図1は、本開示による、オフロードされた動作における実行ハザードを検出するための例示的なシステム100のブロック図を示している。
図1の例示的なシステム100は、2つ以上のプロセッサコア102、104を含む。様々な例では、プロセッサコア102、104は、シングルスレッド又はマルチスレッドアプリケーションをホストするように構成されたホストデバイス130のCPUコア又はGPUコアである。例えば、ホストデバイス130は、それぞれのプロセッサコア102、104がマルチスレッドアプリケーションのそれぞれのスレッドを実行するように、マルチスレッドアプリケーションをホストしてもよい。プロセッサコア102、104は、オフロードターゲットデバイスに動作をオフロードするためのオフロード命令を含む命令セットアーキテクチャを実装している。オフロード命令は、例えば、オフロード命令に関連付けられたメモリアドレスが解決され、プロセッサレジスタ内のオペランド値が利用可能であり、メモリチェックが完了した場合に、プロセッサコア102、104によって完了される。オフロード命令において示される動作(例えば、ロード、ストア、加算、乗算)は、プロセッサコア上で実行されず、代わりに、オフロードターゲットデバイス上での実行のためにオフロードされる。オフロード命令が完了すると、プロセッサコア102、104は、オフロード動作、オペランド値及びメモリアドレス、並びに、他のメタデータを含むオフロード要求又はコマンドを生成して発行する。このようにして、プロセッサコア102、104上の作業負荷は、プロセッサコア102、104の外部又は遠隔のデバイス上で実行するための動作をオフロードすることによって軽減される。
【0020】
例えば、オフロード動作は、PIM対応メモリデバイスに記憶されたデータに対して動作を実行するようにPIMモジュールに指示するプロセッシングインメモリ(PIM)動作であってもよい。このような例では、オフロード命令の演算子は、ロード演算子、ストア演算子及び算術演算子を含んでもよく、オフロード命令のオペランドは、PIMレジスタ(すなわち、PIMモジュールに対してローカルなレジスタ)、メモリアドレス、及び、コアレジスタからの値又は他のコア計算値を含み得る。
【0021】
また、システム100は、メモリデバイス108にアクセスするためにプロセッサコア102、104によって共有される少なくとも1つのメモリコントローラ106を含む。
図1の例は単一のメモリコントローラ106を示しているが、システム100は、各々がメモリデバイス108内のメモリチャネルに対応する複数のメモリコントローラを含み得る。いくつかの例では、メモリコントローラ106は、オフロードターゲットデバイスによる実行のための動作をオフロードするために、プロセッサコア102、104によって使用される。これらの例では、メモリコントローラ106は、プロセッサコア102、104によって生成されたオフロード要求に応じて、オフロード動作を実行するようにオフロードターゲットデバイスに指示する、オフロード動作のためのオフロードコマンドを生成する。
【0022】
いくつかの例では、メモリコントローラ106と、プロセッサコア102、104を含むホストデバイス130とは、(例えば、システムオンチップ(System-on-Chip、SoC)アーキテクチャ内の)同じチップ上に実装されている。いくつかの例では、メモリデバイスと、メモリコントローラ106と、プロセッサコア102、104を含むホストデバイス130とは、同じチップ上に(例えば、システムオンチップ(SoC)アーキテクチャ内の)実装されている。いくつかの例では、メモリデバイスと、メモリコントローラ106と、プロセッサコア102、104を含むホストデバイス130とは、同じパッケージ内に(例えば、システムインパッケージ(System-in-Package、SiP)アーキテクチャ内の)実装されている。
【0023】
図1の例示的なシステム100では、メモリデバイス108は、PIMモジュール110、112がホストデバイス130からオフロードされた動作を実行するように構成されているという点で例示的なオフロードターゲットデバイスである2つ以上のPIMモジュール110、112を含むPIM対応メモリデバイスである。ホストデバイス130及びPIMモジュール110、112は、ホストデバイス130上で実行されるアプリケーションによって生成され、消却される同じデータへのアクセスを共有する。例えば、このデータは、PIMモジュール110、112がそれぞれ結合されるメモリデバイス108のメモリアレイ120、122に記憶されたデータであってもよい。PIMモジュール110、112は、ホストデバイス130と比較してデータへのより高速なアクセスによって特徴付けられる。いくつかの例では、PIMモジュール110、112は、メモリ集約型タスクを実行するために、プロセッサコア102、104の指示で動作する。メモリアレイ120、122は、バンクのメモリセルのアレイ、バンクのアレイ、又は、他のメモリ階層パーティションであり得る。ここでの説明のために、各PIMモジュール110、112は、それぞれのメモリバンク(すなわち、メモリアレイ120、122の形態)に結合されていると仮定する。当業者であれば、本開示の趣旨から逸脱することなく、PIM対応メモリデバイスにおけるPIMモジュール及びメモリパーティション(物理的又は論理的)の様々な構成が採用され得ることを理解するであろう。
【0024】
図1の例では、PIMモジュール110、112は、プロセッサコア102、104から発行された命令又はコマンドを復号するための制御論理114と、命令又はコマンドにおいて示されたオフロードされた動作(すなわち、PIM動作)を行う演算論理ユニット(ALU)116と、メモリアレイ120、122から読み取られるか又はメモリアレイ120、122に書き込まれるデータを保持するためのレジスタファイル118と、を含む。いくつかの例では、ALU116は、プロセッサコア102、104のALUに対して限定された一組の動作を行うことが可能であり、これにより、ALU116を実装することをより複雑でなくし、インメモリアプリケーションにより適したものにする。PIM動作は、PIM一時記憶部(例えば、PIMレジスタファイル118)及び/又はメモリアレイ120、122との間でデータを移動させ、またALU116内のこのデータに対するニアメモリ計算をトリガし得る。各PIM動作は、PIM動作を適切なPIMモジュールに向けるために使用されるターゲットアドレスと、PIM一時記憶部(例えば、レジスタファイル118)内の位置を更に指定し得る、行われるべき動作と、を搬送する。各PIMモジュール110、112は、物理アドレス空間の個別のサブセット上で動作することができる。PIM動作がPIMモジュール110、112に到達すると、PIM動作は、他のPIM動作及びメモリアレイ120、122へのメモリアクセスと直列化される。
【0025】
図1の例示的なシステム100では、プロセッサコア上で実行される単一のスレッドからの2つのPIM動作が同じPIMモジュールにマッピングされることが意図されるが、代わりに、メモリアドレスとメモリバンク又はモジュールとの間のマッピングにおけるエラー又は誤認に起因して、異なるPIMモジュールにマッピングされることが意図される可能性がある。例えば、マッピング関数は、異なるアーキテクチャに対して変化する可能性が高く、コードをポーティングする場合にエラーを引き起こす。更に、マッピング関数は、異なる作業負荷に対してデータインターリーブ戦略を最適化するように、動的にプログラムされてもよい。このようなエラーは、発見及びデバッグが困難である。新しいPIMソフトウェアをプログラミングし、テストし及びデバッグするプロセスを簡略化するために、このような分岐するPIM動作を識別することは有益である。
【0026】
PIM対応ソフトウェアのプログラミング、テスト及びデバッグを容易にするために、
図1のシステム100は、分岐検出デバイス150も含む。分岐検出デバイス150は、関連付けられたPIM動作のターゲットアドレスビットからPIMモジュール識別子を抽出する。以下で説明するように、一組のPIM動作の抽出されたPIMモジュール識別子は、一組のPIM動作における分岐を検出するために比較され、特定のPIM動作は、一組のPIM動作においてターゲットにされる他のPIMモジュールとは異なるPIMモジュールをターゲットにする。すなわち、分岐検出デバイス150は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較し、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定するように構成された論理回路を含む。具体的には、分岐検出デバイス150は、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較し、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出する論理回路を含む。
【0027】
いくつかの実施形態では、分岐検出デバイス150は、比較をいつ行うべきかを識別する。一例では、分岐検出デバイス150は、比較が行われるべきであるオフロード動作(例えば、PIM動作)のシーケンスのプログラム宣言を識別する。別の例では、プロセッサコア102、104によって処理されるオフロード命令(例えば、PIM命令)中の1つ以上のビットは、後続のPIM命令が同じオフロードターゲットデバイス(例えば、PIMモジュール110、112)にマッピングしなければならないことを示すために使用される。更に別の例では、オフロード命令中の1つ以上のビットは、命令が前のオフロード命令と同じオフロードターゲットデバイスにマッピングしなければならないことを示すために使用される。更に別の例では、個別の専用オフロード命令(例えば、PIM命令)を使用して、後続の/前のオフロード命令が同じオフロードターゲットデバイス(例えば、PIMモジュール110、112)にマッピングしなければならないことを示すために使用される。更に別の例では、オフロード命令(例えば、PIM命令)において識別される予約されたターゲットアドレスへのアクセスは、後続の/前のオフロード命令が同じオフロードターゲットデバイス(例えば、PIMモジュール110、112)にマッピングしなければならないことを示すために使用される。いくつかの実施形態では、ハードウェアは、ソフトウェアからの明示的な指示なしにパターン検出に基づいて比較をいつ行うべきかを推定する。
【0028】
更なる説明のために、PIM命令によって実装される例示的なベクトル加算カーネルを考える。
for i=0:N:
PIM_Ld(a[i]->pimR1)
PIM_Add(pimR1+=b[i])
PIM_St(pimR1->c[i])
【0029】
上記の例では、アレイa[]の要素は、メモリからPIMレジスタファイル(例えば、PIMレジスタファイル118)内のPIMレジスタpimR1に読み取られる(すなわち、PIM_Ld(a[i]->pimR1))。次いで、pimR1の内容がメモリ内のアレイb[]の要素に加算され、その結果がpimR1に記憶される(すなわち、PIM_Add(pimR1+=b[i]))。次いで、pimR1の内容がアレイc[]の要素に記憶される(すなわち、PIM_St(pimR1->c[i]))。しかしながら、アレイa[]、b[]及びc[]が適切に位置合わせされていない場合(又はアドレスオフセットが正しく計算されていない場合)、a[i]、b[i]及びc[i]の全てが異なるPIMモジュールにマッピングされることがあり、その結果、ガーベッジ値がc[]に書き込まれ、c[]が後で読み取られる場合に未定義の、場合によっては、非判定論的な挙動につながる。
【0030】
いくつかの実施形態では、命令セットアーキテクチャ(instruction set architecture、ISA)におけるセマンティクスが、従属PIM命令のシーケンスが同じPIMモジュールにマッピングされることを示すために提供される。例えば、同じPIMモジュールにマッピングされるべきである(すなわち、PIM命令から生成されるオフロード要求/コマンドは、同じPIMモジュールをターゲットにすべきである)PIM命令のシーケンスの開始及び終了を示すために、特別な命令が提供される。シーケンス開始命令及びシーケンス終了命令は、スタンドアロン命令又は従来のPIM命令の変更であり得る。この特徴を示すために、本開示の実施形態によるシーケンス開始/終了セマンティクス(太字で示される)で変更されたコードの上記カーネルの例を考える。
for i=0:N:
PIM_Ld_begin_seq(a[i]->pimR1)
PIM_Add(pimR1+=b[i])
PIM_St(pimR1->c[i])
PIM_end_seq()
なお、PIM_Ld_begin_seqは、PIM_Ld命令の変更を含むシーケンス開始命令である。この場合、PIM_Ld_begin_seqは、この命令及びそれに続く命令が、同じPIMモジュールにマッピングすべきであるPIM命令の同じシーケンスの一部であることを示す。PIM_end_seq()命令は、後続の命令がシーケンス開始命令に関連付けられた同じPIMモジュールにマッピングする必要がないことを示すシーケンス終了命令である。いくつかの例では、シーケンス終了命令は必要ではなく、新しいシーケンスが開始する場合にシーケンスが終了する。
【0031】
いくつかの実施形態では、プロセッサコア102、104上で実行されるスレッドにおいてPIMシーケンス開始命令が識別されると、関連付けられたPIM動作のターゲットアドレスビットからターゲットPIMモジュールIDを抽出するためにフラグが設定される。これらの実施形態では、フラグは、PIM命令に対して仮想アドレスから物理アドレスへの変換が行われるまで、ロード/ストアパイプラインを通って移動する。いくつかの例では、次いで、アーキテクチャアドレスマッピング情報に基づいて、ターゲットPIMモジュールIDが計算される。他の例では、ターゲットPIMモジュールIDは、ページオフセットビットから判定され、したがって、仮想から物理への変換なしに計算することができる。ターゲットPIMモジュールIDを識別するために使用されるビットのうちいくつかのみがページオフセットビットに含まれる場合、(ある程度の精度を犠牲にして)仮想-物理変換を行うことを回避するために、これらのビットのみを比較することが好ましい場合がある。分岐検出デバイス150では、シーケンス開始命令に関連付けられたターゲットPIMモジュールIDが抽出され、アクティブPIMモジュールIDとしてスレッドローカルレジスタに記憶される(以前の内容を置き換える)。次いで、後続の命令のターゲットPIMモジュールIDが、アクティブPIMモジュールIDと比較される。例えば、後続のPIM命令が復号される場合に、後続のPIM命令は、PIMインデックスチェックが必要であることを示すフラグを設定する。ターゲットPIMモジュールIDは、これらの動作について同様に計算され、現在のスレッドに関連付けられたアクティブPIMモジュールIDの値と比較される。不一致が存在する場合、これは、PIM動作が実行される場合にPIMモジュール上で起こり得る実行ハザードを示す。このような実行ハザードが検出される場合に、エラーハンドリング動作が開始され得る。例えば、分岐検出デバイス150は、割り込み又はページフォールトを生成し、デバッギングのために警告情報をログ記録し、フォールト又は他の同様のエラーハンドリング動作を強制し得る。
【0032】
いくつかの例では、単一のスレッドが、PIM動作を複数のPIMモジュール110、112にオフロードするための複数の命令をインターリーブし得る。このインターリーブは、メモリ並列性を改善し、PIM動作の待ち時間を隠すのに役立つことができる。コンパイラが、シーケンス内のPIMマッピングエラー及び分岐PIM動作を依然として検出しながら、この最適化を実装することを可能にするために、追加の検出機構が提供される。このような例では、PIM命令が特定のシーケンスの一部であることを示すために、追加の意味論的/構文的表現がPIMコードに含まれ得る。例えば、各PIM命令は、シーケンスラベルを含んでもよい。このサポートは、各PIM命令が、同じPIMモジュールをターゲットとする動作を関連付けるために使用されるシーケンスラベルを示すビットを指定することを可能にすることによって実装することができる。この特徴を示すために、本開示の実施形態による、シーケンス開始/終了セマンティクス及びシーケンスラベルセマンティクス(太字で示される)で変更されたPIMコードの例を考える。
for i=0;i<N;i+=3:
PIM_Ld_begin_seq(a[i]->pimR1,seq0)
PIM_Ld_begin_seq(a[i+N]->pimR1,seq1)
PIM_Add(pimR1+=b[i],seq0)
PIM_Add(pimR1+=b[i+N],seq1)
PIM_St(pimR1->c[i],seq0)
PIM_St(pimR1->c[i+N],seq1)
PIM_end_seq(seq0)
PIM_end_seq(seq1)
上記の例では、命令は、プロセッサコア102において実行され、ここで、seq0 aとラベル付けされた命令は、同じPIMモジュール(これは、例えば、PIMモジュールIDが抽出された後にPIMモジュール110であると判定され得る)にマッピングすることを要求され、seq1とラベル付けされた命令は、同じPIMモジュール(これは、例えば、PIMモジュールIDが抽出された後にPIMモジュール112であると判定され得る)にマッピングすることを要求される。
【0033】
これらの例では、PIMロード命令に関連付けられたシーケンス開始命令は、計算されたPIMモジュールIDをアクティブPIMモジュールとしてテーブルに記憶させるPIMシーケンスの開始を示す。このテーブルは、スレッドごとに複数のインデックス(各アクティブシーケンスラベルに1つ)を記憶し、シーケンス開始動作に関連付けられたシーケンスラベルは、テーブルにインデックスを付けるために使用される。後続のPIM命令では、後続のPIM命令のターゲットPIMモジュールIDが計算され、命令に関連付けられたシーケンスラベルに一致するテーブル内のエントリと比較される。PIMモジュールIDに不一致がある場合、上記で説明したようにエラーハンドリングアクションが取られる。
【0034】
更なる説明のために、
図2は、分岐検出デバイス150の例示的な実施形態を示す図である。PIM命令が復号された後に、分岐検出デバイス150は、プロセッサコア102、104によって発行されたPIM要求からPIM命令情報を抽出する。PIM ID抽出ユニット202は、PIM命令に関連付けられた解決されたターゲットメモリアドレス(又はページオフセット)からPIMモジュールIDを抽出する。シーケンス開始フラグが設定されている場合、書き込み信号がアサートされ、抽出されたPIMモジュールIDがアクティブPIMモジュールID記憶部204に書き込まれる。PIM命令が関連付けられたシーケンスラベルを有する場合、新しいテーブルエントリがシーケンスラベルに対して生じ、抽出されたPIMモジュールIDがエントリに書き込まれる。次いで、シーケンスラベルは、特定のシーケンスに関連付けられたアクティブPIMモジュールIDを識別するためにテーブルにインデックスを付けるために使用される。シーケンス開始でもシーケンス終了でもない後続の各命令のPIMモジュールIDも、PIM ID抽出ユニット202によって抽出され、アクティブPIMモジュールID記憶部204上で読み取り信号がアサートされる。記憶されたアクティブPIMモジュールIDは、比較器206に読み取られ、抽出されたPIMモジュールIDと比較される。PIM命令がシーケンスラベルを含む場合、シーケンスラベルは、アクティブPIMモジュールID記憶部204内のテーブルにインデックスを付けて、そのシーケンスラベルに対応するアクティブPIMモジュールIDを識別するために使用される。アクティブPIMモジュールID記憶部204に記憶されたアクティブPIMモジュールIDと、抽出されたPIMモジュールIDとが一致しない場合、実行ハザードを生じさせることがあるPIMマッピングエラーが発生している場合がある。
【0035】
いくつかの実施形態では、シーケンシングセマンティクスを用いてプロセッサコアのISAを変更する代わりに又はそれに加えて、既存のソフトウェア同期セマンティクスが活用され得る。例えば、PIMアーキテクチャは、メモリフェンス又は他の同期セマンティックを既に利用して、同じスレッドから同じPIMモジュールへのPIMコマンドの分離を実施し、メモリシステムにおけるそれらの再順序付けを防止してもよい。この場合、(フェンスによって分離されているという点で)同じモジュールにマッピングすることが意図されているPIMコマンドについての情報が、分岐PIMコマンド検出のために使用され得る。PIMフェンスは、同じPIMモジュールへのアクセス間でのみ使用されるので、上述した分岐検出デバイス150は、各PIM動作の抽出されたPIMモジュールIDに基づいて、フェンスの前の最後のPIM動作によってアクセスされたPIMモジュールが、フェンスの後の第1のPIM動作によってアクセスされたPIMモジュールと一致しない場合を検出するように変更され得る。いくつかの例では、フェンスの前の直近のPIM動作が(例えば、全てのPIM動作をシーケンス開始動作として扱うことによって)ラッチされ、各フェンスの後の第1のPIM動作をこのラッチされた値と比較することによってラッチされる。例えば、これは、次のPIM動作のためのシーケンスチェックをトリガするためにフェンス命令上にビットを設定することによって達成され得る。
【0036】
いくつかの実施形態では、プロセッサコアのISAを変更する代わりに又はそれに加えて、分岐PIM動作が推定され得る。いくつかの例では、1つ以上の先行するPIM動作とは異なるPIMモジュールを対象とするPIM動作に対して、エラーログエントリが生じる。いくつかの場合では、分岐検出デバイス150は、要求が同じPIMモジュールに対するものであるべきかどうかを推定し、ログ記録された情報を削減するために、その予想に違反する要求のみをログ記録する。例えば、分岐検出デバイス150は、閾値数の連続するPIM動作又はPIM動作タイプの共通パターンが同じPIMモジュールをターゲットとしたことを識別し(各新しいPIM動作の各PIMモジュールIDを先行するPIM動作のPIMモジュールIDと比較することによって)、同じPIMモジュールIDをターゲットとしない次のPIM動作を、実行ハザードを生じさせ得る潜在的な分岐PIM動作として記録してもよい。実際のフォールト時には、このログは、同じPIMモジュールにマッピングされていると予想された命令について検査され得る。
【0037】
図1に戻ると、例示的なシステム100では、(例えば、異なるコア102、104上の)異なるスレッドからの2つのPIM動作は、異なるPIMモジュールにマッピングすることが意図されているが、実際には同じPIMモジュールにマッピングすることが可能である。PIM動作分岐の以前のエラーケースと同様に、PIMモジュールレースコンディションのこのエラーケースは、マッピング関数が異なるアーキテクチャに対して変化し、コードをポーティングする場合にエラーを生じさせる場合に生じることがある。また、これらのエラーは、発見及びデバッグが困難である。新しいPIMソフトウェアをプログラミングし、テストし及びデバッグするプロセスを簡略化するために、このようなPIMモジュールレースコンディションを識別することが有益である。
【0038】
PIM対応ソフトウェアのプログラミング、テスト及びデバッグを容易にするために、
図1のシステム100は、レース検出デバイス152を含む。レース検出デバイス152は、オフロードされたPIM動作のスレッドインデックスビット又はコアインデックスビットからスレッド識別子(スレッドID)を抽出する。以下で説明するように、一組のPIM動作の抽出されたスレッドIDは、PIMモジュールにおける2つのスレッド間のレースコンディションを検出するために比較され、一組のPIMモジュール内の他のスレッドIDとは異なるPIMモジュールをターゲットとする特定のスレッドIDがアクセスする。PIM動作分岐とは異なり、複数のスレッドから発行されるレースの性質をもつPIM動作は、プロセッサコア102、104によって容易に検出することができない。そのため、いくつかの実施形態では、レース検出デバイス152は、PIMモジュール110、112内に実装される。他の実施形態では、レース検出デバイス152は、共有メモリシステム内の他の場所(例えば、メモリコントローラ106内)に実装され得る。例えば、メモリコントローラは、所定のPIMモジュール110、112へのアクセスのために、オフロードされたPIM動作間を調停する。
【0039】
すなわち、レース検出デバイス152は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較し、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定するように構成された論理回路を含む。具体的には、論理回路は、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較し、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合に、オフロードターゲットデバイスにおける実行ハザードを検出するように構成されている。
【0040】
更なる説明のために、上述したベクトル加算関数のマルチスレッドバージョンの以下の例を考える。
スレッド0
for i=0:(N/2):
PIM_Ld(a[i]->pimR1)
PIM_Add(pimR1+=b[i])
PIM_St(pimR1->c[i])
スレッド1
for i=(N/2+1):N:
PIM_Ld(a[i]->pimR1)
PIM_Add(pimR1+=b[i])
PIM_St(pimR1->c[i])
この例では、スレッド0及びスレッド1は、2つのスレッドが異なるPIMモジュールにマッピングするアレイパーティションにアクセスするという仮定の下で並行に実行される。しかしながら、仮定されたマッピングが正しくない(又は、より複雑なコードでは、アドレス計算が誤っている)場合、パーティションマッピングは、両方のスレッドが同じPIMモジュールのPIMレジスタpimR1に同時にアクセスするように重複し、c[]におけるデータ破損及び無効な値につながる。
【0041】
2つの競合するPIMアクセスがレースコンディションエラーを生じさせるかどうかを判定する1つの方法は、PIMアクセスの発行スレッド又はコアを比較することによる。多くの場合、レースの性質をもつ動作(すなわち、いかなる同期も介在することなく同じPIMモジュールにアクセスする異なるホストスレッドからの2つのPIM動作)は発生すべきではない。しかしながら、いくつかの場合では、複数のスレッドが同じPIMモジュールにアクセスすることが望ましい場合がある。このように、レースの性質をもつPIMアクセスがいつ行われるべきでないかをソフトウェアが指定できるようにすることが有益である。
【0042】
いくつかの実施形態では、レース検出デバイス152は、PIMアクセスレースが2つ以上のスレッド間で許可されない場合を判定するために、プログラマ/コンパイラ信号及び指標に依拠する。これらの実施形態では、発行スレッドインデックスビット、発行コアインデックスビット又はこれらのビットの何らかのサブセット(本明細書ではスレッドIDと称する)が、各PIM要求と共にメモリデバイス108に送信される。レースフリー間隔の間、特定のPIMモジュールは、PIM動作を1つのスレッド又はプロセッサコアにオフロードするためのPIMアクセスのみを提供すべきである。いくつかの例では、グローバルレースフリー開始信号(及び任意選択でレースフリー終了信号)は、PIMモジュール110、112の全て又はそのサブセットにおいてレース検出を有効化又は無効化するために使用され得る。これらの例では、これらの信号は、メモリマップされたアドレスへのアクセスを介して実装される。いくつかの例では、レース検出は、特別なメモリアクセスを介して各PIMモジュール110、112において個別に有効化又は無効化される。いくつかの例では、レース検出は、ターゲットPIMモジュールへのPIM動作(上記で説明した「シーケンス開始」及び「シーケンス終了」動作と同様の)を介して、各PIMモジュール110、112において個別に有効化又は無効化される。レース検出が最初に有効化される場合に、スレッドIDは、有効化信号の後の第1のPIM動作又はレース検出を有効化するPIM動作等のように、有効化信号に関連付けられたPIM動作から抽出される。スレッドIDは、PIMモジュールに対してローカルなレジスタにアクティブスレッドインデックスとして記憶される。後続のPIM動作(それ自体は有効化信号又は無効化信号を表さない)は、それらのスレッドIDを現在アクティブなスレッドインデックスと比較するために検査される。不一致がある場合に、不正なPIMレースコンディションが検出される。不正なレースコンディションの検出に応じて、エラーハンドリング動作が行われる。エラーハンドリング動作は、Nackメッセージを要求側プロセッサコアに送り返すこと、フォールトをトリガするワイヤを立ち上げること、又は、ホストによって照会され得るログにエラー情報を書き込むことを含み得る。異なるスレッドが異なる時点でPIMモジュールにアクセスすることを可能にするために、レースフリー終了信号又は新しいレースフリー開始信号がPIMモジュールに提供されなければならず、これは、同期点で自動的に挿入することができる。異なるスレッドがPIMモジュールの異なるレジスタに同時にアクセスすることを可能にするために、個別のスレッドIDを記憶し、PIM動作によってアクセスされる各レジスタに対してルックアップすることができる。
【0043】
様々な実施形態では、PIMモジュールID又はスレッドID等の識別子を比較することは、完全な識別子ではなく、PIMモジュールID又はスレッドID内のビットのサブセットを比較することを含み得る。そうすることにより、ハザード検出精度を犠牲にしてオーバーヘッドコストを削減することができる(誤判定の可能性がより高くなり得る)。コード機能性ではなくデバッグの目的のために、高精度は必要ではない場合があり、このトレードオフは多くのシステムにおいて望ましい場合がある。
【0044】
更なる説明のために、
図3は、レース検出デバイス152の例示的な実施形態を示す図である。スレッドID抽出ユニット302は、レース検出信号を検出すると、レース検出信号の後の第1のPIM動作又はレース検出信号と同時のPIM動作に関連付けられたスレッドIDを抽出する。抽出されたスレッドIDをアクティブスレッドインデックスとして記録するために、書き込み信号がアクティブスレッドID記憶部304においてアサートされる。レース検出開始又はレース検出終了信号/インジケータではない後続の各PIM動作のスレッドIDもPIM ID抽出ユニット202によって抽出され、読み取り信号がアクティブスレッドID記憶部304上でアサートされる。記憶されたアクティブスレッドインデックスは比較器306に読み取られ、そこで抽出されたスレッドIDと比較される。アクティブスレッドID記憶部304内の記憶されたアクティブスレッドIDと抽出されたスレッドIDとが一致しない場合には、実行ハザードを生じさせることがあるPIMマッピングエラーが発生している場合がある。
【0045】
いくつかの実施形態では、レース検出信号又はインジケータは、同じPIMモジュールへのレースの性質をもつアクセスが許可されるが、同じPIMレジスタへのレースの性質をもつアクセスが許可されないように、アクティブスレッドIDがPIMモジュール内の各PIMレジスタに対して記憶されるべきであることを示す。これらの実施形態では、アクティブスレッドインデックスは、モジュールごとではなくレジスタごとに追跡される。PIMレジスタをターゲットとする各PIM動作について、PIM動作に関連付けられたスレッドIDが、レース検出信号に応じてラッチされたそのPIMレジスタについてのアクティブスレッドインデックスと比較される。このような例では、アクティブスレッドID記憶部304は、PIMモジュール110、112内のレジスタファイル118内の複数のレジスタについてのアクティブスレッドインデックスを記憶する。
【0046】
いくつかの実施形態では、レース検出デバイス152は、複数のPIMモジュール110、112のアクティブスレッドを追跡する。例えば、レース検出デバイス152は、レース検出デバイス152が複数のPIMモジュール110、112へのPIMアクセスを監視するように、メモリデバイス108又はメモリコントローラ106に実装されてもよい。これらの実施形態では、アクティブスレッドID記憶部304はテーブルを含み、テーブルは、各エントリがPIMモジュールID及びそのPIMモジュールについてのアクティブスレッドインデックスを含む。
【0047】
いくつかの実施形態では、レース検出が有効化される場合に、レースの性質をもつ書き込みは許可されないが、レースの性質をもつ読み取りは許可される。この場合、PIMレジスタに書き込むPIM動作のみが、アクティブスレッドインデックスと比較される。それにより、レース検出デバイス152は、単一のアクティブライタとレースの性質をもつ同時リーダとの間のレースにはとらわれないままであることになる。
【0048】
更なる説明のために、
図4は、本開示による、オフロードされた動作における実行ハザードを検出するための例示的なシステム200のブロック図を示している。例示的なシステム200は、
図1のシステム100の代替構成を示す。例示的なシステム200では、分岐検出デバイス150が2つ以上のコア102、104によって共有される分岐検出デバイス150の代替構成が示されている。このような構成では、分岐検出デバイス150は、2つ以上のスレッドのアクティブPIMモジュールIDを追跡する。それにより、分岐検出デバイス150は、シーケンス内の第1のPIM動作に関連付けられたスレッドID(例えば、コアインデックス又はスレッドインデックス)を識別し、アクティブPIMモジュールIDと共にスレッド識別子を記憶する。シーケンス内の後続の命令のスレッド識別子も識別され、比較のために対応するアクティブPIMモジュールIDにインデックスを付けるために使用される。シーケンスラベルが使用される場合、スレッド識別子は、シーケンスラベル及び対応するアクティブPIMモジュールIDにインデックスを付けるために使用される。
【0049】
例示的なシステム200では、レース検出デバイス152がメモリコントローラ106内に実装されている、レース検出デバイス152の代替構成が示されている。このような構成では、レース検出デバイス152は、2つ以上のPIMモジュールのアクティブスレッドIDを追跡しなければならない。それにより、分岐検出デバイス150は、PIM動作によってターゲットにされたPIMモジュールIDを識別し、PIMモジュールIDを使用して、そのPIMモジュールのアクティブスレッドIDにインデックスを付ける。
【0050】
更なる説明のために、
図5は、本開示の実施形態による、オフロードされた動作における実行ハザードを検出するための例示的な方法を示すフローチャートである。
図4の実施例は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502を含む。いくつかの例では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502は、オフロードターゲットデバイス識別子、発行スレッドインデックス、発行コアインデックス、ターゲットメモリアドレス若しくはレジスタを含むオペランド、及び/又は、コンパイラ表記若しくは宣言(例えば、命令ラベル若しくはフラグ)等のような、オフロード動作の特性を比較することを含む。一例では、オフロード動作は、PIMデバイス上で実行するためのPIM動作であり、オフロード動作のためのオフロード要求は、プロセッサコア上で実行されるオフロード命令から生成され、PIMモジュールは、プロセッサコアの外部のメモリ内又はメモリの近くに実装されている。
【0051】
また、
図5の方法は、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504を含む。いくつかの例では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504は、オフロード動作の特性の比較から、オフロード命令によってターゲットにされるオフロードデバイスにおける分岐を識別することを含む。例えば、特定のオフロードデバイスをターゲットとするプロセッサコア内のオフロード命令のシーケンスは、明示的又は暗黙的なパターンを表し、その結果、異なるオフロードデバイスをターゲットとするオフロード命令は、マッピングエラーを示すか又はそうでなければ意図されたオフロードデバイス若しくは意図されていないオフロードデバイスにおける実行ハザードにつながり得るパターンからの逸脱を示し得る。別の例では、異なるスレッド/コアからオフロードデバイスにおいて受信されたオフロード命令は、マッピングエラーを示すか又はそうでなければオフロードデバイス上の実行ハザードにつながり得るレースコンディションを示し得る。このようなマッピングエラー又は実行ハザードは、1つ以上の前のオフロード動作に対するインスタントオフロード動作の特性の比較から検出され、特性は、オフロードターゲットデバイス識別子、発行スレッドインデックス、発行コアインデックス、ターゲットメモリアドレス若しくはレジスタを含むオペランド、及び/又は、コンパイラ表記若しくは宣言(例えば、命令ラベル若しくはフラグ)を含み得る。上記の例を続けると、オフロードデバイスは、上記で説明したように、プロセッサコアの外部のメモリ内又はメモリの近くに実装されるPIMモジュールであり得る。いくつかの例では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504は、オフロード動作をオフロードターゲットデバイスにオフロードする前にランタイム時に行われる。この場合、実行ハザードが検出される場合、PIM動作はPIMモジュールに提供されない。
【0052】
いくつかの実施形態では、ソフトウェアは、何れの動作が依存し、ハザードチェックを必要とするかを明示的に通信し得る(例えば、コンパイラパスは、依存関係を有する動作又は独立であるべき動作を推定することができる)。代替的に、ハードウェアは、観測されたパターンに基づいて、ハザードチェックをいつ行うべきかを推定し得る。例えば、スレッドが同じ3つの動作を繰り返し発行し、各一組の3つの動作内の全ての動作が同じオフロードターゲットデバイスにマッピングされる場合、ハザード検出は、後続の一組の3つの動作内のオフロード動作のうち何れかがその一組内の他の2つとは異なるオフロードターゲットデバイスにマッピングされる場合にトリガされてもよい。これは、プログラマの意図が明示的に指定されていないので、ハザードを正確に識別しないことがある(例えば、違反動作が異なるターゲットデバイスにマッピングするように意図されている可能性がある)が、これらの時間に警告をログ記録することは、プログラム可能性及びデバッグに役立つ。
【0053】
更なる説明のために、
図6は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図5の方法と同様に、
図6の方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504と、を含む。また、
図6の方法は、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせると判定することに応じて、エラーハンドリングアクションを開始(始動)すること602を含む。いくつかの実施例では、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせると判定することに応じてエラーハンドリングアクションを開始(始動)すること602は、エラーメッセージ若しくはNackを送信すること、フォールトをトリガすること、フォールトを強制すること、又は、エラーログ内にエントリを生じさせることによって実行される。
【0054】
更なる説明のために、
図7は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図5の方法と同様に、
図7の方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504と、を含む。
【0055】
図7の方法では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502は、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較すること702を含む。いくつかの例では、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較すること702は、第2のオフロード動作を記述するデータから第2のオフロードターゲットデバイス識別子を抽出し、第1のオフロード動作を記述するデータから第1のオフロードターゲットデバイス識別子を抽出することによって実行される。いくつかの例では、第1のオフロード動作は、第2のオフロード動作が第1のオフロード動作と同じオフロードターゲットデバイスにマッピングすることが予想されるという点で、基準動作であり得る。いくつかの実施形態では、第1のオフロード動作及び第2のオフロード動作は、PIMモジュールをターゲットとするPIM動作である。これらの実施形態では、PIMモジュールIDは、アーキテクチャマッピングテーブルを使用して、解決されたターゲットメモリアドレス内のビットのサブセットから、又は、ページオフセットから抽出される。
【0056】
図7の方法では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504は、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に、オフロードターゲットデバイスにおける実行ハザードを検出すること704を含む。いくつかの例では、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出すること704は、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子が一致しないという識別から、オフロードターゲットデバイスマッピングエラーが発生したと判定することによって実行される。第2のオフロード動作及び第1のオフロード動作が同じオフロードターゲットデバイスにマッピングすべきであると仮定される場合、検出されたオフロードターゲットデバイスマッピングエラーは、意図されたオフロードターゲットデバイス、意図されていないオフロードターゲットデバイス、又は、その両方に対する実行ハザードを提示する。いくつかの実施形態では、第1のオフロードターゲットデバイス識別子は、第2のオフロード動作がこの識別子にマッピングされることが予想されるという点で、基準識別子である。
【0057】
いくつかの実施形態では、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較すること(702)、及び、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出すること(704)は、
図1を参照して記載した分岐検出デバイス150によって実行され、
図1では、分岐検出デバイス150は、プロセッサコア102及び/又はプロセッサコア104に実装されている。いくつかの例では、
図4に示すように、分岐検出デバイス150は、複数のプロセッサコア102、104によって共有され得る。これらの例では、分岐検出デバイス150は、複数のコアによって発行されたオフロード動作と、それらの動作によってターゲットにされたオフロードデバイスと、を区別する。このような例では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502は、第2のオフロード動作に関連付けられた第2のスレッド識別子と、第1のオフロード動作に関連付けられた第1のスレッド識別子と、を識別することを更に含む。
【0058】
更なる説明のために、
図8は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図7の方法と同様に、
図8の方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502であって、第2のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子を第1のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子と比較すること702を含む、こと502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504であって、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出すること704を含む、こと504と、を含む。
【0059】
また、
図8の方法は、第1のオフロード動作がオフロード動作のシーケンスを開始するという指標に応じて、第1のオフロードターゲットデバイス識別子を記憶すること802を含む。いくつかの実施形態では、第1のオフロード動作がオフロード動作のシーケンスを開始するという指標に応じて第1のオフロードターゲットデバイス識別子を記憶すること802は、
図1、
図2又は
図4に示す分岐検出デバイス150によって実行される。いくつかの例では、第1のオフロード動作がオフロード動作のシーケンスを開始するという指標に応じて第1のオフロードターゲットデバイス識別子を記憶すること802は、オフロード動作のシーケンスにおける最初のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子をラッチすることを含む。例えば、第1のオフロードターゲットデバイス識別子は、シーケンス開始フラグを含む第1のオフロード動作に応じて又はシーケンス開始命令の直後にラッチされる。これらの例では、第1のオフロードターゲットデバイス識別子は、
図3を参照して記載したアクティブPIMモジュールID記憶部204等の記憶部にラッチされる。例えば、第1のオフロードターゲットデバイス識別子は、PIM動作のシーケンスの開始を検出したことに応じて抽出され、ラッチされる。この例では、第2のオフロード動作の第2のオフロードターゲットデバイス識別子を含む、後続の各PIM動作のオフロードターゲットデバイス識別子は、シーケンスの終わりに遭遇するか又は新しいシーケンスが検出されるまで、ラッチされた第1のオフロードターゲットデバイス識別子と比較される。PIM動作のシーケンスは、上記で説明したように、特別な命令、フラグビット、プログラム指示、又は、予約されたターゲットアドレスへのアクセスから検出され得る。例えば、シーケンス開始命令及びシーケンス終了命令が、同じPIMモジュールにマッピングすべきであるPIM動作のシーケンスの境界をマーク付けするために使用されてもよい。シーケンス開始命令(例えば、シーケンス開始命令に関連付けられたPIM動作、又は、PIM動作のために設定されたフラグビットによって若しくはシーケンス開始命令の直後に続くことによって識別されるPIM動作)を検出することに応じて、PIM動作に関連付けられたPIMモジュールIDは、将来の参照のためにラッチされる。
【0060】
いくつかの例では、各オフロード動作は、オフロードターゲットデバイス識別子が全てのオフロード動作からラッチされるという点で、シーケンス開始動作として扱われる。フェンス等の同期プリミティブと共に使用される場合、フェンスの直後にラッチされるオフロードターゲットデバイス識別子は、フェンスの直前にラッチされるオフロードターゲットデバイス識別子と比較され得る。例えば、フェンスの直後のPIM動作は、実行ハザードを検出するか又は潜在的なメモリマッピングエラーを識別する目的で、フェンスの直前のPIM動作と比較されてもよい。
【0061】
更なる説明のために、
図9は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図8の方法と同様に、
図9の方法は、第1のオフロード動作がオフロード動作のシーケンスを開始するという指標に応じて第1のオフロードターゲットデバイス識別子を記憶すること802と、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502であって、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較すること702を含む、こと502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイスに実行ハザードを生じさせるかどうかを判定すること504であって、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出すること704を含む、こと504と、を含む。
【0062】
図9の方法では、第1のオフロード動作がオフロード動作のシーケンスを開始するという指標に応じて、第1のオフロードターゲットデバイス識別子を記憶すること802は、第1のオフロード動作のシーケンスラベルを記憶すること902を含む。いくつかの実施形態では、第1のオフロード動作のためのシーケンスラベルを記憶すること902は、
図1、
図2又は
図4に示す分岐検出デバイス150によって実行される。いくつかの例では、第1のオフロード動作のためのシーケンスラベルを記憶すること902は、第1のオフロード動作に関連付けられた情報からの情報からシーケンスラベルを読み取ることを含む。例えば、第1のオフロード動作は、シーケンスラベルを含むシーケンス開始命令に関連付けられてもよい。また、第1のオフロード動作のためのシーケンスラベルを記憶すること902は、後続の動作のシーケンスラベルがそれらの動作に関連付けられた情報から識別されるべきであることを示すためにフラグを設定することを含み得る。いくつかの例では、オフロード動作はPIM動作であり、オフロードターゲットデバイスはPIMモジュールである。これらの例では、シーケンス開始命令に関連付けられたPIM動作のシーケンスラベル及び対応するアクティブPIMモジュールIDは、
図2を参照して記載したように、分岐検出モジュールのアクティブPIMモジュールID記憶部204内のテーブルに記憶される。
【0063】
図9の方法では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502は、第2のオフロード動作のシーケンスラベルを識別すること904を更に含む。いくつかの実施形態では、第2のオフロード動作のシーケンスラベルを識別すること904は、
図1、
図2又は
図4に示す分岐検出デバイス150によって実行される。いくつかの例では、第2のオフロード動作のためのシーケンスラベルを識別すること904は、第2のオフロード動作に関連付けられた情報からの情報からシーケンスラベルを読み取ることを含む。例えば、第2のオフロード動作は、シーケンス開始命令に関連付けられた第1のオフロード動作に続く動作であってもよい。このような例では、第2のオフロード動作のシーケンスラベルは、フラグがオフロード動作のシーケンスラベルをチェックするために設定されていることを識別することに応じて読み取られ得る。
【0064】
図9の方法では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502は、第2のオフロード動作のシーケンスラベルに基づいて第1のオフロードターゲットデバイス識別子を識別すること906を更に含む。いくつかの実施形態では、第2のオフロード動作のシーケンスラベルに基づいて第1のオフロードターゲットデバイス識別子を識別すること906は、
図1、
図2又は
図4に示す分岐検出デバイス150によって実行される。いくつかの例では、第2のオフロード動作のシーケンスラベルは、対応するアクティブオフロードターゲットデバイス識別子のためのエントリを含むテーブルにインデックスを付けるために使用される。いくつかの例では、オフロード動作はPIM動作であり、オフロードターゲットデバイスはPIMモジュールである。これらの例では、第2のオフロード動作に関連付けられたPIM動作のシーケンスラベルは、
図2を参照して記載したように、分岐検出モジュールのアクティブPIMモジュールID記憶部204に記憶されたアクティブPIMモジュールIDのテーブルからターゲットデバイス識別子を識別し、オフロードするために使用される。
【0065】
更なる説明のために、
図10は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図7の方法と同様に、
図10の方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502であって、第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較すること702を含む、こと502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504であって、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子とが一致しない場合に実行ハザードを検出すること704を含む、こと504と、を含む。
【0066】
また、
図10の方法は、第1のオフロードターゲットデバイス識別子を有するシーケンシャルオフロード命令のパターンを識別すること1002を含む。いくつかの実施形態では、異なるオフロードターゲットデバイスへのアクセスが、実行ハザードが存在し得るように分岐しているとみなされる前に、同じオフロードターゲットデバイスへの連続アクセスの閾値数が必要とされる。いくつかの例では、第1のオフロードターゲットデバイス識別子を有するシーケンシャルオフロード命令のパターンを識別すること1002は、オフロード動作エンカウンタごとにオフロードターゲットデバイス識別子を抽出することと、それを直前のオフロードターゲットデバイス識別子と比較することと、を含む。後続のオフロードターゲットデバイス識別子が第1のオフロードターゲットデバイス識別子と一致するインスタンスごとに、カウンタが増分される。カウンタが、一致するオフロードターゲットデバイス識別子のインスタンスの閾値数に達する場合、閾値が満たされたことを示すためにフラグが設定される。フラグが設定されている間、第1のオフロードターゲットデバイス識別子と第2のオフロードターゲットデバイス識別子との間の不一致は、第2のオフロード動作が、誤ったオフロードターゲットデバイスに潜在的にマッピングされる分岐オフロード動作であることを示し得る。この場合、潜在的な実行ハザードは、デバッグに使用するためにエラーログにログ記録され得る。
【0067】
更なる説明のために、
図11は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図5の方法と同様に、
図11の方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504と、を含む。
【0068】
図11の方法では、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502は、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較すること1102を含む。いくつかの実施形態では、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することは、
図1、
図3及び
図4を参照しながら記載したレース検出デバイス152によって実行される。いくつかの例では、第2のオフロード動作に関連付けられた第2のスレッド識別子を、第1のオフロード動作に関連付けられた第1のスレッド識別子と比較すること1102は、第2のオフロード動作及び第1のオフロード動作に関連付けられたスレッドインデックス又はコアインデックスを識別することと、スレッドインデックス又はコアインデックスを、それぞれ第2のオフロード動作及び第1のオフロード動作のためのスレッド識別子として使用することと、を含む。いくつかの例では、スレッドインデックス又はコアインデックスは、プロセッサコア102、104から受信される第2のオフロード動作及び第1のオフロード動作についての情報に含まれる。いくつかの実施形態では、第2のオフロード動作及び第1のオフロード動作は、PIMモジュール110、112にオフロードされたPIM動作である。
【0069】
図11の方法では、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定すること504は、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合に、オフロードターゲットデバイスにおいて実行ハザードを検出すること1104を含む。いくつかの実施形態では、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合にオフロードターゲットデバイスにおける実行ハザードを検出すること1104は、
図1、
図3及び
図4を参照しながら記載したレース検出デバイス152によって実行される。いくつかの例では、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合にオフロードターゲットデバイスにおける実行ハザードを検出すること1104は、2つのプロセッサコア(例えば、プロセッサコア102、104)がオフロードターゲットデバイス(例えば、PIMモジュール110)へのアクセスのためのレースコンディションを生じさせたと判定することを含む。これらの例では、レースコンディションは、第2のオフロード動作のスレッド識別子が第1のオフロード動作のスレッド識別子と一致しないという判定に基づいて検出される。例えば、第2のオフロード動作及び第1のオフロード動作は、PIM動作であってもよい。レースコンディションによって生じた実行ハザードが検出されると、オフロードターゲットデバイスは、Nack又はエラーメッセージをプロセッサコアに送信し、及び/又は、フォールトをトリガし得る。
【0070】
更なる説明のために、
図12は、本開示による、オフロードされた動作における実行ハザードを検出する別の例示的な方法を示すフローチャートである。
図11の方法と同様に、
図12の方法は、第2のオフロード動作を、第2のオフロード動作に先行する第1のオフロード動作と比較すること502であって、第2のオフロード動作に関連付けられた第2のスレッド識別子を第1のオフロード動作に関連付けられた第1のスレッド識別子と比較すること1102を含む、こと502と、第2のオフロード動作と第1のオフロード動作との比較に基づいて、第2のオフロード動作がオフロードターゲットデバイス上に実行ハザードを生じさせるかどうかを判定すること504であって、第1のスレッド識別子と第2のスレッド識別子とが一致しない場合にオフロードターゲットデバイスにおける実行ハザードを検出すること1104を含む、こと504と、を含む。
【0071】
また、
図12の方法は、レース検出がオフロードターゲットデバイス上で有効化されていることを識別すること1202を含む。いくつかの実施形態では、レース検出がオフロードターゲットデバイス上で有効化されていることを識別すること1202は、
図1、
図3及び
図4を参照しながら記載したレース検出デバイス152によって実行される。いくつかの例では、レース検出がオフロードターゲットデバイス上で有効化されていることを識別すること1202は、レース検出信号を検出することによって実行される。レース検出信号は、1つ以上のオフロードターゲットデバイス上でのレース検出を有効化又は無効化するために使用され得る。いくつかの例では、レース検出がオフロードターゲットデバイス上で有効化されていることを識別すること1202は、オフロードターゲットデバイス上でのレース検出を有効化又は無効化するオフロード動作を識別することによって実行される。いくつかの例では、レース検出がオフロードターゲットデバイス上で有効化されていることを識別すること1202は、オフロードターゲットデバイス上の予約されたターゲットメモリアドレスへのアクセスを識別することによって実行される。レース検出が有効化されている間、レースコンディションは、同じスレッド識別子に起因するオフロード動作のみが実行を許可されるべきであるという点で、オフロードターゲットデバイス上で許可されない。
【0072】
いくつかの実施形態では、レース検出がオフロードターゲットデバイス上で有効化されていることを識別すること1202は、レース検出インジケータに関連付けられている第1のオフロード動作のための第1のスレッド識別子を記憶すること1204を含む。例えば、レース検出インジケータは、レース検出信号、オフロード動作を有効化するレース検出、又は、上記で説明したような予約されたターゲットメモリアドレスへのアクセスであってもよい。いくつかの例では、第1のオフロード動作は、レース検出インジケータがレース検出を有効化した後の最初のオフロード動作であるという点で、第1のオフロード動作は、レース検出インジケータに関連付けられる。いくつかの例では、オフロード動作自体が、レース検出を有効化するレース検出インジケータを含み得る。そのレース検出を識別すると、いくつかの例では、第1のオフロード動作に関連付けられたスレッド識別子がラッチされる。例えば、第1のオフロード動作はPIM動作であってもよく、オフロードターゲットデバイスはPIMモジュール110、112であってもよい。この例では、レース検出インジケータに関連付けられている第1のオフロード動作のための第1のスレッド識別子を記憶すること1204は、オフロード動作を発行したプロセッサコア102、104に関連付けられたスレッド識別子を、
図3を参照して記載したアクティブスレッドID記憶部304に記憶することによって実行され得る。
【0073】
図中のフローチャート及びブロック図は、本開示の様々な実施形態によるシステム、方法及び論理回路の可能な実施形態のアーキテクチャ、機能及び動作を示す。これに関して、フロー図又はブロック図の各ブロックは、指定された論理機能を実装するための1つ以上の実行可能命令を含む、命令のモジュール、セグメント又は部分を表すことができる。いくつかの代替的な実施形態では、ブロックに記載されている機能は、図に記載された順序から外れて発生する場合がある。例えば、連続して示される2つのブロックは、実際には実質的に同時に実行され得るか、又は、ブロックは、関与する機能に応じて、逆の順序で実行され得る。ブロック図及び/又はフロー図の各ブロック、並びに、ブロック図及び/又はフロー図におけるブロックの組み合わせは、指定された機能若しくは行為を実行するか、又は、専用ハードウェアとコンピュータ命令との組み合わせを行う、専用ハードウェアベースのシステムによって実装することができることにも留意されたい。
【0074】
本開示は、その実施形態を参照して具体的に示され、説明されてきたが、以下の特許請求の範囲の趣旨及び範囲から逸脱することなく、形態及び詳細で様々な変更が行われ得ることを理解されたい。したがって、本明細書に記載された実施形態は、説明のためのものに過ぎず、本発明を限定するものではない。本開示は、詳細な説明ではなく添付の特許請求の範囲によって定義され、その範囲内の全ての差異は、本発明に含まれると解釈されるべきである。
【手続補正書】
【提出日】2023-11-27
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
オフロードされた動作における実行ハザードを検出するための装置であって、
論理回路を備え、
前記論理回路は、
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することと、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することと、
を行うように構成されている、
装置。
【請求項2】
前記論理回路は、前記第2のオフロード動作が前記オフロードターゲットデバイス上で前記実行ハザードを生じさせると判定したことに応じて、エラーハンドリングアクションを開始するように構成されている、
請求項
1の装置。
【請求項3】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、前記第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のオフロードターゲットデバイス識別子と前記第2のオフロードターゲットデバイス識別子とが一致しない場合に前記実行ハザードを検出することを含む、
請求項
1の装置。
【請求項4】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のスレッド識別子を、前記第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のスレッド識別子と前記第2のスレッド識別子とが一致しない場合に、前記オフロードターゲットデバイスにおいて前記実行ハザードを検出することを含む、
請求項
1の装置。
【請求項5】
オフロードされた動作における実行ハザードを検出するためのシステムであって、
2つ以上のプロセッサコアと、
2つ以上のプロセッシングインメモリ(PIM)モジュールと、
論理回路と、を備え、
前記論理回路は、
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することと、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することと、
を行うように構成されている、
システム。
【請求項6】
前記論理回路は、前記第2のオフロード動作が前記オフロードターゲットデバイス上で前記実行ハザードを生じさせると判定したことに応じて、エラーハンドリングアクションを開始するように構成されている、
請求項
5のシステム。
【請求項7】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のオフロードターゲットデバイス識別子を、前記第1のオフロード動作に関連付けられた第1のオフロードターゲットデバイス識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のオフロードターゲットデバイス識別子と前記第2のオフロードターゲットデバイス識別子とが一致しない場合に前記実行ハザードを検出することを含む、
請求項
5のシステム。
【請求項8】
第2のオフロード動作を、前記第2のオフロード動作に先行する第1のオフロード動作と比較することは、前記第2のオフロード動作に関連付けられた第2のスレッド識別子を、前記第1のオフロード動作に関連付けられた第1のスレッド識別子と比較することを含み、
前記第2のオフロード動作と前記第1のオフロード動作との比較に基づいて、前記第2のオフロード動作がオフロードターゲットデバイス上で実行ハザードを生じさせるかどうかを判定することは、前記第1のスレッド識別子と前記第2のスレッド識別子とが一致しない場合に、前記オフロードターゲットデバイスにおいて前記実行ハザードを検出することを含む、
請求項
5のシステム。
【国際調査報告】