IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

<>
  • 特許-同期するハードウェアイベント収集 図1
  • 特許-同期するハードウェアイベント収集 図2
  • 特許-同期するハードウェアイベント収集 図3
  • 特許-同期するハードウェアイベント収集 図4
  • 特許-同期するハードウェアイベント収集 図5
  • 特許-同期するハードウェアイベント収集 図6
  • 特許-同期するハードウェアイベント収集 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-16
(45)【発行日】2022-12-26
(54)【発明の名称】同期するハードウェアイベント収集
(51)【国際特許分類】
   G06F 11/34 20060101AFI20221219BHJP
   G06F 9/38 20060101ALI20221219BHJP
   G06F 11/30 20060101ALI20221219BHJP
【FI】
G06F11/34 176
G06F9/38 380C
G06F9/38 370B
G06F11/34 180
G06F11/30 172
G06F11/30 140A
【請求項の数】 24
(21)【出願番号】P 2019540323
(86)(22)【出願日】2017-10-20
(65)【公表番号】
(43)【公表日】2020-04-23
(86)【国際出願番号】 US2017057638
(87)【国際公開番号】W WO2018182783
(87)【国際公開日】2018-10-04
【審査請求日】2020-04-08
(31)【優先権主張番号】15/472,932
(32)【優先日】2017-03-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ノリー,トーマス
(72)【発明者】
【氏名】クマー,ナビーン
【審査官】金田 孝之
(56)【参考文献】
【文献】特開2005-165825(JP,A)
【文献】特開平05-128079(JP,A)
【文献】特開2016-045893(JP,A)
【文献】特開2000-348007(JP,A)
【文献】米国特許出願公開第2012/0226837(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/28-11/36
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
1つ以上のハードウェア回路コンポーネントを有するイベント収集システムが実行する、コンピュータにより実現される方法であって、前記方法は、
前記イベント収集システムにおける第1のマルチコアニューラルネットワークプロセッサによるプログラムコードの実行を監視するステップを含み、前記第1のマルチコアニューラルネットワークプロセッサは、前記プログラムコードの第1の部分を実行することにより多層ニューラルネットワークの推論作業負荷のための計算を実行するように構成され、前記多層ニューラルネットワークはハードウェア回路上に実現され、前記方法はさらに、
前記イベント収集システムにおける第2のマルチコアニューラルネットワークプロセッサによる前記プログラムコードの実行を監視するステップを含み、前記第2のマルチコアニューラルネットワークプロセッサは、前記プログラムコードの第2の部分を実行することにより前記多層ニューラルネットワークの前記推論作業負荷のための前記計算を実行するように構成され、前記方法はさらに、
前記イベント収集システムが、前記プログラムコードの前記第1の部分または前記プログラムコードの前記第2の部分におけるオペランドの発生を識別することにより、トリガー条件が満たされていることを検出するステップを含み、前記プログラムコードの各部分は、前記推論作業負荷の計算ステップを表す複数のコードシーケンスを含み、前記オペランドは、同期されたトレースイベントを始動するために前記複数のコードシーケンスのうちの特定のコードシーケンスを示す第1のパラメータ値を含み、前記方法はさらに、
前記トリガー条件が満たされていることを検出するステップに応答して、前記イベント収集システムが、前記推論作業負荷の特定の計算ステップ中に発生する第1の同期されたトレースイベントを始動することにより、トレースデータを生成するステップを含み、前記トレースデータは、前記イベント収集システムの分散ハードウェア回路コンポーネントにわたって生じるそれぞれのハードウェアイベントを識別し、前記それぞれのハードウェアイベントの各々について、前記トレースデータはハードウェアイベントタイムスタンプを含み、前記方法はさらに、
前記イベント収集システムが前記トレースデータを使用して、前記推論作業負荷の前記特定の計算ステップに基づいて前記トレースデータを相関させるデータ構造を生成するステップと、
前記推論作業負荷の前記特定の計算ステップに基づいて相関させた前記トレースデータを含む前記データ構造を、ホストコントローラに、前記イベント収集システムのホストインターフェイスブロックを使用して、送信するステップと、
前記ホストコントローラが、前記ホストインターフェイスブロックを使用して受信した前記データ構造における前記トレースデータによって識別された前記それぞれのハードウェアイベントに基づいて、1つ以上の性能属性を求めるステップと、
前記ホストコントローラが、前記1つ以上の性能属性を使用することにより、前記特定の計算ステップが前記第1のマルチコアニューラルネットワークプロセッサおよび前記第2のマルチコアニューラルネットワークプロセッサにおいて異なるそれぞれの時間に実行された場合に前記第1のマルチコアニューラルネットワークプロセッサおよび前記第2のマルチコアニューラルネットワークプロセッサによる前記プログラムコードの性能を分析するステップとを含む、方法。
【請求項2】
前記第1の同期されたトレースイベントは、それぞれのハードウェアイベントのための一意的なトレース識別子を示すトレースデータを生成し、前記ハードウェアイベントは複数の同期されたハードウェアイベントを含み、2つのハードウェアイベントは、前記イベントが前記推論作業負荷の同一の計算ステップに関連付けられる場合、同期される、請求項1に記載の方法。
【請求項3】
前記トリガー条件が満たされていることを検出するステップは、
前記イベント収集システムが、
i)前記オペランドの前記第1のパラメータ値がレジスタの第1の限界値を上回ること、または、
ii)前記イベント収集システムのクロックによって示される現在の時間がレジスタの第1の限界値を上回ること、のうちの1つを検出するステップと、
前記トリガー条件が満たされていることを検出するステップに応答して、前記イベント収集システムが、トレースデータを生成する第2の同期されたトレースイベントを始動するステップとを含み、前記トレースデータは、前記イベント収集システムにわたって生じる前記それぞれのハードウェアイベント間で共有される少なくとも1つの属性を識別する、請求項1に記載の方法。
【請求項4】
前記イベント収集システムが、
前記オペランドの第2のパラメータ値が前記レジスタの第2の限界値を上回ること、または、
前記イベント収集システムの前記クロックによって示される前記現在の時間が前記レジスタの第2の限界値を上回ること、のうちの1つを検出するステップと、
検出するステップに応答して、前記イベント収集システムが、前記オペランドの前記第2のパラメータ値が前記第2の限界値を上回る場合、または第2の予め定義された時間値が前記第2の限界値を上回る場合に、前記第2の同期されたトレースイベントを停止するステップとをさらに含む、請求項3に記載の方法。
【請求項5】
前記オペランドはさらに、前記イベント収集システムの特定の性能状態を示すグローバル制御パラメータを含み、
前記レジスタの前記第1の限界値は、
前記イベント収集システムのグローバルタイムクロックによって示される予め定義された時間値、または、
前記グローバルタイムクロックに関連付けられた予め定義された時間ウィンドウの特定の時間値、のうちの少なくとも1つを含む、請求項3に記載の方法。
【請求項6】
前記オペランドは第1の2進データ構造を有し、前記オペランドの前記第1のパラメータ値はトレースマークに対応しており、
前記レジスタの前記第1の限界値は第2の2進データ構造を有し、前記現在の時間はグローバルタイムクロックによって示され、
前記グローバルタイムクロックは、1つ以上のハードウェアイベントタイムスタンプを生成するために前記イベント収集システムによって使用される、請求項3に記載の方法。
【請求項7】
前記イベント収集システムのコンパイラが、前記トリガー条件の前記オペランドを、前記第1のマルチコアニューラルネットワークプロセッサによって実行されるプログラムコードの前記第1の部分に挿入するステップと、
前記イベント収集システムの前記コンパイラが、前記トリガー条件の予め定義された時間値を、前記第2のマルチコアニューラルネットワークプロセッサによって実行されるプログラムコードの前記第2の部分に挿入するステップとをさらに含む、請求項3に記載の方法。
【請求項8】
前記第1の同期されたトレースイベントまたは前記第2の同期されたトレースイベントのうちの少なくとも1つを始動するステップは、
前記イベント収集システムが、前記第1のマルチコアニューラルネットワークプロセッサの第1のカウントレジスタによって受信される第1の制御信号を生成するステップを含み、前記第1の制御信号は、第1のハードウェアイベントのためのデータを前記第1のカウントレジスタに格納させ、さらに、
前記イベント収集システムが、前記第2のマルチコアニューラルネットワークプロセッサの第2のカウントレジスタによって受信される第2の制御信号を生成するステップを含み、前記第2の制御信号は、第2のハードウェアイベントのためのデータを前記第2のカウントレジスタに格納させる、請求項3に記載の方法。
【請求項9】
前記第1のハードウェアイベントまたは前記第2のハードウェアイベントのうちの1つのための前記データは、
前記イベント収集システムの特定のマルチコアニューラルネットワークプロセッサの特定のメモリバッファに書込まれたバイトの数、または、
前記イベント収集システムの特定のマルチコアニューラルネットワークプロセッサによって実行された命令の数、のうちの少なくとも1つを含む、請求項8に記載の方法。
【請求項10】
前記イベント収集システムが、前記第1または第2のマルチコアニューラルネットワークプロセッサによって実行される前記プログラムコードの前記部分における第2のオペランドの発生を識別するステップをさらに含み、前記第2のオペランドは第2のパラメータ値を含み、さらに、
前記イベント収集システムが、前記第2のオペランドの前記第2のパラメータ値がレジスタの特定の限界値を上回ること、または前記レジスタの特定の限界値を下回ることに、基づいて、フィルター条件が満たされていると判定するステップと、
前記フィルター条件が満たされていると判定するステップに応答して、前記イベント収集システムが1つ以上のトレースイベントをフィルタリングするステップとを含み、前記1つ以上のトレースイベントをフィルタリングするステップは、1つ以上のハードウェアイベントのためのトレースデータの格納を除外するステップを含む、請求項1に記載の方法。
【請求項11】
ハードウェアイベント収集システムであって、
1つ以上のプロセッサコアを含む1つ以上のプロセッサコンポーネントと、
命令を格納する1つ以上のマシン読取可能記憶ユニットとを含み、前記命令は、前記1つ以上のプロセッサコンポーネントによって実行されることにより動作を行わせることが可能であり、前記動作は、
前記イベント収集システムにおける第1のマルチコアニューラルネットワークプロセッサによるプログラムコードの実行を監視することを含み、前記第1のマルチコアニューラルネットワークプロセッサは、前記プログラムコードの第1の部分を実行することにより多層ニューラルネットワークの推論作業負荷のための計算を実行するように構成され、前記多層ニューラルネットワークはハードウェア回路上に実現され、前記動作はさらに、
前記イベント収集システムにおける第2のマルチコアニューラルネットワークプロセッサによる前記プログラムコードの実行を監視することを含み、前記第2のマルチコアニューラルネットワークプロセッサは、前記プログラムコードの第2の部分を実行することにより前記多層ニューラルネットワークの前記推論作業負荷のための前記計算を実行するように構成され、前記動作はさらに、
前記イベント収集システムが、前記プログラムコードの前記第1の部分または前記プログラムコードの前記第2の部分におけるオペランドの発生を識別することにより、トリガー条件が満たされていることを検出することを含み、前記プログラムコードの各部分は、前記推論作業負荷の計算ステップを表す複数のコードシーケンスを含み、前記オペランドは、同期されたトレースイベントを始動するために前記複数のコードシーケンスのうちの特定のコードシーケンスを示す第1のパラメータ値を含み、前記動作はさらに、
前記トリガー条件が満たされていることを検出することに応答して、前記イベント収集システムが、前記推論作業負荷の特定の計算ステップ中に発生する第1の同期されたトレースイベントを始動することにより、トレースデータを生成することを含み、前記トレースデータは、前記イベント収集システムの分散ハードウェア回路コンポーネントにわたって生じるそれぞれのハードウェアイベントを識別し、前記それぞれのハードウェアイベントの各々について、前記トレースデータはハードウェアイベントタイムスタンプを含み、前記動作はさらに、
前記イベント収集システムが前記トレースデータを使用して、前記推論作業負荷の前記特定の計算ステップに基づいて前記トレースデータを相関させるデータ構造を生成することと、
前記推論作業負荷の前記特定の計算ステップに基づいて相関させた前記トレースデータを含む前記データ構造を、ホストコントローラに、前記イベント収集システムのホストインターフェイスブロックを使用して、送信することと、
前記ホストコントローラが、前記ホストインターフェイスブロックを使用して受信した前記データ構造における前記トレースデータによって識別された前記それぞれのハードウェアイベントに基づいて、1つ以上の性能属性を求めることと、
前記ホストコントローラが、前記1つ以上の性能属性を使用することにより、前記特定の計算ステップが前記第1のマルチコアニューラルネットワークプロセッサおよび前記第2のマルチコアニューラルネットワークプロセッサにおいて異なるそれぞれの時間に実行された場合に前記第1のマルチコアニューラルネットワークプロセッサおよび前記第2のマルチコアニューラルネットワークプロセッサによる前記プログラムコードの性能を分析することとを含む、ハードウェアイベント収集システム。
【請求項12】
前記第1の同期されたトレースイベントは、それぞれのハードウェアイベントのための一意的なトレース識別子を示すトレースデータを生成し、前記ハードウェアイベントは複数の同期されたハードウェアイベントを含み、2つのハードウェアイベントは、前記イベントが前記推論作業負荷の同一の計算ステップに関連付けられる場合、同期される、請求項11に記載のハードウェアイベント収集システム。
【請求項13】
前記トリガー条件が満たされていることを検出することは、
前記イベント収集システムが、
i)前記オペランドの前記第1のパラメータ値がレジスタの第1の限界値を上回ること、または、
ii)前記イベント収集システムのクロックによって示される現在の時間がレジスタの第1の限界値を上回ること、のうちの1つを検出することと、
前記トリガー条件が満たされていることを検出することに応答して、前記イベント収集システムが、トレースデータを生成する第2の同期されたトレースイベントを始動することとを含み、前記トレースデータは、前記イベント収集システムにわたって生じる前記それぞれのハードウェアイベント間で共有される少なくとも1つの属性を識別する、請求項11に記載のハードウェアイベント収集システム。
【請求項14】
前記動作はさらに、
前記イベント収集システムが、
前記オペランドの第2のパラメータ値が前記レジスタの第2の限界値を上回ること、または、
前記イベント収集システムの前記クロックによって示される前記現在の時間が前記レジスタの第2の限界値を上回ること、のうちの1つを検出することと、
検出することに応答して、前記イベント収集システムが、前記オペランドの前記第2のパラメータ値が前記第2の限界値を上回る場合、または第2の予め定義された時間値が前記第2の限界値を上回る場合に、前記第2の同期されたトレースイベントを停止することとを含む、請求項13に記載のハードウェアイベント収集システム。
【請求項15】
前記オペランドはさらに、前記イベント収集システムの特定の性能状態を示すグローバル制御パラメータを含み、
前記レジスタの前記第1の限界値は、
前記イベント収集システムのグローバルタイムクロックによって示される予め定められた時間値、または、
前記グローバルタイムクロックに関連付けられた予め定義された時間ウィンドウの特定の時間値、のうちの少なくとも1つを含む、請求項13に記載のハードウェアイベント収集システム。
【請求項16】
前記オペランドは第1の2進データ構造を有し、前記オペランドの前記第1のパラメータ値はトレースマークに対応しており、
前記レジスタの前記第1の限界値は第2の2進データ構造を有し、前記現在の時間はグローバルタイムクロックによって示され、
前記グローバルタイムクロックは、1つ以上のハードウェアイベントタイムスタンプを生成するために前記イベント収集システムによって使用される、請求項13に記載のハードウェアイベント収集システム。
【請求項17】
コンピュータにより実現される方法であって、前記方法は、
プロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、前記プロセッサコンポーネントは、前記プログラムコードの少なくとも第1の部分を実行するように構成され、前記方法はさらに、
コンピューティングシステムが、
i)前記プログラムコードの少なくとも前記第1の部分におけるオペランドの発生を識別すること、または、
ii)前記コンピューティングシステムの少なくとも1つのクロックの現在の時間が、1つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも1つに基づいて、トリガー条件が満たされていることを検出するステップを含み、前記オペランドは、前記1つ以上のトレースイベントを始動するために使用される第1のパラメータ値を含み、前記方法はさらに、
前記トリガー条件が満たされていることを検出するステップに応答して、前記コンピューティングシステムが、前記プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成するステップを含み、前記制御信号は、ハードウェアイベントに関連付けられたカウントデータを前記カウントレジスタに格納させ、前記方法はさらに、
前記コンピューティングシステムが、実行される前記プログラムコードに関連付けられた1つ以上の性能属性を示すデータ構造を生成するステップを含み、前記データ構造は、格納された前記カウントデータの1つ以上のカウントパラメータに基づいて生成される、方法。
【請求項18】
前記カウントレジスタは、前記コンピューティングシステムの1つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタのうちの1つであり、少なくとも1つの性能カウンタは、活動カウンタ、ストールカウンタ、統計カウンタ、またはサンプリングカウンタ、のうちの1つを含む、請求項17に記載の方法。
【請求項19】
前記1つ以上のカウントパラメータは、
i)特定のプロセッサコンポーネントによって受信された命令の数、
ii)前記特定のプロセッサコンポーネントによって処理された命令の数、
iii)前記特定のプロセッサコンポーネントによって実行された命令の数、もしくは、
iv)前記特定のプロセッサコンポーネントによって行なわれたメモリ読出の数、またはメモリ書込の数、のうちの1つを示す、請求項18に記載の方法。
【請求項20】
実行される前記プログラムコードに関連付けられた性能属性は、
i)前記プログラムコードを実行する特定のプロセッサコンポーネントのストール頻度、
ii)前記特定のプロセッサコンポーネントの利用が利用しきい値未満であるという表示、または、
iii)前記特定のプロセッサコンポーネントによって使用されるデータ格納キューがキュー占有率しきい値以下であるという表示、のうちの1つを含む、請求項17または18に記載の方法。
【請求項21】
ハードウェアイベント収集システムであって、
1つ以上のプロセッサコアを含む1つ以上のプロセッサと、
命令を格納するための1つ以上のマシン読取可能記憶ユニットとを含み、前記命令は、動作を行なうために前記1つ以上のプロセッサによって実行可能であり、前記動作は、プロセッサコンポーネントによるプログラムコードの実行を監視することを含み、前記プロセッサコンポーネントは、前記プログラムコードの少なくとも第1の部分を実行するように構成され、前記動作はさらに、
コンピューティングシステムが、
i)前記プログラムコードの少なくとも前記第1の部分におけるオペランドの発生を識別すること、または、
ii)前記コンピューティングシステムの少なくとも1つのクロックの現在の時間が、1つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも1つに基づいて、トリガー条件が満たされていることを検出するステップを含み、前記オペランドは、前記1つ以上のトレースイベントを始動するために使用される第1のパラメータ値を含み、前記動作はさらに、
前記トリガー条件が満たされていることを検出するステップに応答して、前記コンピューティングシステムが、前記プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成するステップを含み、前記制御信号は、ハードウェアイベントに関連付けられたカウントデータを前記カウントレジスタに格納させ、前記動作はさらに、
前記コンピューティングシステムが、実行される前記プログラムコードに関連付けられた1つ以上の性能属性を示すデータ構造を生成するステップを含み、前記データ構造は、格納された前記カウントデータの1つ以上のカウントパラメータに基づいて生成される、ハードウェアイベント収集システム。
【請求項22】
前記カウントレジスタは、前記コンピューティングシステムの1つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタのうちの1つであり、少なくとも1つの性能カウンタは、活動カウンタ、ストールカウンタ、統計カウンタ、またはサンプリングカウンタ、のうちの1つを含む、請求項21に記載のハードウェアイベント収集システム。
【請求項23】
前記1つ以上のカウントパラメータは、
i)特定のプロセッサコンポーネントによって受信された命令の数、
ii)前記特定のプロセッサコンポーネントによって処理された命令の数、
iii)前記特定のプロセッサコンポーネントによって実行された命令の数、もしくは、
iv)前記特定のプロセッサコンポーネントによって行なわれたメモリ読出の数、またはメモリ書込の数、のうちの1つを示す、請求項22に記載のハードウェアイベント収集システム。
【請求項24】
実行される前記プログラムコードに関連付けられた性能属性は、
i)前記プログラムコードを実行する特定のプロセッサコンポーネントのストール頻度、
ii)前記特定のプロセッサコンポーネントの利用が利用しきい値未満であるという表示、または、
iii)前記特定のプロセッサコンポーネントによって使用されるデータ格納キューがキュー占有率しきい値以下であるという表示、のうちの1つを含む、請求項21または22に記載のハードウェアイベント収集システム。
【発明の詳細な説明】
【背景技術】
【0001】
背景
この明細書は、プログラムコードの実行を分析することに関する。
【0002】
分散ハードウェアコンポーネント内で実行される分散ソフトウェアの効果的な性能分析は、複雑な作業である場合がある。分散ハードウェアコンポーネントは、より大きいソフトウェアプログラムまたはプログラムコードの一部を実行するために協働し対話する2つ以上の中央処理装置(Central Processing Unit:CPU)(またはグラフィックス処理装置(Graphics Processing Unit:GPU))のそれぞれのプロセッサコアである場合がある。
【0003】
(たとえばCPUまたはGPU内の)ハードウェアの観点から見ると、性能分析に利用可能である情報または機能としては概して、1)ハードウェア性能カウンタと、2)ハードウェアイベントトレースという2種類がある。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
概して、この明細書で説明される主題の革新的な一局面は、1つ以上のプロセッサによって実行される、コンピュータにより実現される方法において具現化され得る。方法は、第1のプロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、第1のプロセッサコンポーネントは、プログラムコードの少なくとも第1の部分を実行するように構成され、方法はさらに、第2のプロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、第2のプロセッサコンポーネントは、プログラムコードの少なくとも第2の部分を実行するように構成される。
【0005】
方法はさらに、コンピューティングシステムが、i)少なくともプログラムコードの第1の部分またはプログラムコードの第2の部分におけるオペランドの発生を識別すること、もしくは、ii)コンピューティングシステムの少なくとも1つのクロックの現在の時間が、1つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも1つに基づいて、トリガー条件が満たされていることを検出するステップを含み、オペランドは、1つ以上のトレースイベントを始動するために使用される第1のパラメータ値を含む。
【0006】
方法はさらに、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、トレースデータを生成する少なくとも第1のトレースイベントを始動するステップを含み、トレースデータは、少なくとも第1のプロセッサコンポーネントおよび第2のプロセッサコンポーネントを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別する。それぞれのハードウェアイベントの各々について、トレースデータは少なくともハードウェアイベントタイムスタンプを含む。方法はさらに、コンピューティングシステムがトレースデータを使用して、トリガー条件が満たされている場合に生成されるそれぞれのハードウェアイベントの時系列の順序を少なくとも示す相関された一組のトレースデータを生成するステップを含む。
【0007】
これらのおよび他の実現化例は各々オプションで、以下の特徴のうちの1つ以上を含み得る。たとえば、いくつかの実現化例では、第1のトレースイベントは、分散プロセッサユニット間にわたって生じるハードウェアイベントを識別するトレースデータを生成する同期されたトレースイベントであり、トレースデータはまた、それぞれのハードウェアイベントのための一意的なトレース識別子を識別し、ハードウェアイベントは複数の同期されたハードウェアイベントを含み、2つのハードウェアイベントがグローバルハードウェアイベントタイムスタンプを共有する場合、それらのイベントは同期される。
【0008】
いくつかの実現化例では、トリガー条件が満たされていることを検出するステップは、コンピューティングシステムが、i)オペランドの第1のパラメータ値がレジスタの第1の限界値を上回ること、または、ii)現在の時間によって示される予め定義された時間値がレジスタの第1の限界値を上回ること、のうちの1つを検出するステップと、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、トレースデータを生成する第2のトレースイベントを始動するステップとを含み、トレースデータは、分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベント間で共有される少なくとも1つの属性を識別する。
【0009】
いくつかの実現化例では、方法はさらに、コンピューティングシステムが、オペランドの第2のパラメータ値がレジスタの第2の限界値を上回ること、または、現在の時間によって示される第2の予め定義された時間値がレジスタの第2の限界値を上回ること、のうちの1つを検出するステップと、検出するステップに応答して、コンピューティングシステムが、オペランドの第2のパラメータ値が第2の限界値を上回る場合、または第2の予め定義された時間値が第2の限界値を上回る場合に、第2のトレースイベントを停止するステップとを含む。
【0010】
いくつかの実現化例では、オペランドはさらに、プログラムコードの特定のシーケンスステップを示すパラメータ、または、分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータ、のうちの少なくとも1つを含み、予め定義された時間値は、分散プロセッサユニットのグローバルタイムクロックによって示される特定の時間値、または、グローバルタイムクロックに関連付けられた予め定義された時間ウィンドウの特定の時間値、のうちの少なくとも1つを含む。
【0011】
いくつかの実現化例では、オペランドは第1の2進データ構造を有し、第1のオペランドの第1のパラメータ値はトレースマークに対応しており、予め定義された時間値は第2の2進データ構造を有し、現在の時間はグローバルタイムクロックによって示され、グローバルタイムクロックは、1つ以上のハードウェアイベントタイムスタンプを生成するために分散プロセッサユニットによって使用される。
【0012】
いくつかの実現化例では、方法はさらに、コンピューティングシステムのコンパイラが、トリガー条件のオペランドを、第1のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも第1の部分に挿入するステップと、コンピューティングシステムのコンパイラが、トリガー条件の少なくとも1つの予め定義された時間値を、第2のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも第2の部分に挿入するステップとを含む。
【0013】
いくつかの実現化例では、第1のトレースイベントまたは第2のトレースイベントのうちの少なくとも1つを始動するステップは、コンピューティングシステムが、第1のプロセッサコアの第1のカウントレジスタによって受信される第1の制御信号を生成するステップを含み、第1の制御信号は、第1のハードウェアイベントに関連付けられたデータを第1のカウントレジスタに格納させ、さらに、コンピューティングシステムが、第2のプロセッサコアの第2のカウントレジスタによって受信される第2の制御信号を生成するステップを含み、第2の制御信号は、第2のハードウェアイベントに関連付けられたデータを第2のカウントレジスタに格納させる。
【0014】
いくつかの実現化例では、第1のハードウェアイベントまたは第2のハードウェアイベントのうちの1つに関連付けられたデータは、分散プロセッサユニットの特定のプロセッサコアの特定のメモリバッファに書込まれたバイトの数、または、分散プロセッサユニットの特定のプロセッサコアによって実行された命令の数、のうちの少なくとも1つを含む。
【0015】
いくつかの実現化例では、方法はさらに、コンピューティングシステムが、第1または第2のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも一部における第2のオペランドの発生を識別するステップを含み、第2のオペランドは第2のパラメータ値を含み、さらに、コンピューティングシステムが、第2のオペランドの第2のパラメータ値がレジスタの特定の限界値を上回ること、またはレジスタの特定の限界値を下回ること、のうちの1つに基づいて、フィルター条件が満たされていると判定するステップと、フィルター条件が満たされていると判定するステップに応答して、コンピューティングシステムが1つ以上のトレースイベントをフィルタリングするステップとを含み、1つ以上のトレースイベントをフィルタリングするステップは、1つ以上のハードウェアイベントに関連付けられたトレースデータの格納を除外するステップを含む。
【0016】
この明細書で説明される主題の他の革新的な局面は、1つ以上のプロセッサコアを含む1つ以上のプロセッサと、命令を格納するための1つ以上のマシン読取可能記憶ユニットとを含む、ハードウェアイベント収集システムにおいて具現化され得る。命令は、動作を行なうために1つ以上のプロセッサによって実行可能であり、動作は、第1のプロセッサコンポーネントによるプログラムコードの実行を監視することを含み、第1のプロセッサコンポーネントは、プログラムコードの少なくとも第1の部分を実行するように構成され、動作はさらに、第2のプロセッサコンポーネントによるプログラムコードの実行を監視することを含み、第2のプロセッサコンポーネントは、プログラムコードの少なくとも第2の部分を実行するように構成される。
【0017】
システムはさらに、コンピューティングシステムが、i)少なくともプログラムコードの第1の部分またはプログラムコードの第2の部分におけるオペランドの発生を識別すること、もしくは、ii)コンピューティングシステムの少なくとも1つのクロックの現在の時間が、1つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも1つに基づいて、トリガー条件が満たされていることを検出するステップを含み、オペランドは、1つ以上のトレースイベントを始動するために使用される第1のパラメータ値を含む。
【0018】
システムはさらに、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、トレースデータを生成する少なくとも第1のトレースイベントを始動するステップを含み、トレースデータは、少なくとも第1のプロセッサコンポーネントおよび第2のプロセッサコンポーネントを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別する。それぞれのハードウェアイベントの各々について、トレースデータは少なくともハードウェアイベントタイムスタンプを含む。システムはさらに、コンピューティングシステムがトレースデータを使用して、トリガー条件が満たされている場合に生成されるそれぞれのハードウェアイベントの時系列の順序を少なくとも示す相関された一組のトレースデータを生成するステップを含む。
【0019】
概して、この明細書で説明される主題の革新的な一局面は、1つ以上のプロセッサによって実行される、コンピュータにより実現される方法において具現化され得る。方法は、プロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、プロセッサコンポーネントは、プログラムコードの少なくとも第1の部分を実行するように構成される。
【0020】
方法はさらに、コンピューティングシステムが、i)プログラムコードの少なくとも第1の部分におけるオペランドの発生を識別すること、または、ii)コンピューティングシステムの少なくとも1つのクロックの現在の時間が、1つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも1つに基づいて、トリガー条件が満たされていることを検出するステップを含み、オペランドは、1つ以上のトレースイベントを始動するために使用される第1のパラメータ値を含む。
【0021】
方法はさらに、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成するステップを含み、制御信号は、ハードウェアイベントに関連付けられたカウントデータをカウントレジスタに格納させ、方法はさらに、コンピューティングシステムが、実行されるプログラムコードに関連付けられた1つ以上の性能属性を示すデータ構造を生成するステップを含み、データ構造は、格納されたカウントデータの1つ以上のカウントパラメータに基づいて生成される。
【0022】
これらのおよび他の実現化例は各々オプションで、以下の特徴のうちの1つ以上を含み得る。たとえば、いくつかの実現化例では、カウントレジスタは、コンピューティングシステムの1つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタのうちの1つであり、少なくとも1つの性能カウンタは、活動カウンタ、ストールカウンタ、統計カウンタ、またはサンプリングカウンタ、のうちの1つを含む。
【0023】
いくつかの実現化例では、1つ以上のカウントパラメータは、i)特定のプロセッサコンポーネントによって受信された命令の数、ii)特定のプロセッサコンポーネントによって処理された命令の数、iii)特定のプロセッサコンポーネントによって実行された命令の数、もしくは、iv)特定のプロセッサコンポーネントによって行なわれたメモリ読出の数、またはメモリ書込の数、のうちの1つを示す。
【0024】
いくつかの実現化例では、実行されるプログラムコードに関連付けられた性能属性は、i)プログラムコードを実行する特定のプロセッサコンポーネントのストール頻度、ii)特定のプロセッサコンポーネントの利用が利用しきい値未満であるという表示、または、iii)特定のプロセッサコンポーネントによって使用されるデータ格納キューがキュー占有率しきい値以下であるという表示、のうちの1つを含む。
【0025】
このおよび他の局面の他の実現化例は、コンピュータ記憶デバイス上で符号化された方法のアクションを行なうように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、動作時にシステムにアクションを行なわせる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せによって、そのように構成され得る。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると当該装置にアクションを行なわせる命令を有することによって、そのように構成され得る。
【0026】
この明細書で説明される主題は、以下の長所のうちの1つ以上を実現するように、特定の実施形態で実現され得る。説明されるハードウェアトレーシングシステムは、ハードウェアノブ/機能を通して実行される動的トリガーを使用することによって計算効率を高める。トリガーは、典型的にはシステムリソースがイベント取込みを監視し実行することを要求する符号化シーケンスのみを介するというよりもむしろ、グローバル時間カウンタ、埋込まれた論理オペランド、およびハードウェアレジスタに部分的に基づいて、イベントの同期された取込みを可能にする。
【0027】
同様に、相関されていない非効率的なイベント取込みの代わりに、同時に生じる短持続時間イベントおよび同期されたグローバルな取込みを取込むために、ハードウェアトリガーが調整される場合、システムメモリ使用が最適化される。より短い持続時間の同期されたイベント取込みのための制御は情報過多を緩和し、それにより、いくつかのメモリリソースが未使用なままとなり、他のシステムプロセス用に利用可能なままとなることを可能にする。
【0028】
この明細書で説明される主題の1つ以上の実現化例の詳細を、添付図面および以下の説明で述べる。主題の他の潜在的な特徴、局面、および長所は、説明、図面、および請求項から明らかになるであろう。
【図面の簡単な説明】
【0029】
図1】分散ハードウェアトレーシングのための例示的なコンピューティングシステムのブロック図である。
図2】分散ハードウェアトレーシングのための例示的なコンピューティングシステムのトレースチェーンおよびそれぞれのノードのブロック図である。
図3】例示的なトレース多重化設計アーキテクチャおよび例示的なデータ構造のブロック図である。
図4】分散ハードウェアトレーシングのための例示的なコンピューティングシステムによって実行される直接メモリアクセストレースイベントのためのトレース活動を示すブロック図である。
図5】グローバル時間カウンタ(GTC)のための例示的なデータ構造と、分散ハードウェアトレーシングのための例示的なコンピューティングシステムによるGTCの使用シナリオを示す表とを示す図である。
図6】分散ハードウェアトレーシングのための例示的なコンピューティングシステムのコンポーネントに関連付けられた、例示的な時間カウンタおよびハードウェア機能のブロック図である。
図7】分散ハードウェアトレーシングのための例示的なプロセスのプロセスフロー図である。
【0030】
さまざまな図面における同様の参照番号および名称は、同様の要素を示す。
【発明を実施するための形態】
【0031】
詳細な説明
この明細書で説明される主題は概して、分散ハードウェアトレーシングに関する。特に、コンピューティングシステムが、第1のプロセッサコアによって実行されるプログラムコードの実行と、第2のプロセッサコアによって実行されるプログラムコードの実行とを監視する。コンピューティングシステムは、ハードウェアイベントのタイムラインをメモリバッファに格納する。格納されたイベントは、少なくとも第1および第2のプロセッサコアを含む分散プロセッサユニット間にわたって生じる。
【0032】
タイムラインは、ハードウェアイベントの各々について、ハードウェアイベントを特徴付けるメタデータおよびイベントタイムスタンプを含む。システムは、タイムラインから、ハードウェアイベントを含むデータ構造を生成する。システムは、データ構造をホストデバイスのメモリバンクに格納し、第1または第2のプロセッサコアによって実行されるプログラムコードの性能を評価するためにデータ構造を使用する。イベントトレーシングのこの状況において、この明細書は、図1~4に示す、分散コンピューティングシステムにおけるハードウェアイベントトレーシングのためのアプローチを説明する。
【0033】
この明細書はさらに、図5~7に示す、1つ以上のトリガーメカニズムに基づく同期されたハードウェアイベント収集のためのアプローチを説明する。以下により詳細に説明されるように、この明細書で説明されるコンピューティングシステムの局面は少なくとも、トレーシングデータおよびイベントカウンティングの協調的な/同期する収集に関する。特に、少なくとも1つの局面は、スタンドアロンシステムおよび分散システム内のハードウェア性能カウンタデータおよびトレースイベントデータの同期された収集のためのシステムおよび方法を含む。同期されたイベント収集は、分散プログラムコードの性能データおよびデバッグデータ双方の分析を向上させる。向上された分析は、システム100によって分析される接続されたソフトウェアコンポーネント/モジュールの実行に応答して生じるイベントの相関を通して、部分的に達成される。
【0034】
図1は、分散ハードウェアトレーシングのための例示的なコンピューティングシステム100のブロック図を示す。この明細書で使用されるように、分散ハードウェアシステムトレーシングは、例示的なプロセッサマイクロチップのコンポーネントおよびサブコンポーネント内に生じるイベントの格納に対応する。さらに、ここで使用されるように、分散ハードウェアシステム(またはトレーシングシステム)は、プロセッサマイクロチップの集合のうち、分散実行のために構成されたソフトウェア/プログラムコードのそれぞれの一部を実行するよう協働するプロセッサマイクロチップの集合に対応する。いくつかの実現化例では、システム100の異なるプロセッサチップが、分散ハードウェアシステムのそれぞれのノードを形成することができる。代替的な実現化例では、単一のプロセッサチップが、そのプロセッサチップのそれぞれのノードを各々形成することができる1つ以上のプロセッサコアおよびハードウェア機能を含み得る。
【0035】
たとえば、中央処理装置(CPU)の状況では、プロセッサチップは少なくとも2つのノードを含んでいてもよく、各ノードはCPUのそれぞれのコアであってもよい。それに代えて、グラフィカル処理装置(GPU)の状況では、プロセッサチップは少なくとも2つのノードを含んでいてもよく、各ノードはGPUのそれぞれのストリーミングマルチプロセッサであってもよい。コンピューティングシステム100は、複数のプロセッサコンポーネントを含み得る。いくつかの実現化例では、プロセッサコンポーネントは、コンピューティングシステム100全体のプロセッサチップ、プロセッサコア、メモリアクセスエンジン、または少なくとも1つのハードウェアコンポーネントのうちの少なくとも1つであってもよい。
【0036】
いくつかの例では、プロセッサコアなどのプロセッサコンポーネントは、実行中のプログラムコードの少なくとも1つの発行済命令に基づいて少なくとも1つの特定の動作を実行するように構成された固定機能コンポーネントであってもよい。他の例では、メモリアクセスエンジン(memory access engine:MAE)などのプロセッサコンポーネントは、システム100の他のプロセッサコンポーネントによって実行されるプログラムコードよりも低い詳細度または粒度でプログラムコードを実行するように構成され得る。
【0037】
たとえば、プロセッサコアによって実行されるプログラムコードは、MAE記述子が生成されてMAEに送信されるようにすることができる。記述子の受信後、MAEは、MAE記述子に基づいてデータ転送動作を実行することができる。いくつかの実現化例では、MAEによって実行されるデータ転送は、たとえば、システムのあるデータ経路またはインターフェイスコンポーネントを介してシステム100のあるコンポーネント間でデータを動かすこと、または、システム100の例示的な構成バスにデータ要求を発行することを含み得る。
【0038】
いくつかの実現化例では、システム100の例示的なプロセッサチップの各テンソルノードは、プログラム命令を処理するハードウェアブロック/機能であり得る少なくとも2つの「フロントエンド」を有し得る。以下により詳細に説明されるように、第1のフロントエンドは第1のプロセッサコア104に対応することができ、一方、第2のフロントエンドは第2のプロセッサコア106に対応することができる。よって、第1および第2のプロセッサコアはまた、ここに第1のフロントエンド104および第2のフロントエンド106と記載されてもよい。
【0039】
この明細書で使用されるように、トレースチェーンとは、トレースエントリがシステム100内の例示的なチップマネージャへの送信のために置かれ得る、特定の物理データ通信バスであってもよい。受信されたトレースエントリは、複数のバイトと複数の2進値または2進数とを含むデータワード/構造であってもよい。このため、「ワード」という記述子は、例示的なプロセッサコアのハードウェアデバイスによって1単位として扱われ得る、固定サイズの2進データ片を示す。
【0040】
いくつかの実現化例では、分散ハードウェアトレーシングシステムのプロセッサチップは、チップのそれぞれのコアでプログラムコードの一部を各々実行する、マルチコア(すなわち複数のコアを有する)プロセッサである。いくつかの実現化例では、プログラムコードの一部は、例示的な多層ニューラルネットワークの推論作業負荷のためのベクトル化計算に対応することができる。一方、代替的な実現化例では、プログラムコードの一部は概して、従来のプログラミング言語に関連付けられたソフトウェアモジュールに対応することができる。
【0041】
コンピューティングシステム100は概して、ノードマネージャ102と、第1のプロセッサコア(first processor core:FPC)104と、第2のプロセッサコア(second processor core:SPC)106と、ノードファブリック(node fabric:NF)110と、データルータ112と、ホストインターフェイスブロック(host interface block:HIB)114とを含む。いくつかの実現化例では、システム100は、信号切替、多重化、および逆多重化機能を行なうように構成されたメモリmux108を含み得る。システム100はさらに、FPC104が内部に配置されたテンソルコア116を含む。テンソルコア116は、ベクトル化計算を多次元データアレイに行なうように構成された例示的な計算デバイスであってもよい。テンソルコア116はベクトル処理ユニット(vector processing unit:VPU)118を含んでいてもよく、それは、行列ユニット(matrix unit:MXU)120、転置ユニット(transpose unit:XU)122、簡約および置換ユニット(reduction and permutation unit:RPU)124と対話する。いくつかの実現化例では、コンピューティングシステム100は、ロード/格納ユニット、算術論理演算ユニット(arithmetic logic unit:ALU)、およびベクトルユニットといった、従来のCPUまたはGPUの1つ以上の実行ユニットを含み得る。
【0042】
システム100のコンポーネントは、大きい一組のハードウェア性能カウンタと、コンポーネント内のトレース活動の完了を促進するサポートハードウェアとを一括して含む。以下により詳細に説明されるように、システム100のそれぞれのプロセッサコアによって実行されるプログラムコードは、コード実行中に複数の性能カウンタを同時にイネーブルにするために使用される埋込みトリガーを含み得る。一般に、検出されたトリガーは、トレースデータが1つ以上のトレースイベントのために生成されるようにする。トレースデータは、カウンタに格納され、プログラムコードの性能特性を識別するために分析され得るインクリメンタルパラメータカウントに対応することができる。それぞれのトレースイベントについてのデータは、例示的な記憶媒体(たとえばハードウェアバッファ)に格納可能であり、トリガーの検出に応答して生成されるタイムスタンプを含み得る。
【0043】
さらに、トレースデータは、システム100のハードウェアコンポーネント内に生じるさまざまなイベントについて生成され得る。例示的なイベントは、直接メモリアクセス(DMA)動作および同期フラグ更新(各々、以下により詳細に説明される)といった、ノード内およびクロスノード通信動作を含み得る。いくつかの実現化例では、システム100は、一般にグローバル時間カウンタ(Global Time Counter:GTC)と呼ばれる、グローバルに同期するタイムスタンプカウンタを含み得る。他の実現化例では、システム100は、ランポート(Lamport)クロックといった他のタイプのグローバルクロックを含み得る。
【0044】
GTCは、プログラムコード実行と、分散処理環境で実行されるソフトウェア/プログラムコードの性能との正確な相関のために使用され得る。加えて、およびGTCに一部関連して、いくつかの実現化例では、システム100は、分散システムでデータトレーシングを非常に協調的な態様で起動および停止するために分散ソフトウェアプログラムによって使用される1つ以上のトリガーメカニズムを含み得る。
【0045】
いくつかの実現化例では、ホストシステム126が、埋込まれたオペランドを含み得るプログラムコードをコンパイルする。オペランドは、検出されると、ハードウェアイベントに関連付けられたトレースデータの取込みおよび格納を引き起こすことをトリガーする。いくつかの実現化例では、ホストシステム126は、コンパイルされたプログラムコードを、システム100の1つ以上のプロセッサチップに提供する。代替的な実現化例では、プログラムコードは例示的な外部コンパイラによって(埋込まれたトリガーを用いて)コンパイルされ、システム100の1つ以上のプロセッサチップにロードされ得る。いくつかの例では、コンパイラは、ソフトウェア命令の一部に埋込まれたあるトリガーに関連付けられた(以下に説明される)1つ以上のトレースビットを設定することができる。コンパイルされたプログラムコードは、システム100の1つ以上のコンポーネントによって実行される分散ソフトウェアプログラムであってもよい。
【0046】
ホストシステム126は、システム100の1つ以上のコンポーネントによるプログラムコードの実行を監視するように構成された監視エンジン128を含み得る。いくつかの実現化例では、監視エンジン128は、ホストシステム126が、少なくともFPC104およびSPC106によって実行されるプログラムコードの実行を監視することを可能にする。たとえば、コード実行中、ホストシステム126は、少なくとも、生成されたトレースデータに基づいてハードウェアイベントの周期的なタイムラインを受信することによって、監視エンジン128を介して実行コードの性能を監視することができる。ホストシステム126のために単一のブロックが示されているが、いくつかの実現化例では、ホストシステム126は、システム100の複数のプロセッサチップまたはチップコアに関連付けられる複数のホスト(またはホストサブシステム)を含み得る。
【0047】
他の実現化例では、データトラフィックがFPC104と例示的な第3のプロセッサコア/ノードとの間の通信経路を横断する際、少なくとも3つのプロセッサコアを伴うクロスノード通信が、ホストシステム126に、1つ以上の中間「ホップ」でデータトラフィックを監視させてもよい。たとえば、FPC104と第3のプロセッサコアとは、所与の期間にプログラムコードを実行する唯一のコアであってもよい。よって、FPC104から第3のプロセッサコアへのデータ転送は、データがFPC104から第3のプロセッサコアへ転送される際、SPC106で中間ホップについてのトレースデータを生成することができる。別の言い方をすると、システム100でのデータルーティング中、第1のプロセッサチップから第3のプロセッサチップに向かうデータは、第2のプロセッサチップを横断する必要があるかもしれず、そのため、データルーティング動作の実行は、トレースエントリが第2のチップでのルーティング活動のために生成されるようにするかもしれない。
【0048】
コンパイルされたプログラムコードが実行されると、システム100のコンポーネントは、分散コンピュータシステムで生じるハードウェアイベントのタイムラインを生成するために対話することができる。ハードウェアイベントは、ノード内およびクロスノード通信イベントを含み得る。分散ハードウェアシステムの例示的なノードおよびそれらの関連付けられた通信は、図2を参照して以下により詳細に説明される。いくつかの実現化例では、少なくとも1つのハードウェアイベントタイムラインのためのハードウェアイベントの集合を識別するデータ構造が生成される。タイムラインは、分散システムで生じるイベントの再構築を可能にする。いくつかの実現化例では、イベント再構築は、特定のイベントの発生中に生成されたタイムスタンプの分析に基づく正しいイベント順序付けを含み得る。
【0049】
一般に、例示的な分散ハードウェアトレーシングシステムは、システム100の上述のコンポーネントと、ホストシステム126に関連付けられた少なくとも1つのホストコントローラとを含み得る。分散トレーシングシステムから得られたデータの性能またはデバッグは、イベントデータがたとえば時系列でまたは順序立てて相関される場合に有用であり得る。いくつかの実現化例では、接続されたソフトウェアモジュールに対応する複数の格納されたハードウェアイベントが格納され、次に、ホストシステム126による構造化分析のために順序立てられた場合に、データ相関が生じ得る。複数のホストシステムを含む実現化例については、異なるホストを介して得られたデータの相関は、たとえばホストコントローラによって行なわれてもよい。
【0050】
いくつかの実現化例では、FPC104およびSP106は各々、1つのマルチコアプロセッサチップの別個のコアである。一方、他の実現化例では、FPC104およびSP106は、別個のマルチコアプロセッサチップのそれぞれのコアである。上述のように、システム100は、少なくともFPC104およびSPC106を有する分散プロセッサユニットを含み得る。いくつかの実現化例では、システム100の分散プロセッサユニットは、より大きい分散ソフトウェアプログラムまたはプログラムコードの少なくとも一部を実行するように構成された1つ以上のハードウェアまたはソフトウェアコンポーネントを含み得る。
【0051】
データルータ112は、システム100のコンポーネント間にデータ通信経路を提供するチップ間相互接続(inter-chip interconnect:ICI)である。特に、ルータ112は、FPC104とSPC106との間に、およびコア104、106に関連付けられたそれぞれのコンポーネント間に、通信結合または接続を提供することができる。ノードファブリック110は、システム100の分散ハードウェアコンポーネントおよびサブコンポーネント内でデータパケットを動かすために、データルータ112と対話する。
【0052】
ノードマネージャ102は、マルチノードプロセッサチップにおける低レベルのノード機能を管理する高レベルのデバイスである。以下により詳細に説明されるように、プロセッサチップの1つ以上のノードは、ハードウェアイベントデータを管理してローカルエントリログに格納するためにノードマネージャ102によって制御されるチップマネージャを含み得る。メモリmux108は、例示的な外部高帯域メモリ(high bandwidth memory:HBM)に提供されたデータ信号、または外部HBMから受信されたデータ信号に対してスイッチング、多重化、および逆多重化動作を行なうことができる多重化デバイスである。
【0053】
いくつかの実現化例では、mux108がFPC104とSPC106とを切り替える際、(以下に説明される)例示的なトレースエントリがmux108によって生成され得る。メモリmux108は、mux108にアクセスできない特定のプロセッサコア104、106の性能に影響を与える可能性がある。このため、mux108によって生成されたトレースエントリデータは、それぞれのコア104、106に関連付けられたあるシステム活動のレイテンシにおいて結果として生じるスパイクを理解することを助けることができる。いくつかの実現化例では、mux108内で発生するハードウェアイベントデータ(たとえば、以下に説明されるトレースポイント)は、例示的なハードウェアイベントタイムラインで、ノードファブリック110についてのイベントデータと共にグループ化され得る。あるトレース活動が、複数のハードウェアコンポーネントについてのイベントデータを、例示的なハードウェアバッファ(たとえば、以下に説明されるトレースエントリログ218)に格納させる場合、イベントグループ化が生じ得る。
【0054】
システム100では、性能分析ハードウェアは、FPC104、SPC106、mux108、ノードファブリック110、データルータ112、およびHIB114を包含する。これらのハードウェアコンポーネントまたはユニットの各々は、ハードウェア性能カウンタと、ハードウェアイベントトレース機構および機能とを含む。いくつかの実現化例では、VPU118、MXU120、XU122、およびRPU124は、それら自体の専用性能ハードウェアを含んでいない。むしろ、そのような実現化例では、FPC104は、VPU118、MXU120、XU122、およびRPU124のための必要なカウンタを提供するように構成され得る。
【0055】
VPU118は、例示的な行列-ベクトルプロセッサのベクトル要素に関連付けられたローカル化高帯域データ処理および算術演算をサポートする内部設計アーキテクチャを含み得る。MXU120は、たとえば最大128×128の行列乗算を被乗数のベクトルデータセットに対して行なうように構成された行列乗算ユニットである。
【0056】
XU122は、たとえば最大128×128の行列転置演算を、行列乗算演算に関連付けられたベクトルデータに対して行なうように構成された転置ユニットである。RPU124は、シグマユニットと置換ユニットとを含み得る。シグマユニットは、行列乗算演算に関連付けられたベクトルデータに対して順次簡約を実行する。簡約は、和およびさまざまなタイプの比較演算を含み得る。置換ユニットは、行列乗算演算に関連付けられたベクトルデータのすべての要素を完全に置換し、または複製することができる。
【0057】
いくつかの実現化例では、システム100のコンポーネントによって実行されるプログラムコードは、機械学習、ニューラルネットワーク推論計算、および/または1つ以上の直接メモリアクセス機能を代表し得る。システム100のコンポーネントは、システムの処理ユニットまたはデバイスに1つ以上の機能を実行させる命令を含む1つ以上のソフトウェアプログラムを実行するように構成され得る。「コンポーネント」という用語は、あらゆるデータ処理デバイス、または制御ステータスレジスタなどの記憶デバイス、またはデータを処理し格納することができる任意の他のデバイスを含むよう意図される。
【0058】
システム100は概して、1つ以上のプロセッサ(たとえばマイクロプロセッサまたは中央処理装置(CPU))、グラフィックス処理装置(GPU)、特定用途向け集積回路(application specific integrated circuit:ASIC)、または異なるプロセッサの組合せを含み得る、複数の処理ユニットまたはデバイスを含み得る。代替的な実施形態では、システム100は各々、この明細書で説明されるハードウェアトレース機能に関連する計算を行なうための追加の処理オプションを提供する、他のコンピューティングリソース/デバイス(たとえばクラウドベースのサーバ)を含み得る。
【0059】
処理ユニットまたはデバイスはさらに、1つ以上のメモリユニットまたはメモリバンク(たとえばレジスタ/カウンタ)を含み得る。いくつかの実現化例では、処理ユニットは、この明細書で説明される1つ以上の機能を行なうために、メモリに格納された、システム100のデバイスへのプログラミングされた命令を実行する。メモリユニット/バンクは、1つ以上の非一時的マシン読取可能記憶媒体を含み得る。非一時的マシン読取可能記憶媒体は、ソリッドステートメモリ、磁気ディスク、および光学ディスク、ランダムアクセスメモリ(random access memory:RAM)、読取専用メモリ(read-only memory:ROM)、消去可能プログラマブル読取専用メモリ(たとえばEPROM、EEPROM、またはフラッシュメモリ)、もしくは、情報を格納可能な任意の他の有形媒体を含み得る。
【0060】
図2は、システム100によって実行される分散ハードウェアトレーシングに使用されるトレースチェーンおよびそれぞれの例示的なノード200、201のブロック図を示す。いくつかの実現化例では、システム100のノード200、201は、単一のマルチコアプロセッサ内の異なるノードであってもよい。他の実現化例では、ノード200は第1のマルチコアプロセッサチップにおける第1のノードであってもよく、ノード201は第2のマルチコアプロセッサチップにおける第2のノードであってもよい。
【0061】
図2の実現化例では2つのノードが図示されているが、代替的な実現化例では、システム100は複数のノードを含み得る。複数のノードを伴う実現化例については、クロスノードデータ転送が、複数のノードを横断する例示的なデータ経路に沿った中間ホップでトレースデータを生成することができる。たとえば、中間ホップは、特定のデータ転送経路における別個のノードを通過するデータ転送に対応することができる。いくつかの例では、1つ以上のノードを通過するクロスノードデータ転送中に生じる1つ以上の中間ホップのために、ICIトレース/ハードウェアイベントに関連付けられたトレースデータを生成することができる。
【0062】
いくつかの実現化例では、ノード0およびノード1は、推論作業負荷のためのプログラムコードの一部に関連付けられたベクトル化計算に使用されるテンソルノードである。この明細書で使用されるように、テンソルは多次元の幾何学的オブジェクトであり、例示的な多次元の幾何学的オブジェクトは行列とデータアレイとを含む。
【0063】
図2の実現化例に示すように、ノード200は、システム100のコンポーネントの少なくとも部分集合と対話するトレースチェーン203を含む。同様に、ノード201は、システム100のコンポーネントの少なくとも部分集合と対話するトレースチェーン205を含む。いくつかの実現化例では、ノード200、201はコンポーネントの同じ部分集合の例示的なノードであり、一方、他の実現化例では、ノード200、201は別個のコンポーネント部分集合のそれぞれのノードである。データルータ/ICI112は、トレースデータをチップマネージャ216に提供するためにトレースチェーン203および205と概して収束するトレースチェーン207を含む。
【0064】
図2の実現化例では、ノード200、201は各々、少なくともFPC104、SPC106、ノードファブリック110、およびHIB114を有するそれぞれのコンポーネント部分集合を含み得る。ノード200、201の各コンポーネントは、ノードの特定のコンポーネントによって生成される(以下に説明される)トレースポイントをグループ化するように構成された1つ以上のトレースmuxを含む。FPC104はトレースmux204を含み、ノードファブリック110はトレースmux210a/bを含み、SPC106はトレースmux206a/b/c/dを含み、HIB214はトレースmux214を含み、ICI212はトレースmux212を含む。いくつかの実現化例では、各トレースmuxのためのトレース制御レジスタは、個々のトレースポイントがイネーブルおよびディスエーブルにされることを可能にする。いくつかの例では、1つ以上のトレースmuxのために、それらの対応するトレース制御レジスタは、個々のイネーブルビットと、より広範なトレースmux制御とを含み得る。
【0065】
一般に、トレース制御レジスタは、トレース命令データを受信して格納する従来の制御ステータスレジスタ(control status register:CSR)であってもよい。より広範なトレースmux制御に関し、いくつかの実現化例では、システム100によって実行されるCSR書込に基づいて、トレーシングがイネーブルおよびディスエーブルにされ得る。いくつかの実現化例では、トレーシングは、グローバル時間カウンタ(GTC)の値に基づいて、FPC104(またはコア116)における例示的なトレースマークレジスタの値に基づいて、もしくは、SPC106における例示的なトレースマークレジスタの値に基づいて、システム100によって動的に起動および停止され得る。
【0066】
トレース活動を動的に起動および停止するための、ならびに、同期されたハードウェアイベント収集のためのシステムおよび方法に関連する追加の詳細および説明が、図5~7の実現化例を参照してより詳細に説明される。
【0067】
いくつかの実現化例では、コア116のために、FPC104は、コア116内に生じるイベント活動に関連付けられたトレースウィンドウを定義するためにトレース制御パラメータを使用することができる。トレース制御パラメータは、トレースウィンドウが、GTCについての下限および上限、ならびに、トレースマークレジスタについての下限および上限によって定義されることを可能にする。
【0068】
いくつかの実現化例では、システム100は、トレースイベントフィルタリング機能といった、生成されるトレースエントリの数の減少を可能にする機能を含み得る。たとえば、FPC104およびSPC106は各々、各コアが(以下に説明される)例示的な生成されたトレース記述子においてトレースビットを設定するレートを制限するフィルタリング機能を含み得る。HIB114は、あるDMAトレースイベントの取込みに関連付けられたトレースビットを制限する例示的なDMAレートリミッタといった、同様のフィルタリング機能を含み得る。加えて、HIB114は、ソースDMAトレースエントリをキューに入れる制限のための(たとえばイネーブルビットを介した)制御を含み得る。
【0069】
いくつかの実現化例では、DMA動作用の記述子は、ホストシステム126の例示的なコンパイラによって設定されるトレースビットを有し得る。トレースビットが設定されると、トレースデータを判定して生成するハードウェア機能/ノブが、例示的なトレースイベントを完了するために使用される。いくつかの例では、DMAにおける最後のトレースビットは、コンパイラによって静的に挿入されるトレースビットと、特定のハードウェアコンポーネントによって動的に判定されるトレースビットとの論理和演算であり得る。よって、いくつかの例では、コンパイラが生成したトレースビットは、フィルタリングとは別に、生成されるトレースデータの全体量を減少させるためのメカニズムを提供することができる。
【0070】
たとえば、ホストシステム126のコンパイラは、1つ以上のリモートDMA動作(たとえば、少なくとも2つのノード間にわたるDMA)のためのトレースビットだけを設定し、1つ以上のローカルDMA動作(たとえば、ノード200といった特定のテンソルノード内のDMA)のためのトレースビットをクリアするよう、決定してもよい。このように、生成されるトレースデータの量は、クロスノード(すなわちリモート)およびローカルDMA動作の双方を含むトレース活動ではなく、クロスノードDMA動作に制限されたトレース活動に基づいて減少され得る。
【0071】
いくつかの実現化例では、システム100によって始動された少なくとも1つのトレースイベントが、システム100全体にわたって生じる複数の中間動作を含むメモリアクセス動作に関連付けられ得る。メモリアクセス動作用の記述子(たとえばMAE記述子)は、複数の中間動作に関連付けられたデータを1つ以上のメモリバッファに格納させるトレースビットを含み得る。このため、トレースビットは、データパケットがシステム100を横断する際、DMA動作の中間ホップで中間メモリ動作に「タグ付け」し、複数のトレースイベントを生成するために使用され得る。
【0072】
いくつかの実現化例では、ICI112は、ノード200、201の特定のコンポーネントの各入口および出口ポートのための制御機能性を提供する、1組のイネーブルビットおよび1組のパケットフィルタを含み得る。これらのイネーブルビットおよびパケットフィルタは、ICI112が、ノード200、201の特定のコンポーネントに関連付けられたトレースポイントをイネーブルおよびディスエーブルにすることを可能にする。トレースポイントをイネーブルおよびディスエーブルにすることに加えて、ICI112は、イベントソース、イベント宛先、およびトレースイベントパケットタイプに基づいてトレースデータをフィルタリングするように構成され得る。
【0073】
いくつかの実現化例では、ステップマーカー、GTC、またはトレースマーカーを使用することに加えて、プロセッサコア104、106、およびHIB114のための各トレース制御レジスタはまた、「各自」(everyone)トレースモードを含み得る。この「各自」トレースモードは、プロセッサチップ全体にわたるトレーシングがトレースmux204またはトレースmux206aのいずれかによって制御されることを可能にし得る。各自トレースモード時、トレースmux204および206aは、その特定のトレースmux、すなわち、mux204またはmux206aのいずれかがトレースウィンドウ内にあるか否かを特定する、「ウィンドウ内」トレース制御信号を送信することができる。
【0074】
ウィンドウ内トレース制御信号は、たとえば、1つのプロセッサチップ内の、または複数のプロセッサチップ間にわたる他のすべてのトレースmuxに一斉送信され、または全般的に送信され得る。mux204またはmux206aのいずれかがトレース活動を実行している場合、他のトレースmuxへの一斉送信によって、すべてのトレーシングがイネーブルにされ得る。いくつかの実現化例では、プロセッサコア104、106、およびHIB114に関連付けられたトレースmuxは各々、「各自トレース」制御信号がいつ、および/またはどのように生成されるかを特定するトレースウィンドウ制御レジスタを含む。
【0075】
いくつかの実現化例では、トレースmux210a/bおよびトレースmux212におけるトレース活動は一般に、トレースビットが、ICI/データルータ112を横断するDMA動作または制御メッセージのためにデータワードにおいて設定されるかどうかに基づいて、イネーブルにされる。DMA動作または制御メッセージは、ある状況またはソフトウェア状態に基づいて設定された2進データパケット内にトレースビットを有し得る、固定サイズの2進データ構造であってもよい。
【0076】
たとえば、DMA動作がトレースタイプDMA命令によってFPC104(またはSPC106)で始動され、イニシエータ(プロセッサコア104または106)がトレースウィンドウ内にある場合、トレースビットはその特定のDMAにおいて設定されるであろう。別の例では、FPC104について、FPC104がトレースウィンドウ内にあり、トレースデータを格納させるトレースポイントがイネーブルにされた場合、システム100内の別のコンポーネントへのデータ書込みのための制御メッセージがトレースビットを設定させるであろう。
【0077】
いくつかの実現化例では、ゼロレングスDMA動作が、システム100内のより広範なDMA実現化例の一例を提供する。たとえば、いくつかのDMA動作は、システム100内に非DMA活動を生成することができる。非DMA活動の実行も、非DMA活動がまるでDMA動作(たとえば、非ゼロレングス動作を含むDMA活動)であるかのようにトレースされ得る(たとえば、トレースデータを生成する)。たとえば、ソース位置で始動されたものの、送信または転送されるべきデータがない(たとえばゼロレングスである)DMA動作は、代わりに、制御メッセージを宛先位置へ送信してもよい。制御メッセージは、宛先に受信または作業されるべきデータがないことを示すであろう。そして、制御メッセージ自体は、非ゼロレングスDMA動作がトレースされるように、システム100によってトレースされるであろう。
【0078】
いくつかの例では、SPC106について、ゼロレングスDMA動作は制御メッセージを生成することができ、DMAがトレースビットを設定させた場合のみ、すなわち、制御メッセージがゼロレングスを有していなかった場合のみ、そのメッセージに関連付けられたトレースビットが設定される。一般に、HIB114がトレースウィンドウ内にある場合、ホストシステム126から始動されたDMA動作がトレースビットを設定させるであろう。
【0079】
図2の実現化例では、トレースチェーン203は、ノード0と整列するコンポーネント部分集合についてのトレースエントリデータを受信し、一方、トレースチェーン205は、ノード1と整列するコンポーネント部分集合についてのトレースエントリデータを受信する。各トレースチェーン203、205、207は、チップマネージャ216の例示的なトレースエントリデータログ218にトレースエントリデータを提供するためにそれぞれのノード200、201、およびICI112によって使用される別個のデータ通信経路である。このため、トレースチェーン203、205、207のエンドポイントは、トレースイベントが例示的なメモリユニットに格納され得るチップマネージャ216である。
【0080】
いくつかの実現化例では、チップマネージャ216の少なくとも1つのメモリユニットは128ビット幅であり、少なくとも20,000個のトレースエントリのメモリ深度を有し得る。代替的な実現化例では、少なくとも1つのメモリユニットは、より大きい、またはより小さいビット幅を有していてもよく、より多い、またはより少ないエントリを格納できるメモリ深度を有していてもよい。
【0081】
いくつかの実現化例では、チップマネージャ216は、受信されたトレースエントリデータを管理するための命令を実行する少なくとも1つの処理デバイスを含み得る。たとえば、チップマネージャ216は、トレースチェーン203、205、207を介して受信されたトレースデータのそれぞれのハードウェアイベントについてのタイムスタンプデータを走査/分析するための命令を実行することができる。分析に基づいて、チップマネージャ216は、ハードウェアトレースイベントの時系列の順序を識別(または生成)するために使用され得るデータを含むように、トレースエントリログ218をポピュレートすることができる。ハードウェアトレースイベントは、システム100の処理ユニットが例示的な分散ソフトウェアプログラムを実行する際にコンポーネントおよびサブコンポーネントレベルで生じるデータパケットの移動に対応することができる。
【0082】
いくつかの実現化例では、システム100のハードウェアユニットは、例示的なハードウェアトレースバッファを非時系列的に(すなわち順不同に)ポピュレートするトレースエントリ(および対応するタイムスタンプ)を生成してもよい。たとえば、チップマネージャ216は、生成されたタイムスタンプを有する複数のトレースエントリをエントリログ218に挿入させることができる。挿入された複数のトレースエントリのうち、それぞれのトレースエントリは、互いに対して時系列化されていなくてもよい。この実現化例では、非時系列のトレースエントリは、ホストシステム126の例示的なホストバッファによって受信され得る。ホストバッファによって受信されると、ホストシステム126は、それぞれのトレースエントリについてのタイムスタンプデータを走査/分析するために、性能分析/監視用ソフトウェアに関連する命令を実行することができる。実行された命令は、トレースエントリをソートするために、および、ハードウェアトレースイベントのタイムラインを構築/生成するために使用され得る。
【0083】
いくつかの実現化例では、トレーシングセッション中、ホストDMA動作を介して、トレースエントリをエントリログ218から除去することができる。いくつかの例では、ホストシステム126は、DMAエントリを、それらがログに追加されるのと同じくらい速く、トレースエントリログ218から除去しないかもしれない。他の実現化例では、エントリログ218は、予め定義されたメモリ深度を含み得る。エントリログ218のメモリ深度制限に達すると、追加のトレースエントリが失われるかもしれない。どのトレースエントリが失われるかを制御するために、エントリログ218は、先入れ先出し(first-in-first-out:FIFO)モードで、またはそれに代えて、上書き記録モードで動作することができる。
【0084】
いくつかの実現化例では、上書き記録モードは、事後デバッグに関連付けられた性能分析をサポートするために、システム100によって使用され得る。たとえば、プログラムコードは、トレース活動がイネーブルにされ、上書き記録モードがイネーブルにされた状態で、ある期間実行され得る。システム100内の事後ソフトウェアイベント(たとえばプログラム破損)に応答して、ホストシステム126によって実行される監視用ソフトウェアは、プログラム破損前に生じたハードウェアイベントを把握するために、例示的なハードウェアトレースバッファのデータ内容を分析することができる。この明細書で使用されるように、事後デバッグは、コードが破損した後の、または、意図されたように実行される/動作することがおおむねできなくなった後のプログラムコードの分析またはデバッグに関する。
【0085】
FIFOモードでは、エントリログ218がいっぱいである場合、および、ホストシステム126がある時間枠内の保存されたログエントリを除去する場合、メモリリソースを節約するために、新しいトレースエントリはチップマネージャ216のメモリユニットに保存されないかもしれない。一方、上書き記録モードでは、ホストシステム126がある時間枠内の保存されたログエントリを除去するためにエントリログ218がいっぱいである場合、メモリリソースを節約するために、新しいトレースエントリを、エントリログ218内に格納された最も古いトレースエントリに上書きすることができる。いくつかの実現化例では、トレースエントリは、DMA動作がHIB114の処理機能を使用することに応答して、ホストシステム126のメモリへ動かされる。
【0086】
この明細書で使用されるように、トレースポイントは、トレースエントリと、チップマネージャ216によって受信され、トレースエントリログ218に格納された当該トレースエントリに関連付けられたデータとの生成元である。いくつかの実現化例では、マルチコアマルチノードプロセッサマイクロチップは、チップ内に3つのトレースチェーンを含んでいてもよく、第1のトレースチェーンはチップノード0からトレースエントリを受信し、第2のトレースチェーンはチップノード1からトレースエントリを受信し、第3のトレースチェーンはチップのICIルータからトレースエントリを受信するようになっている。
【0087】
各トレースポイントは、そのトレースチェーン内に、それがトレースエントリのヘッダに挿入する一意的なトレース識別番号を有する。いくつかの実現化例では、各トレースエントリは、それが発生したトレースチェーンを、1つ以上のバイト/ビットのデータワードによって示されたヘッダにおいて識別する。たとえば、各トレースエントリは、特定のトレースイベントに関する情報を伝える定義されたフィールドフォーマット(たとえばヘッダ、ペイロードなど)を有するデータ構造を含み得る。トレースエントリにおける各フィールドは、トレースエントリを生成したトレースポイントに適用可能な有用なデータに対応する。
【0088】
上述のように、各トレースエントリは、トレースエントリログ218に関連付けられたチップマネージャ216のメモリユニットに書込まれ、または格納され得る。いくつかの実現化例では、トレースポイントが個々にイネーブルまたはディスエーブルにされてもよく、複数のトレースポイントが、同じタイプであるものの異なるトレースポイント識別子を有するトレースエントリを生成してもよい。
【0089】
いくつかの実現化例では、各トレースエントリタイプは、トレース名と、トレース記述と、トレースエントリ内の特定のフィールドおよび/またはフィールドの集合のための符号化を識別するヘッダとを含み得る。これらの名前、記述、およびヘッダは、トレースエントリが表わすことの記述を一括して提供する。チップマネージャ216の観点から見ると、この記述は、特定のトレースエントリが特定のプロセッサチップ内に加わった特定のトレースチェーン203、205、207を識別することもできる。このため、トレースエントリ内のフィールドは、記述に関する(たとえばバイト/ビット単位の)データ片を表わしており、どのトレースポイントが特定のトレースエントリを生成したかを判定するために使用されるトレースエントリ識別子であってもよい。
【0090】
いくつかの実現化例では、格納されたハードウェアイベントのうちの1つ以上に関連付けられたトレースエントリデータは、a)少なくともノード0とノード1との間、b)少なくともノード0内のコンポーネント間、および、c)少なくともノード1内のコンポーネント間に生じるデータ通信に部分的に対応することができる。たとえば、格納されたハードウェアイベントは、1)ノード0のFPC104とノード1のFPC104との間、ノード0のFPC104とノード0のSPC106との間、2)ノード1のSPC106とノード1のSPC106との間、のうちの少なくとも1つで生じるデータ通信に部分的に対応することができる。
【0091】
図3は、例示的なトレース多重化設計アーキテクチャ300および例示的なデータ構造320のブロック図を示す。トレース多重化設計300は概して、トレースバス入力302、バスアービタ304、およびローカルトレースポイントアービタ306、バスFIFO308、少なくとも1つのローカルトレースイベントキュー310、共有トレースイベントFIFO312、およびトレースバスアウト314を含む。
【0092】
多重化設計300は、システム100のコンポーネント内に配置された例示的なトレースmuxに対応する。多重化設計300は、以下の機能性を含み得る。バスイン302は、時間アービトレーション論理(たとえばアービタ304)によってトレースデータが例示的なトレースチェーンに置かれるようになるまでバスFIFO308内に一時的に格納されるローカルトレースポイントデータに関連し得る。コンポーネントのための1つ以上のトレースポイントが、トレースイベントデータを、少なくとも1つのローカルトレースイベントキュー310に挿入することができる。アービタ306は第1のレベルのアービトレーションを提供し、キュー310内に格納されたローカルトレースイベントからのイベントの選択を可能にする。選択されたイベントは、格納キューとしても機能する共有トレースイベントFIFO312に置かれる。
【0093】
アービタ304は、FIFOキュー312からローカルトレースイベントを受信し、ローカルトレースイベントをトレースバスアウト314を介して特定のトレースチェーン203、205、207上に併合する第2のレベルのアービトレーションを提供する。いくつかの実現化例では、トレースエントリは、それらが共有FIFO312に併合され得るよりも速く、ローカルキュー310に押込まれてもよい。または、それに代えて、トレースエントリは、それらがトレースバス314上に併合され得るよりも速く、共有FIFO312に押込まれてもよい。これらのシナリオが生じる場合、それぞれのキュー310および312はトレースデータでいっぱいになるであろう。
【0094】
いくつかの実現化例では、いずれかのキュー310または312がトレースデータでいっぱいになると、システム100は、最新のトレースエントリがドロップされて特定のキューに格納または併合されないように構成され得る。他の実現化例では、あるキュー(たとえばキュー310、312)がいっぱいになった場合にトレースエントリをドロップするのではなく、システム100は、もう一度いっぱいになったキューがエントリを受信するための利用可能キュー空間を有するまで、例示的な処理パイプラインをストールさせるように構成され得る。
【0095】
たとえば、キュー310、312を使用する処理パイプラインは、十分なまたはしきい値の数のトレースエントリがトレースバス314上に併合されるまでストールされ得る。十分なまたはしきい値の数は、1つ以上のトレースエントリがキュー310、312によって受信されるための利用可能なキュー空間をもたらす、特定の数の併合されたトレースエントリに対応することができる。下流のキュー空間が利用可能になるまで処理パイプラインがストールされる実現化例は、トレースエントリがドロップされるのではなく保たれることに基づいた、より高い忠実度のトレースデータを提供することができる。
【0096】
いくつかの実現化例では、ローカルトレースキューは、各トレースエントリがローカルキュー310において1ヶ所のみを占めるように、トレースエントリによって要求されるのと同じくらい幅が広い。しかしながら、共有トレースFIFOキュー312は、いくつかのトレースエントリが共有キュー312において2つの位置を占め得るように、一意的なトレースエントリライン符号化を使用することができる。いくつかの実現化例では、トレースパケットのいずれかのデータがドロップされた場合、部分パケットがトレースエントリログ218に現われないように、パケット全体がドロップされる。
【0097】
一般に、トレースは、システム100の特定のコンポーネントに関連付けられた活動またはハードウェアイベントのタイムラインである。集合体データである(以下に説明される)性能カウンタとは異なり、トレースは、特定されたトレースウィンドウ中に生じるハードウェア活動についての洞察力を提供する詳細なイベントデータを含む。説明されるハードウェアシステムは、トレースエントリの生成、ハードウェア管理バッファでのトレースエントリの一時的格納、1つ以上のトレースタイプの静的および動的イネーブリング、ならびに、ホストシステム126へのトレースエントリデータのストリーミングを含む、分散ハードウェアトレーシングのための大規模なサポートを可能にする。
【0098】
いくつかの実現化例では、トレースは、DMA動作の生成、DMA動作の実行、ある命令の発行/実行、または同期フラグの更新といった、システム100のコンポーネントによって実行されるハードウェアイベントのために生成され得る。いくつかの例では、トレース活動は、システムを通してDMAを追跡するために、または、特定のプロセッサコア上で実行される命令を追跡するために使用され得る。
【0099】
システム100は、ハードウェアイベントのタイムラインから1つ以上のハードウェアイベント322、324を識別する少なくとも1つのデータ構造320を生成するように構成され得る。いくつかの実現化例では、データ構造320は、1つ以上のハードウェアイベント322、324を、少なくともFPC104およびSPC106に関連付けられたイベントの時系列の順序で配置する。いくつかの例では、システム100は、データ構造320を、ホストシステム126のホスト制御デバイスのメモリバンクに格納することができる。データ構造320は、少なくともプロセッサコア104および106によって実行されるプログラムコードの性能を評価するために使用され得る。
【0100】
ハードウェアイベント324によって示されるように、いくつかの実現化例では、特定のトレース識別(ID)番号(たとえばトレースID‘003)が、分散プロセッサユニット間にわたって生じる複数のハードウェアイベントに関連付けられ得る。複数のハードウェアイベントは、特定のメモリアクセス動作(たとえばDMA)に対応することができ、特定のトレースID番号は、1つ以上のハードウェアイベントを相関させるために使用される。
【0101】
たとえば、イベント324によって示されるように、DMA動作用の単一のトレースIDは、DMAにおける複数の異なるポイントに対応する複数のタイムスタンプを含み得る。いくつかの例では、トレースID‘003は、互いに対して何らかの時間離れているとして識別される、「発行済」イベント、「実行済」イベント、および「完了済」イベントを有することができる。よって、この点に関し、トレースIDはさらに、相関に基づいて、およびタイムスタンプを参照して、メモリアクセス動作のレイテンシ属性を判定するために使用され得る。
【0102】
いくつかの実現化例では、データ構造320を生成することは、たとえば、システム100が、ハードウェアイベントの第1の部分集合におけるそれぞれのイベントのイベントタイムスタンプを、ハードウェアイベントの第2の部分集合におけるそれぞれのイベントのイベントタイムスタンプと比較することを含み得る。データ構造320を生成することはさらに、システム100が、イベントの第1の部分集合とイベントの第2の部分集合との比較に部分的に基づいて、相関された一組のハードウェアイベントを、データ構造における提示のために提供することを含み得る。
【0103】
図3に示すように、データ構造320は、特定のハードウェアイベント322、324のレイテンシ属性を示す少なくとも1つのパラメータを識別することができる。レイテンシ属性は少なくとも、特定のハードウェアイベントの持続時間を示し得る。いくつかの実現化例では、データ構造320は、ホストシステム126の制御デバイスによって実行されるソフトウェア命令によって生成される。いくつかの例では、構造320は、制御デバイスがトレースエントリデータをホストシステム126のメモリディスク/ユニットに格納することに応答して生成され得る。
【0104】
図4は、システム100によって実行される直接メモリアクセス(DMA)トレースイベントのための例示的なトレース活動を示すブロック図400である。DMAトレーシングのために、第1のプロセッサノードから第2のプロセッサノードへと発生する例示的なDMA動作についてのデータが、ICI112を介して進むことができ、データ経路に沿って中間ICI/ルータホップを生成することができる。DMA動作がICI112を横断する際、DMA動作は、プロセッサチップ内の各ノードで、および各ホップに沿ってトレースエントリを生成するであろう。ノードおよびホップに沿ったDMA動作の時間的推移を再構築するために、これらの生成されたトレースエントリの各々によって情報が取込まれる。
【0105】
例示的なDMA動作は、図4の実現化例に示すプロセスステップに関連付けられ得る。この動作のために、ローカルDMAが、プロセッサコア104、106の少なくとも1つに関連付けられた仮想メモリ402(vmem402)からHBM108へデータを転送する。図400に示された番号付けは、表404のステップに対応しており、概して、ノードファブリック110における活動、またはノードファブリック110によって始動される活動を表わす。
【0106】
表404のステップは概して、関連付けられたトレースポイントを説明する。例示的な動作は、このDMAのために6つのトレースエントリを生成するであろう。ステップ1は、プロセッサコアからノードファブリック110への最初のDMA要求を含み、それはノードファブリックにおいてトレースポイントを生成する。ステップ2は、ノードファブリック110がプロセッサコアにデータを転送するよう求める読出コマンドを含み、それはノードファブリック110において別のトレースポイントを生成する。vmem402がノードファブリック110の読出を完了すると、例示的な動作は、ステップ3のためのトレースエントリを有していない。
【0107】
ステップ4は、ノードファブリック110が、プロセッサコアにおいて同期フラグ更新を引き起こすために読出リソース更新を行なうことを含み、それはプロセッサコアにおいてトレースポイントを生成する。ステップ5は、次のデータがHBMに書込まれることをノードファブリック110がメモリmux108に通知する書込コマンドを含む。書込コマンドを介した通知は、ノードファブリック110においてトレースポイントを生成し、一方、ステップ6で、HBMへの書込の完了も、ノードファブリック110においてトレースポイントを生成する。ステップ7で、ノードファブリック110は、プロセッサコアにおいて同期フラグ更新を引き起こすために書込リソース更新を行ない、それはプロセッサコアにおいて(たとえばFPC104において)トレースポイントを生成する。書込リソース更新に加えて、ノードファブリック110は、DMA動作のためのデータ完了がプロセッサコアに信号で送り返される受信確認更新(ack更新)を行なうことができる。ack更新は、書込リソース更新によって生成されたトレースエントリと同様のトレースエントリを生成することができる。
【0108】
別の例示的なDMA動作では、DMA命令が発生元ノードのノードファブリック110において発行されると、第1のトレースエントリが生成される。DMAについてのデータを読出し、そのデータを送信用キューに書込むために使用される時間を取込むために、追加のトレースエントリがノードファブリック110において生成され得る。いくつかの実現化例では、ノードファブリック110は、DMAデータを、より小さいチャンクのデータへとパケット化することができる。より小さいチャンクへとパケット化されたデータのために、読出および書込トレースエントリが、最初のデータチャンクおよび最後のデータチャンクについて生成され得る。オプションで、最初と最後のデータチャンクに加えて、すべてのデータチャンクが、トレースエントリを生成するために設定され得る。
【0109】
ICIホップを要求し得るリモート/非ローカルDMA動作のために、最初のデータおよび最後のデータチャンクは、ICI/ルータ112に沿った各中間ホップにおける入口および出口ポイントで、追加のトレースエントリを生成することができる。DMAデータが宛先ノードに到着すると、以前のノードファブリック110エントリと同様のトレースエントリが、宛先ノードで生成される(たとえば、最初と最後のデータチャンクの読出/書込)。いくつかの実現化例では、DMA動作の最後のステップは、DMAに関連付けられた実行された命令が宛先ノードで同期フラグの更新を引き起こすことを含み得る。同期フラグが更新されると、DMA動作の完了を示すトレースエントリが生成され得る。
【0110】
いくつかの実現化例では、トレースポイントが実行され得るように、DMAトレーシングが、FPC104、SPC106、またはHIB114によって、各コンポーネントがトレースモードである場合に始動される。システム100のコンポーネントは、トリガーメカニズムを介したFPC104またはSPC106におけるグローバル制御に基づいて、トレースモードに入ることができる。システム100のコンポーネントによるプログラムコードの実行に関連付けられた特定のアクションまたは状態の発生に応答して、トレースポイントはトリガーする。たとえば、プログラムコードの一部は、システム100の少なくとも1つのハードウェアコンポーネントによって検出可能である、埋込まれたトリガー機能を含み得る。
【0111】
システム100のコンポーネントは、FPC104またはSPC106の少なくとも1つによって実行されるプログラムコードの一部に関連付けられたトリガー機能を検出するように構成され得る。いくつかの例では、トリガー機能は、1)実行されたプログラムコードの一部またはモジュールにおける特定のシーケンスステップ、または、2)システム100の分散プロセッサユニットによって使用されるGTCによって示される特定の時間パラメータ、のうちの少なくとも1つに対応することができる。
【0112】
トリガー機能の検出に応答して、システム100の特定のコンポーネントは、1つ以上のハードウェアイベントに関連付けられたトレースエントリデータをハードウェアコンポーネントの少なくとも1つのメモリバッファに格納させる少なくとも1つのトレースポイント(たとえばトレースイベント)を、始動、トリガー、または実行することができる。上述のように、格納されたトレースデータは次に、少なくとも1つのトレースチェーン203、205、207を経由して、チップマネージャ216に提供され得る。
【0113】
上述のように、図1~4は、分散コンピューティングシステムにおけるハードウェアイベントトレーシングのためのアプローチを例示してきた。残りの図5~7は、分散コンピューティングシステムにおける同期されたハードウェアイベント収集のためのアプローチを説明する。ハードウェアイベントの同期された収集は、1つ以上のトリガーメカニズムに少なくとも部分的に基づき得る。
【0114】
図5は、グローバル時間カウンタ(GTC)502のための例示的なデータ構造と、分散ハードウェアトレーシングのための例示的なコンピューティングシステム(たとえばシステム100)によるGTC502の使用シナリオを示す表504および506とを示す。図5の実現化例では、GTC502は、60ビットのカウンタと4ビットのオフセットとを含む64ビット値である。代替的な実現化例では、GTC502は、64ビット未満から64ビットを超える範囲のビット単位のサイズを有する固定サイズの2進データ片であってもよい。
【0115】
GTC502に関連付けられたデータ構造は、グローバルマスターカウンタにだけでなく、図6の実現化例を参照して以下に説明されるローカル時間カウンタ(local time counter:LTC)にも当てはまる。GTC502の上位60ビットは、(以下に説明される)GTC位相変化に対処するために「キャッチアップ」または「キャッチダウン」する場合を除き、サイクル毎に1ずつインクリメントする実時間カウンタに対応する。たとえば、ローカルGTC502(すなわちLTC)の更新中、ローカルGTC502は、マスターグローバルGTC502に「キャッチダウン」するために、数サイクルの間「ティック」することができない。これらのシナリオでは、下位の4つの「オフセット」ビットは、プログラムコード実行中に生じ得るGTC位相変化を補償するために使用される。
【0116】
GTC位相変化に対処する場合、最後の4ビットは、これらの状況でインクリメントされ得る。これは、1つには、さもなければGTCが同一になってしまうであろうローカルハードウェアイベント活動のためのタイムスタンプ間の区別を維持するためである。ほとんどの他の例では、GTC502の4ビットのオフセットはクリアであり、したがって未使用である。いくつかの実現化例では、オフセットビットを15までカウントし、そこで止めてもよい。一方、代替的な実現化例では、オフセットビットを、特定のカウンタ設計によって必要とされるような任意の整数値までカウントしてもよい。いくつかの例では、GTC502の上位60ビットが再びティックし始めると、オフセットビットはクリアされる。
【0117】
GTC502、602(以下に説明される)の構成および管理に関し、いくつかの実現化例では、実行されたプログラムコードは、システム100の1つ以上のプロセッサチップを構成することによってGTCを構成またはセットアップすることができる。プロセッサチップを構成することは、システムのためのグローバルマスターGTCを指定することと、システム100のそれぞれのノードまたはコンポーネントのためのローカルマスターGTC(すなわちLTC)を指定することとを含み得る。
【0118】
コンポーネントは、実行されるプログラムコード/ソフトウェアが、1つ以上のローカルGTC(すなわち図6のLTC)のクロックレイテンシを計算し補償するために、およびLTCの手動調整を行なうために使用する、ハードウェアノブ/機能を含み得る。LTCのクロックレイテンシの補償および手動調整は、位相変化を最小化または緩和するように、マスターGTCに対して行なわれる。いくつかの実現化例では、システム100は、コンポーネントハードウェア機能が「pingおよびエコー」メカニズムを介してリンクレイテンシを自動的に判定する、レイテンシ補償のためのオートパイロットモードを含み得る。
【0119】
いくつかの実現化例では、システム100は、例示的な制御/ステータスレジスタ(CSR)のパラメータ値を調節するために使用されるプログラムコードの一部または部分集合を含む、リンク/ソフトウェアスタックを含み得る。いくつかの例では、リンクスタックプログラムコードの実行に応答して生成された制御信号は、1つ以上のパラメータ値がCSRに書込まれるようにする。これらのCSRパラメータ値は、GTC502、602またはLTCのさまざまな局面を構成するために使用され得る。
【0120】
たとえば、1つ以上のパラメータは、1)マスターグローバルGTC、ローカルマスターGTC、またはローカルスレーブGTCの選択、および更新サンプルサイズの選択を引き起こすGTC_configパラメータ、2)マスターGTCをリセットするかまたは「ping」測定値をクリアするために使用されるGTC_syncパラメータ、3)手動レイテンシ補償を構成するGTC_latency_compensation_controlパラメータ、4)最小pingレイテンシを示すGTC_link_pingパラメータ、5)実際のGTC値を示すGTC_countパラメータ、および/または、6)ローカルGTCとマスターGTCとの観察される最大の差を示すGTC_max_diffパラメータ、を含み得る。
【0121】
上述のように、グローバルマスターGTC502と1つ以上のローカルGTC502とは、イベントタイムスタンプを得るために、および、システム内で生じるハードウェアイベント間の順序立てられた順序付けを判定するために、システム100によって使用され得る。活動間の順序に加えて、GTC502は、活動のレイテンシを判定するために使用され得る。いくつかの実現化例では、特定のGTC502が位相変化を呈するかもしれず、よって、判定されたレイテンシは、1つ以上のサイクルごとに不正確であるかもしれない。
【0122】
上述のように、あるGTC502がインクリメントするレートは、ローカルGTCがグローバルマスターと異なるかどうかに依存して、すなわち、位相変化がある場合に、変わり得る。定常状態では、位相変化がない場合、マスターグローバルGTC502は、特定のコンポーネントのLTCとまったく同様に、サイクル毎に1回インクリメントし、(たとえばあるコンポーネントの)ローカル活動のレイテンシおよび順序をカウントするために使用され得る。
【0123】
いくつかの実現化例では、マスターGTC502は、あるLTCよりも遅くカウントするかもしれない。これらの例では、GTC502のオフセットビットは、ローカルクロックサイクル毎に1回インクリメントし続ける。表504、506によって示されるように、GTCオフセットビットの一意的な機能性を考慮すると、拡張GTC(GTC-ext)が、システム100による使用のために定義され得る。いくつかの実現化例では、GTC-extは、上位60ビット(GTC:top)と下位の4つのオフセットビット(GTC:offset)とを加えることによって構築され得る。一方、他の実現化例では、特定のプロセッサで実行されるプログラムコードはGTC-extを、GTC:offsetの小数値が合計されたGTC:topと等しくなるように計算することができる。
【0124】
いくつかの実現化例では、オフセットビットをインクリメントすることに応答して、GTC-extパラメータが、イベント順序付けおよびローカル動作のレイテンシを判定するために使用され得る。表504、506は、ハードウェアイベント順序付けおよびイベント動作のレイテンシを判定する際にGTC-extパラメータが有用であることが分かり得る使用シナリオを示す。
【0125】
表504は、活動またはハードウェアイベント間の順序を判定するためのGTC使用例を説明する。いくつかの実現化例では、グローバルな順序、たとえば、少なくとも2つの別個の計算ノード(たとえば、マスターGTCを各々有する別個のノード)間の1つ以上の活動の順序を判定するためにGTC502を使用する場合、活動分析中にGTC502がインクリメントするレートが適切ではないかもしれない。しかしながら、特定のノードでのローカルGTC502がそのノードのマスターGTCよりも遅い場合、表504の機能508によって示されるように、2つのローカル活動を、または、2つのローカル活動がリモートリソースへの書込を始動した時間を区別するために、GTC-extが使用され得る。
【0126】
表506は、ローカル活動/イベントまたは2つ以上のノードにまたがる活動のレイテンシを計算するためのGTC使用例を説明する。いくつかの実現化例では、システムパラメータは、特定のチップでのGTC502が正常なレートでティックしている(すなわち、指定されたマスターグローバルクロックと同期している)か、または、指定されたマスターグローバルクロックと位相がずれたレートでティックしているかを示さないかもしれない。このため、いくつかの例では、表506の機能510によって示されるように、ローカル活動のイベントレイテンシ判定のために、LTCが使用され得る。一方、他の実現化例では、1つ以上の動作のレイテンシを測定するために、GTCまたはGTC-extが使用され得る。
【0127】
一般に、システム100のさまざまなノードまたはコンポーネントで生じるハードウェアトレースイベントは、GTCパラメータを含み得る。いくつかの実現化例では、トレースされたハードウェアイベント/活動がシステム100の複数のノードにまたがる場合、ローカル活動に関連付けられたレイテンシは、LTCではなくGTCを介して計算されるべきである。これらの実現化例では、GTCまたはGTC-extの使用は、好ましいカウンタ/クロックソリューションになり得る。なぜなら、2つ以上の別個のノード間にわたるLTCは、同期していないかもしれず、または同じレートでクロック/ティックしていないかもしれないためである。
【0128】
図6は、分散ハードウェアトレーシングのための例示的なコンピューティングシステム(たとえばシステム100)のそれぞれのコンポーネントに関連付けられた、例示的な時間カウンタおよび1つ以上のカウンタのブロック図を示す。時間カウンタは、グローバル時間カウンタ(GTC)602と、システム100のそれぞれのコンポーネントに各々関連付けられた複数のローカル時間カウンタ(LTC)とを含み得る。
【0129】
明瞭にするために、図6はシステム100の特定のコンポーネントに結合された単一のLTCブロックを図示しているが、代替的な実現化例では、各コンポーネントは1つまたは複数のローカル時間カウンタ/LTCを含み得る。また、図6は単一のマスターGTC602を図示しているが、この機能はまた、グローバルマスターとして機能するよう選択された特定のLTCに対応するか、またはそのようなLTCを表わすことができる。たとえば、いくつかの実現化例では、GTC602は、グローバルマスタークロック/カウンタとして機能するための特定のLTCを選択するためにホストシステム126によって実現されるカウンタ選択論理に対応する。
【0130】
いくつかの例では、システム100は、グローバルマスタークロックとして機能するためのICI112の例示的なノードを選択することができ、例示的なノードのLTCはクロックサイクル毎に1回ずつティックする。一方、代替的な実現化例では、GTC602は、グローバルマスタークロックとして機能し、特定の時間パラメータをシステム100のコンポーネントに一斉送信する、グローバル時間カウンタである。いずれの実現化例でも、GTC602は、システム100全体にわたって生じるハードウェアイベントを相関させるために使用される、グローバルに同期するクロックであってもよい。
【0131】
いくつかの実現化例では、上述のように、GTC602はシステム100全体にわたって小さい位相変化を有し得るものの、長期の時間ドリフトを回避するように構成され得る。たとえば、GTC602は、特定のプロセッサチップの例示的な発振器(たとえば、グローバルマスターになるために選択された発振器)に基づいてティックまたはカウントすることができる。一般に、システム100におけるプロセッサチップの選択された発振器に特有の長期ドリフトまたは位相変化はないが、時間がたつにつれて、別個のプロセッサチップ間の発振器に対してドリフトまたは変化が生じ得る。よって、GTC602は、グローバルマスターでないプロセッサチップでのローカルクロック(LTC)よりも速くまたは遅くインクリメント(すなわちティック)するかもしれない。
【0132】
グローバルマスターとして、GTC602の現在のマスター値が、ICI112のすべてのノードに一斉送信され得る。例示的なICIノードは、システム100の1つ以上のコンポーネントに対応することができる。受信ノードは、特定のコンポーネント/ノードに特有のローカル動作に使用される例示的なGTCのそのローカル値の差を計算することができる。例示的なサンプリング期間にわたる受信されたマスター値とローカルGTC値との最小の差が、ローカルGTCを更新するために使用され得る。時間がたつにつれて、マスター値とローカルGTC値との間の位相変化は、もしあれば、上述の1つ以上のオフセットビットを使用して実現されるカウンタ調節に基づいて「キャッチアップ」され得る。
【0133】
図6の実現化例に示すように、システム100のコンポーネントは各々、1つ以上の性能カウンタを含み得る。システム100内の性能カウンタの集団的集合または部分集合は、ここに複数のカウンタ600として記載される。特に、コンポーネント毎に具体的には、FPC104は複数のカウンタ604を含み、SPC106は複数のカウンタ606を含み、muxメモリ(HBM)108は複数のカウンタ608を含み、ノードファブリック110は複数のカウンタ610を含み、ICI112は複数のカウンタ612を含み、HIB114は複数のカウンタ614を含み得る。
【0134】
システム100では、1つ以上のプロセッサによって実行されるプログラムコードの性能分析は、システムの特定のコンポーネントに関連付けられた1つ以上のハードウェア性能カウンタの使用に基づいてイネーブル/ディスエーブルにされ得る。これらの性能カウンタは、図6の複数のそれぞれのカウンタに対応することができ、1)活動カウンタ、2)ストールカウンタ、3)統計カウンタ、および、4)サンプリングカウンタ、のうちの少なくとも1つを含み得る。
【0135】
いくつかの実現化例では、システム100は、実行されるプログラムコードの技術的局面に関連付けられた特定されたカウントデータをインクリメントし格納するようにプログラムされ得る、さまざまな他のタイプの性能カウンタを含む。また、1つ以上のカウンタの使用を通し、トレース活動のためのハードウェアサポートは、たとえば、命令トレーシングイベントデータの取込み、メモリmuxトレーシングイベントデータの取込み、DMAトレーシングイベントデータの取込み、および、トレースバッファにおけるイベントデータの取込みに関連する機能を含み得る。
【0136】
いくつかの実現化例では、複数のカウンタ600のうちの少なくとも部分集合は、HIB114を介してホストシステム126によってアクセス可能であるCSRまたはカウントレジスタであってもよい。これらのカウントレジスタ/CSRは、特定のハードウェアコンポーネントによって受信、処理、または実行された命令を識別するさまざまなタイプのカウントデータ/情報、および、実行されるプログラムコードの技術的局面に関連付けられたさまざまな他のタイプのデータ/情報を格納するように構成された記憶デバイスであってもよい。いくつかの例では、データは、特定の命令またはプロセッサ動作に関連付けられたカウントまたはインクリメント(たとえばカウントパラメータ)の形で格納される。いくつかの実現化例では、システム100の複数のカウンタ600は、何百または何千もの性能カウンタ/カウントレジスタに対応することができる。
【0137】
上述の少なくとも4つのタイプの性能カウンタに関し、いくつかの実現化例では、活動カウンタは、異なるハードウェアユニットのための利用パラメータに関連付けられたデータを格納し分析するために使用され得る。活動カウンタはまた、実行されるプログラムコードの一部を分析するために、または、コード実行中に転送されているデータの量またはタイプを分析するために使用され得る。たとえば、いくつかのプロセッサコアは、命令のさまざまなストリームにおけるインストラクションミックスを導き出すために使用される活動カウンタを含み得る。たとえば、活動カウンタは、例示的な命令ストリームにおける特定の命令タイプの実行に関連付けられたカウントを格納するように構成され得る。
【0138】
いくつかの実現化例では、活動カウンタは、ある命令タイプの発行時にインクリメントされる発行カウンタ、メモリ経路上で利用可能であり、たとえば(たとえばmux108とVMEM402との間の)メモリ転送に関連付けられた読出/書込に応答してインクリメントされるメモリ活動カウンタ、ならびに、割込み、同期フラグ、および警告カウンタなどの命令の発生に応答してインクリメントされる1つ以上の他の一般活動カウンタといった、カウンタの部分集合を含み得る。
【0139】
ストールカウンタに関し、いくつかの実現化例では、これらのカウンタは、あるハードウェアユニット/コンポーネントが、命令処理またはデータ計算に関連付けられた有用な作業をする代わりに、特定のストール理由に起因してストールされたサイクルの数を示すストールカウントを提供することができる。たとえば、特定のハードウェアユニットの利用が利用しきい値未満である場合、または、プログラムコードが所望のしきい値性能レベルで機能していない場合、ストールカウンタは、(たとえば利用/性能しきい値を下回る)利用および性能問題の原因分析を行なうための適切なストール情報を得るために、システム100によって使用され得る。
【0140】
いくつかの実現化例では、ストールカウンタは、利用不可能として示された通常利用可能なあるメモリ経路の検出に基づくストール、1つ以上の同期フラグ命令の実行の遅延に基づくストール、および/または、利用不可能として示された通常利用可能な1つ以上の実行ユニット(たとえばXU122またはRPU124)に起因するストール、に関連する適切な情報を提供することができる。
【0141】
いくつかの実現化例では、FPC104は、VPU118によって行なわれるベクトル化計算のためのスカラー量を提供する少なくとも1つのスカラーユニットを含み得る。スカラーユニットに関連付けられたストールカウンタは、スカラーユニット内で生じ得る1つ以上のハザードに起因するストールについての適切な情報を提供することができる。いくつかの例では、さまざまなハザードタイプが生じる場合があり、FPC104は、各ハザードタイプのためのストールカウンタを含み得る。例示的なハザードタイプは、DMA遅延ハザード、スカラーフェンス遅延ハザード、および/または、スカラー遅延命令ハザードを含み得る。
【0142】
統計カウンタに関し、いくつかの実現化例では、システム100のコンポーネントは1つ以上のデータキュー(たとえば記憶媒体)を含んでいてもよく、活動カウンタは、キュー利用に関連する情報を提供するように構成され得る。しかしながら、いくつかの例では、キューのための活動カウンタは、実行されるプログラムコードによってキューがどれだけ利用されているかに関するあらゆる情報を提供するのに十分ではないかもしれない。これらの例では、平均キュー占有率と、あるキューで費やされる時間とに関連する計算値が求められ得るようにあるデータカウントを得るために、統計カウンタが1つ以上のコンポーネントにおいて利用可能であり得る。
【0143】
いくつかの実現化例では、キュー統計カウンタは、キュー占有率、キュー挿入ステータス、キューフルステータス、または、しきい値占有率ステータスでのキューに関連する統計カウントを提供することができる。いくつかの例では、キュー統計カウンタがアクティブである場合、コンポーネントキューに関連付けられた占有率カウンタが、各プロセッサ/命令サイクルにおけるキューの現在の占有率に基づいてインクリメントされる。
【0144】
他の例では、アクティブなキュー統計カウンタが、キューフルステータスに関連するカウントを提供する場合、カウンタは、キューがフルに占有されるサイクルで(たとえば1ずつ)インクリメントされる。また、アクティブなキュー統計カウンタが、キュー挿入ステータスに関連するカウントを提供する場合、カウンタは、データチャンクがキューに配置されること(すなわちキュー挿入)に応答してインクリメントされる。さらに、しきい値占有率ステータスでのキューについては、カウンタは、現在のキュー占有率が特定のキューしきい値占有率よりも大きい各サイクルで(たとえば1ずつ)インクリメントされ得る。
【0145】
いくつかの実現化例では、システム100のコンポーネントは、データ構造(たとえば構造320または620)を生成するためにホストシステム126から周期的に読出され得るサンプリングカウンタの集合を含み得る。データ構造は、ハードウェアイベント、トレース活動、または、システム100の分散プロセッサユニットで生じる活動/イベントについての詳細なデータ処理情報に関するサンプリングされた統計を含み得る。いくつかの実現化例では、サンプリングされた統計に基づいて生成されたデータ構造は、たとえば、(上述の)構造320または(以下に説明される)構造620を含み得る。いくつかの例では、生成されたデータ構造は、システム100のコンポーネントによって実行されるプログラムコードの性能を分析するためにホストシステム126の監視エンジン128によって使用される1つ以上の監視ツールを構築するために使用される。
【0146】
上述のように、システム100のコンポーネントは、1つ以上のトリガーメカニズムに関連付けられたグローバル制御に基づいて、イベントトレーシングを始動することができる。いくつかの実現化例では、複数のカウンタ600は、トレースポイントに、1つ以上のハードウェアイベントに関連する特定のデータを含むトレースエントリを実行させ生成させるトリガーメカニズムを始動するために、イネーブルにされ、ディスエーブルにされ、または他の態様で制御され得る。いくつかの実現化例では、ハードウェアイベントに関連するトレースエントリは、上述の複数のカウンタ600のうちの1つ以上によって集められたカウントデータに少なくとも部分的に基づいて、イベントデータをポピュレートされる。
【0147】
グローバル制御は一般に、CSR制御(すなわち、特定のCSRハードウェア機能/ノブ)と、カウンタがインクリメントされることを可能にし、トレースが協調的で同期された態様で生成されることを可能にするトリガーメカニズムとの使用を含む。いくつかの実現化例では、協調的で同期された制御が、システム100の分散プロセッサユニット間にわたって生じ得る。上述のように、グローバルマスタークロック(たとえばGTC602)として使用されるグローバルに同期するカウンタの使用を通して、同期されたトレーシングが部分的にイネーブルにされ得る。
【0148】
いくつかの実現化例では、システム100は、分散プロセッサユニットのグローバル時間クロックによって示された特定の時間パラメータ(たとえば時間パラメータ09:01.13)に基づいて、同期されたイベントトレーシングをトリガーする。たとえば、システム100は、GTC602のグローバルマスタークロック値を、ある動作の持続時間の間、すべてのカウンタおよびトレーシングを正確に起動および停止するためのトリガーとして使用することができる。
【0149】
いくつかの例では、システム100の例示的なソフトウェアコンパイラは、GTC602に関連付けられた予め定義された特定の時間ウィンドウに基づくトリガーメカニズムのためのオペランドまたはパラメータ値を含む命令を、実行されるプログラムコード内に埋込むかまたは挿入することができる。予め定義された時間ウィンドウは、トレースイベント起動時間(たとえば、第1のGTC602時間パラメータ)と、トレースイベント停止時間(たとえば、第1のGTC時間パラメータよりも時間が遅い第2のGTC602時間パラメータ)とを有する、例示的なトレース持続時間を含み得る。
【0150】
図6の実現化例に示すように、システム100のコンポーネントは、複数の性能カウンタ600を含み得る。それはトリガーメカニズムに関連するため、性能カウンタ制御は、カウンタをイネーブルおよびディスエーブルにするための、ならびに、カウンタをクリアするための、およびカウンタを一時停止するためのメカニズムを含み得る。また、上述の統計カウンタ機能に加えて、いくつかのハードウェアユニットは、イベントがカウントされるハードウェアユニット内のハードウェアブロックの部分集合を選択するために使用される関連付けられたセレクタ(たとえばCSR)を有する統計カウンタを含み得る。
【0151】
トレースmux制御を参照して上述されたように、いくつかの実現化例では、トレーシングは、システム100によって実行されるCSR書込に基づいてイネーブルおよびディスエーブルにされ得る。いくつかの例では、トレーシングは、FPC104(またはコア116)における例示的なトレースマーク(trace-mark:TM)レジスタの値に基づいて、もしくは、SPC106における例示的なTMレジスタの値に基づいて、システム100によって動的に起動および停止され得る。
【0152】
いくつかの実現化例では、例示的なトレース制御パラメータが、特定のトレースウィンドウを定義するために使用され得る。たとえば、トレース制御パラメータは、トレースウィンドウが、GTC602の下限および上限(たとえば起動時間&停止時間クロック値)、ならびに、FPC104における例示的なトレースマークレジスタまたはSPC106における例示的なトレースマークレジスタの下限および上限によって定義されることを可能にし得る。
【0153】
いくつかの実現化例では、システム100内で実行されるプログラムコードは、FPC104またはSPC106のうちの1つにおいて各プロセッササイクルでトレースイベントをトリガーするためのトリガー処理論理を含み得る。いくつかの例では、トリガー論理は、実行されるソフトウェア/プログラムコードによって、1つ以上の命令ストリームに挿入され得る特別の「トレースマーク設定」命令に関連付けられる。
【0154】
たとえば、FPC104のためのトリガー論理に関し、トレースマークを設定するための例示的な命令がFPC104内で発行される場合、トリガー論理は、命令のトレースマークオペランドを分析することと、オペランドのパラメータ値を例示的なトレースマークウィンドウの値と比較することとを含み得る。この分析および比較は、オペランドパラメータ値が、特定のトレースマークウィンドウの下限値と等しいか、または、トレースマークウィンドウの下限値および上限値内に収まるかを判定するために使用される。
【0155】
オペランドのパラメータ値がトレースマークウィンドウの限界値内にある場合、トリガーを作動させること(たとえば、トリガー条件を満たすこと)ができ、FPC104は、トレーシングまたはカウンティングモードに入って、複数のカウンタ604のうちの1つ以上のカウンタをイネーブルにすることができる。いくつかの実現化例では、次の「トレースマーク設定」命令が、オペランド値が例示的なトレースマークウィンドウの上限と等しいかまたはそれから外れることに基づいてカウンティング停止トリガーを作動させるオペランドパラメータ値を含む場合、FPC104はトレーシング/カウンティングモードを出る。
【0156】
いくつかの実現化例では、システム100は、i)実行されるプログラムコードの少なくとも第1の部分における例示的なトレースマークオペランドの発生を識別することのうちの少なくとも1つに基づいて、トリガー条件が満たされていることを検出することができる。トレースマークオペランドは、1つ以上のトレースイベントおよび/または性能カウンティングを始動するために使用されるパラメータ値(たとえばコードステップシーケンス/値)を含み得る。システム100はまた、GTC602の現在の時間が、1つ以上のトレースイベントおよび/または性能カウンティングを始動するために使用される予め定義された時間値を示しているという判定に基づいて、トリガー条件が満たされていることを検出することができる。
【0157】
トリガー条件が満たされていることを検出することに応答して、システム100のプロセッサコンポーネントは、プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成することができる。制御信号は、1つ以上のハードウェアイベントに関連付けられたさまざまなカウントデータをカウントレジスタに格納させることができる。いくつかの実現化例では、システム100は、実行されるプログラムコードに関連付けられた1つ以上の性能属性を示すデータ構造を、たとえばホストシステム126を介して生成するように構成またはプログラムされ得る。たとえば、データ構造は、格納されたカウントデータの1つ以上のカウントパラメータに基づいて生成され得る。いくつかの実現化例では、カウントレジスタは、システム100の1つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタ600のうちの1つである。
【0158】
トレースマークトリガーをさらに説明するために、例示的なコードシーケンスでは、トレースマーク設定命令は、分散ソフトウェア構成体(たとえば、例示的なニューラルネットワーク推論作業負荷の計算ステップ)を識別する32ビットのトリガーオペランドを含み得る。FPC104は、プログラムコードにおいて「tracemark_limits」として識別される特殊用途CSRを含み得る。この例示的なコードシーケンスでは32ビットのオペランドが説明されているが、代替的な実現化例では、トリガーオペランドまたはレジスタ制限オペランド/パラメータ値は、32ビットよりも少ない、または多いビットを有する2進データ構造であってもよい。
【0159】
この特殊用途CSRは、少なくとも2つの32ビット値を符号化することができる。第1の符号化された32ビット値は、トレーシング/カウンティングを起動するために使用されるトレースマーク下限に対応することができ、一方、第2の符号化された32ビット値は、トレーシング/カウンティングを停止するために使用されるトレースマーク上限に対応することができる。いくつかの実現化例では、第1および第2の符号化された値は、例示的なニューラルネットワーク推論作業負荷などの分散ソフトウェアプログラム/構成体、または任意の他の分散プログラムコードにおける計算ステップに対応する。
【0160】
例示的なコードシーケンスを再び参照すると、「トレースマーク設定」命令が実行されると、32ビットのオペランド値が、tracemark_limitsレジスタにおける第1および第2の符号化された値と比較される。この比較に基づいて、トリガーオペランドが起動値(すなわち第1の符号化された値)と等しい/一致するかまたは起動値よりも高い値を有する場合、性能分析活動がトリガーされる。同様に、トリガーオペランドが停止値(すなわち第2の符号化された値)と一致するかまたは停止値よりも高い値を有する場合、進行中の性能分析活動が停止される。
【0161】
トレースマークトリガーとほぼ同様に、GTC602が(たとえばFPC104またはSPC106のための)トリガーとして使用される場合、特定のコンポーネントのための例示的なGTC/LTCトリガーレジスタの上限および下限が、GTC602の現在値に対して評価され得る。よって、GTCトリガーを使用してトレース活動を実行するために、GTC602の現在の時間パラメータまたは値を、予め定義された例示的な時間ウィンドウの下限と比較することができる。同様に、カウント活動を始めるためのGTCトリガーの実行後、GTC602が上限値と一致するかまたはそれから外れるかを判定するために、GTC602の現在の時間パラメータまたは値を、GTCトリガーレジスタの上限と比較することができる。GTC602が少なくとも上限値と一致することに応答して、コンポーネントがカウンティングモードを出るようにするためにカウンティング停止トリガーが作動するであろう。
【0162】
いくつかの実現化例では、SPC106は、FPC104のトレースマーク設定命令に相当するものを含む。よって、SPC106のためのトリガー処理論理は、FPC104での態様と同じかまたはほぼ同様の態様で機能することができる。たとえば、トレースマークパラメータが、SPC106によって発行された1つ以上の命令へのオペランドとして含まれ得る。いくつかの例では、オペランドのトリガー評価が各命令発行時に生じ、評価論理は、カウンティングがFPC104において(たとえばトレースマークオペランドを使用して)イネーブルにされる態様とほぼ同様であってもよい。たとえば、SPC106では、トレースマーク設定命令に含まれるトレースマークオペランドが例示的なトレースウィンドウの下限および上限内にある場合、トレーシングはイネーブルにされる。同様に、トレースマーク命令に含まれるトレースマークオペランドがトレースウィンドウの下限および上限外にある場合、トレーシングはディスエーブルにされる。
【0163】
上述のように、GTC602またはトレースマーカーを使用することに加えて、システム100は「各自」トレースモードを含み得る。一般に、この各自トレースモードは、プロセッサチップ全体にわたるトレーシングが、たとえばFPC104またはSPC106のコンポーネントによって生成される制御信号によって制御されるようにすることができる。いくつかの実現化例では、制御信号は、システム100の分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータであってもよい。いくつかの例では、特定の性能状態は「各自」トレースモードに対応する。
【0164】
いくつかの実現化例では、1つ以上のハードウェアコンポーネント(たとえばHIB114またはICI112)は、「各自」トレースモードの起動に応答してイベントトレーシングを始動するように、もしくは、各自トレースモードを示す伝搬する制御信号を単に無視するようにプログラムまたは構成され得る。このため、システム100は各自トレース制御信号を伝搬するためのシグナリングメカニズムを含み得るものの、システム100はまた、少なくとも1つのハードウェアコンポーネントに制御信号を無視させるためのメカニズムを含み得る。
【0165】
たとえば、システム100のユーザ(たとえば性能アナリスト)が、すべてのホスト通信を示すデータパケットを追跡するためにHIB114を使用したいかもしれない。ユーザは、システム100の他のハードウェアコンポーネントからデータのある単一ステップシーケンスを取込むために各自トレースモードも使用しながら、HIB114が「常時トレース」モードに入るようにするための例示的なプログラム命令を、たとえば外部コンパイラを介して挿入することができる。よって、常時トレースモードで実行されるようにプログラムされた場合、HIB114は、他のハードウェアコンポーネントから単一ステップシーケンストレースデータを生成するために使用される各自トレース制御信号を無視することができる。
【0166】
いくつかの実現化例では、システム100のコンポーネントによるプログラムコードの実行に関連する特定のアクションまたは状態の発生に応答して、トレースポイントはトリガー可能である。たとえば、分散ソフトウェアプログラムは、共有されるかまたは重複するコードシーケンスまたはステップを各々含む複数のソフトウェアモジュールを含み得る。たとえば、プロセッサコア104、106は各々、分散ソフトウェアプログラムの一部を受信して実行することができ、各プログラム部分は、例示的なコードシーケンス1~100を含み得る。
【0167】
上述のように、いくつかの実現化例では、システム100は、分散プログラムコードの特定のシーケンスステップを有する、または当該シーケンスステップに基づいた、1つ以上のトリガー条件/メカニズムを含むように構成され得る。よって、システム100は、コード実行中にプロセッサコア104、106の各々がある符号化シーケンス/ステップ(たとえばコードシーケンスステップ33)に到着することに応答して、トレースポイントをトリガーするように構成され得る。いくつかの例では、実行された分散プログラムコードの一部は、システム100の少なくとも1つのハードウェアコンポーネントによって検出可能である、埋込まれたトリガー機能を含み得る。
【0168】
たとえば、上述のように、システム100は、FPC104またはSPC106のうちの1つによって実行されるプログラムコードの少なくとも一部におけるオペランドの発生を識別することに基づいて、1つ以上のトリガー条件が満たされていることを検出するように構成され得る。少なくとも1つのトリガー条件が満たされていることを検出することに応答して、システム100は、トレースエントリ/トレースデータまたはカウントデータを生成する1つ以上のトレースイベントを始動することができる。いくつかの実現化例では、生成されたトレースエントリは、分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベント間で共有される少なくとも1つの属性(たとえば、共有されるタイムスタンプまたはコードシーケンスステップ)を含み得る。
【0169】
たとえば、データ構造620によって示されるように、生成されたトレースエントリ622は同期されたトレースイベントに対応することができ、トレースデータは、それぞれのハードウェアイベントのための一意的なトレース識別子と、少なくとも2つのそれぞれのハードウェアイベント間で共有されるグローバルハードウェアイベントタイムスタンプ(たとえば09:01.13)とを含み得る。このため、トレースエントリ622については、それぞれのハードウェアイベント間で共有される少なくとも1つの属性は、ハードウェアイベントタイムスタンプであり得る。同様に、システム100が特定のコードシーケンスに基づいてトレースポイントをトリガーした場合、トレースエントリ624については、それぞれのハードウェアイベント間で共有される少なくとも1つの属性は、コードシーケンスまたはトレースマークステップであり得る。
【0170】
いくつかの実現化例では、トレースエントリは、タイムスタンプヘッダまたはフィールドを含み得る。タイムスタンプヘッダは、トレースエントリが生成された時間を識別する48ビットのタイムスタンプを含み得る。いくつかの例では、タイムスタンプヘッダは、GTC502の下位48ビットに対応することができる。
【0171】
上述のように、いくつかの実現化例では、システム100のコンパイラが、複数のトリガー条件のための1つ以上のオペランドを、システム100の例示的なプロセッサコアによって実行されるプログラムコードの一部に挿入することができる。たとえば、FPC104に関連付けられたコンパイラが、トリガー条件のための1つ以上のオペランドを、FPC104によって実行されるプログラムコードの一部に挿入するかまたは埋込むことができる。同様に、SPC106に関連付けられたコンパイラが、トリガー条件のための1つ以上のオペランドを、SPC106によって実行されるプログラムコードの一部に挿入するかまたは埋込むことができる。
【0172】
一般に、上述のように、システム100は、1つ以上のトリガー条件を検出し、条件の検出に応答して少なくとも1つのトレースイベントを始動するように構成される。いくつかの実現化例では、少なくとも1つのトレースイベントを始動することは、システム100がたとえば第1の制御信号をFPC104の第1の性能カウンタ/レジスタ(たとえば活動カウンタなどのCSR)に提供することを含み得る。この第1の制御信号は、少なくとも1つのハードウェアイベントに関連付けられたデータを第1の性能カウンタに格納させることができる。
【0173】
同様に、いくつかの実現化例では、少なくとも1つのトレースイベントを始動することはさらに、システム100がたとえば第2の制御信号をSPC106の第2の性能カウンタ/レジスタ(たとえば統計カウンタなどのCSR)に提供することを含み得る。この第2の制御信号は、少なくとも1つのハードウェアイベントに関連付けられたデータを第2の性能カウンタに格納させることができる。
【0174】
いくつかの実現化例では、少なくとも1つのハードウェアイベントに関連付けられたデータは、1)システム100の分散プロセッサユニットのあるプロセッサコアの特定のメモリバッファに書込まれたバイトの数、または、2)システム100の分散プロセッサユニットの特定のプロセッサコアによって実行された命令の数、のうちの1つを含み得る。
【0175】
一般に、説明されたトレーシングシステムは、ハードウェアベースのトリガーアクションメカニズムを含む。トリガーは、ソフトウェア意味論に基づいて作動するように早めに構成され得る。たとえば、トリガー条件のためのオペランドは、ソフトウェアコンポーネントのプロローグおよびエピローグで(たとえば、分散ソフトウェアシステムにおける機能、ループヘッダ、または他の適切な位置で)挿入されるかまたは埋込まれ得る。上述のように、いくつかの例では、トリガー条件のためのオペランドの挿入は、システム100におけるコンパイラによって行なわれ、一方、他の例では、トリガーおよびトリガーオペランドは、システム100によるコード実行に先立ってプログラマーによって埋込まれ/挿入されてもよく、または、リアルタイムのコード実行中にホストシステム126によって埋込まれてもよい。
【0176】
たとえば、いくつかの実現化例では、トリガーがいつ作動すべきかを示す条件が、ホストシステム126上で実行される性能分析ソフトウェアによって、分散ハードウェアシステム全体にわたって(たとえば、システム100の各チップ/ノードにおいて)セットアップされてもよい。トリガーが作動すると、特定のハードウェアユニットにおいてハードウェアトレーシングおよび性能カウンティングが行なわれ、同様のトリガー条件が、トレースデータ収集を停止するためにセットアップされる。
【0177】
他の実現化例では、システム100におけるトリガーは、命令へのオペランドである、単調に増加する値であってもよい。命令は、プロセッサコアの例示的なコンパイラによって、重要なソフトウェア構成体のプロローグおよびエピローグで挿入され得る。一般に、トリガーが作動するまで性能データは収集されないため、実行されるプログラムコードには、命令内にトリガーオペランドを常時存在させることに対する些細な性能ペナルティがある。
【0178】
たとえば、トリガー条件は、ハードウェアコンポーネントにおける例示的なレジスタに書込むことによってセットアップされ得る。トリガーを評価または検出するために、トリガー命令に遭遇するたびに、ハードウェアコンポーネントは、このレジスタにおける値を、命令におけるトリガー条件のオペランド値と比較することができる。一般に、トリガー条件は、分散システムにおけるどのプロセッサチップ/ノードも時期尚早にトリガー条件に到着しないように、ある符号化シーケンスステップのかなり前にセットアップされるべきである。
【0179】
いくつかの例では、ハードウェアトリガー実現化例は、例示的なプロセッサチップ/ノードの異なるコンポーネント内でトリガー信号を伝搬することを必要とする。トリガーアクションメカニズムの少なくとも1つの利点は、分散ソフトウェアプログラムが、第1のノードでの活動(たとえばコードシーケンスステップ33)を、別の(第2の)ノードでの関連する活動(たとえばコードシーケンスステップ33)とは非常に異なる時間に実行することを可能にする。この実現化例では、システム100は、異なるハードウェアコンポーネントまたはプロセッサノードによって異なる期間に実行される同一のまたは実質的に関連する活動についてのハードウェア性能データの正確な収集を維持することができる。
【0180】
いくつかの実現化例では、例示的なトリガー使用事例は、システム100が、特定のトリガー条件を再プログラム/再設定/再挿入することなく、複数の組のトレースデータを収集することを含み得る。たとえば、実行されるプログラムコードは、トレースマークを設定するための同じオペランドが複数回現れる命令シーケンスを生成するソフトウェア構成体を含み得る。いくつかの例では、システム100のプロセッサがプログラムコードのある一部をループで実行する場合、同じトレースマーク設定オペランドが複数回現れる。プログラムループの実行中、イベントトレーシングが、プログラムループの反復に従って開始および終了され得る。
【0181】
たとえば、ループ反復の最初に現われるオペランド値に基づいて、トリガー条件を満たすことが可能であり、たとえば、トリガーが作動し、イベントトレーシングが起動する。同様に、ループ反復の最後に現われるオペランド値に基づいて、トリガー条件を満たすことがもはや不可能であり、たとえば、イベントトレーシングが停止する。一般に、ループ反復の最初およびループ反復の最後は、所与のソフトウェア構成体のためのプログラムループの境界に対応することができる。よって、ソフトウェア構成体の各実行(たとえば各ループ反復)時に、トレーシングセッションが開始および終了され得る。
【0182】
いくつかの実現化例では、適切なトリガーオペランド値(たとえばGTCまたはトレースマーク)が以下の態様で判定され得る。上述のように、分散ソフトウェアプログラムは、共有されるかまたは重複するコードシーケンスまたはステップを各々含むソフトウェアモジュールを含み得る。システム100内での分散プログラムコードの実行中、性能アナリストは、たとえば現在のコードシーケンスまたはステップ番号を判定するために、システム100のコンピューティングコンソールを介して、トレースマークレジスタのCSR値を読出すかまたは分析することができる。
【0183】
いくつかの例では、アナリストは、シーケンスまたはステップの平均増加レートを判定するために、CSR値を繰り返し読出す。判定された増加レートは、たとえばトレースマークオペランド値の発生に基づいて1つ以上のトリガー条件を予測的に設定するために使用され得る。いくつかの実現化例では、GTCを使用する場合、性能アナリストは、GTCが増加するレートを予測または判定するために、システム/マシン(またはハードウェアコンポーネント)クロック速度を読出すかまたは分析することができる。アナリストは次に、特定のGTC値の発生に基づいて1つ以上のトリガー条件を設定するために、判定されたレートを使用することができる。
【0184】
図7は、コンピューティングシステム100とシステム100の1つ以上のノード200、201とを使用する分散ハードウェアトレーシングのための例示的なプロセス700のプロセスフロー図である。このため、プロセス700は、ノード200、201のリソースを含むシステム100の上述のコンピューティングリソースのうちの1つ以上を使用して実現され得る。
【0185】
プロセス700はブロック702で始まり、コンピューティングシステム100が、第1のプロセッサコアによって実行されるプログラムコードの実行を監視するステップを含む。いくつかの実現化例では、第1のプロセッサコアは、監視されるプログラムコードの少なくとも第1の部分を実行するように構成される。プロセス700のブロック704で、システム100は、第2のプロセッサコアによって実行されるプログラムコードの実行を監視する。いくつかの実現化例では、第2のプロセッサコアは、監視されるプログラムコードの少なくとも第2の部分を実行するように構成される。
【0186】
ブロック706で、システム100は、少なくとも1つのトリガー条件が満たされていることを検出する。いくつかの実現化例では、システム100は、第1のプロセッサコアまたは第2のプロセッサコアのうちの1つによって実行されるプログラムコードの少なくとも一部におけるオペランドの発生を識別することに基づいて、トリガー条件が満たされていることを検出する。いくつかの実現化例では、システム100内で実行されるプログラムコードは、トレースイベントをトリガーするためのトリガー処理論理を含む。
【0187】
いくつかの例では、トリガー論理は、1つ以上の命令ストリームに挿入される「トレースマーク設定」命令に関連付けられる。トリガー論理は、命令のトレースマークオペランドの発生を識別することと、トレースマークオペランドを分析することと、オペランドを例示的なトレースマークウィンドウの値と比較することとを含み得る。いくつかの例では、この分析および比較は、第1のトリガー条件が満たされていることを検出するために使用される。
【0188】
他の例では、トリガー論理は、システム100の外部ユーザによって、またはシステムの例示的なコンパイラによって1つ以上の命令ストリームに挿入され得る予め定義された時間値に関連付けられる。トリガー論理は、コンピューティングシステムの少なくとも1つのクロックの現在の時間が、1つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定することを含み得る。いくつかの実現化例では、現在の時間が予め定義された時間値を示していると判定することは、予め定義された時間値を受信することと、予め定義された時間値を例示的な予め定義された時間ウィンドウの時間値と比較することとを含み得る。
【0189】
ブロック708で、トリガー条件が満たされていることを検出するステップに応答して、システム100は、トレースデータを生成する少なくとも第1のトレースイベントを始動する。生成されたトレースデータは、少なくとも第1のプロセッサコアおよび第2のプロセッサコアを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別する。
【0190】
たとえば、トリガー条件が満たされていることを検出するステップに応答して、システム100は、FPC104およびSPC106にわたって生じるハードウェアイベントを識別するトレースデータを生成する同期されたトレースイベントを始動することができる。いくつかの実現化例では、トレースデータは、それぞれのハードウェアイベントのための一意的なトレース識別子を識別する。いくつかの例では、ハードウェアイベントは複数の同期されたハードウェアイベントを含み、複数の同期されたイベントのうちの少なくとも2つのハードウェアイベントがグローバルハードウェアイベントタイムスタンプを共有する場合、それらのイベントは同期される。
【0191】
いくつかの実現化例では、複数のトリガー条件が、実行されるプログラムコードに関連付けられ得る。いくつかの例では、少なくとも第1または第2のプロセッサコアによって実行されるプログラムコードの少なくとも一部における特定のオペランドの発生を識別することに基づいて、特定のトリガー条件が満たされ得る。特定のオペランドは、1つ以上のトレースイベントのうちの第2のトレースイベントを始動するために各々使用され得る複数のパラメータ値のうちの1つを含み得る。この実現化例では、特定のトリガー条件が満たされていることを検出するステップは、システム100が、特定のパラメータ値がレジスタの第1の限界値を上回ることを検出するステップを含み得る。
【0192】
いくつかの実現化例では、特定のトリガー条件が満たされていることを検出するステップに応答して、システム100は、分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベント間で共有される少なくとも1つの属性を識別するトレースデータを生成するトレースイベントを始動する。いくつかの実現化例では、それぞれのハードウェアイベントの属性は、ソースメモリアドレス、宛先メモリアドレス、またはシーケンス/プログラム計算ステップを少なくとも含み得る。一方、共有される少なくとも1つの属性は、プログラムコードの特定のシーケンスステップまたはプログラムステップを含み得る。
【0193】
いくつかの実現化例では、1つ以上のトリガー条件は、1)プログラムコードの特定のシーケンスステップ、2)分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータ、3)分散プロセッサユニットのグローバル時間クロック/カウンタによって示される現在の時間または特定の時間パラメータ、または、4)グローバル時間クロックに関連付けられた予め定義された時間ウィンドウ、のうちの少なくとも1つに関連付けられ得る。
【0194】
いくつかの実現化例では、システム100はまた、特定のオペランドの特定のパラメータ値、または特定の予め定義された時間値がレジスタの第2の限界値を上回ることを検出することができる。いくつかの例では、この検出に応答して、システム100は、あるオペランドの特定のパラメータ値、またはある予め定義された時間値がレジスタの第2の限界値を上回る場合に、第2のトレースイベントを停止することができる。
【0195】
プロセス700のブロック710で、システム100は、それぞれのハードウェアイベントを含む相関された一組のトレースデータを、ホストデバイスに提供する。いくつかの実現化例では、相関された一組のトレースデータは、第1のトリガー条件が満たされている場合に生成されるそれぞれのハードウェアイベントの時系列の順序を少なくとも示す。それぞれのハードウェアイベントの各々について、トレースデータは、ハードウェアイベントのためのハードウェアイベントタイムスタンプと、ハードウェアイベントを特徴付けるメタデータとを少なくとも含む。いくつかの例では、相関された一組のトレースデータは、データ構造620に少なくとも部分的に対応する。
【0196】
ブロック712で、コンピューティングシステム100は相関された一組のトレースデータを使用して、少なくとも第1のプロセッサコアおよび第2のプロセッサコアによって実行されるプログラムコードの性能を分析する。いくつかの実現化例では、データ構造620(すなわち、相関されたトレースデータに対応)は、少なくともプロセッサコア104および106によって実行されるプログラムコードの性能を分析するために、ホストシステム126によって使用される。同様に、データ構造620は、システム100の少なくとも1つのコンポーネントの性能を分析するために、ホストシステム126によって使用され得る。
【0197】
たとえば、ホストシステム126または例示的なユーザは、プログラムコードの特定のソフトウェアモジュールの実行に関連付けられた性能問題があるかどうかを検出または判定するために、データ構造620を分析することができる。例示的な問題は、ソフトウェアモジュールが、割り当てられた実行時間ウィンドウ内で、またはレイテンシしきい値未満で、ある命令ストリームの実行を完了できないことを含み得る。
【0198】
さらに、ユーザまたはホストデバイス/システム126は、システム100の特定のコンポーネントがしきい値性能レベルを上回って動作しているか、または下回って動作しているかを検出または判定することができる。コンポーネント性能に関連する例示的な問題は、特定のハードウェアコンポーネントが、許容可能なしきい値結果パラメータ範囲外にある結果データを生成することを含み得る。いくつかの実現化例では、生成された結果データは、実質的に同様の命令/動作を実行するシステム100の他の関連するコンポーネントによって生成された結果データと一致していないかもしれない。
【0199】
たとえば、プログラムコードの実行中、システム100の第1のコンポーネントが、動作を完了するために、および結果を生成するために必要とされ得る。同様に、システム100の第2のコンポーネントが、実質的に同様の動作を完了するために、および実質的に同様の結果を生成するために必要とされ得る。相関された一組のトレースデータの分析は、第2のコンポーネントが、第1のコンポーネントによって生成された結果とはかなり異なる結果を生成したことを示し得る。同様に、相関されたトレースエントリの例示的なデータ構造は、許容可能なパラメータ範囲外にある第2のコンポーネントの結果パラメータ値を示すかもしれない。これらの結果は、第2のコンポーネントの潜在的な性能問題を示し得る。
【0200】
この明細書で説明される主題および機能的動作の実施形態は、デジタル電子回路で、有形に具体化されたコンピュータソフトウェアまたはファームウェアで、この明細書に開示された構造およびそれらの構造的同等物を含むコンピュータハードウェアで、もしくは、それらのうちの1つ以上の組合せで実現され得る。この明細書で説明される主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、有形の非一時的プログラム担体上で符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。それに代えて、またはそれに加えて、プログラム命令は、データ処理装置による実行のために好適なレシーバ装置へ送信される情報を符号化するために生成される、人工的に生成された伝搬信号、たとえば、マシンによって生成された電気信号、光学信号、または電磁信号上で符号化され得る。コンピュータ記憶媒体は、マシン読取可能記憶デバイス、マシン読取可能記憶基板、ランダムまたはシリアルアクセスメモリデバイス、もしくは、それらのうちの1つ以上の組合せであってもよい。
【0201】
この明細書で説明されるプロセスおよび論理フローは、1つ以上のプログラマブルコンピュータが、1つ以上のコンピュータプログラムを、入力データ上で動作して出力を生成することによって機能を行なうように実行することによって、行なわれ得る。プロセスおよび論理フローはまた、特殊用途論理回路、たとえばFPGA(field programmable gate array:フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPGPU(General purpose graphics processing unit:汎用グラフィック処理ユニット)によって行なわれてもよく、装置はまた、当該特殊用途論理回路として実現されてもよい。
【0202】
コンピュータプログラムの実行に好適なコンピュータは、汎用または専用マイクロプロセッサまたはそれら双方、もしくは任意の他の種類の中央処理装置を例として含み、それに基づき得る。一般に、中央処理装置は、読取専用メモリまたはランダムアクセスメモリまたはそれら双方から、命令およびデータを受信するであろう。コンピュータの本質的要素は、命令を行なうか実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータはまた、データを格納するための1つ以上の大容量記憶デバイス、たとえば磁気ディスク、光磁気ディスク、または光学ディスクを含み、もしくは、当該大容量記憶デバイスからデータを受信し、または当該大容量記憶デバイスへデータを転送し、またはそれら双方を行なうために動作可能に結合されるであろう。しかしながら、コンピュータはそのようなデバイスを有していなくてもよい。
【0203】
コンピュータプログラム命令およびデータを格納するのに好適なコンピュータ読取可能媒体は、半導体メモリデバイス、たとえばEPROM、EEPROM、およびフラッシュメモリデバイス;磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスクを例として含む、あらゆる形態の不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、特殊用途論理回路によって補足され、またはそれに組み込まれ得る。
【0204】
この明細書は多くの特定の実現詳細を含むものの、これらは、発明の範囲または特許請求の範囲に対する限定として解釈されるべきでなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。この明細書において別々の実施形態の状況で説明されるある特徴を、単一の実施形態において組合せて実現することもできる。逆に、単一の実施形態の状況で説明されるさまざまな特徴を、複数の実施形態で別々に、または任意の好適な部分的組合せで実現することもできる。さらに、特徴はある組合せで作用するとして上述され、そういうものとして当初特許請求され得るが、場合によっては、特許請求された組合せからの1つ以上の特徴がその組合せから削除されてもよく、特許請求された組合せは、部分的組合せまたは部分的組合せの変形に向けられてもよい。
【0205】
同様に、動作は特定の順序で図面に示されているが、これは、望ましい結果を達成するために、そのような動作が図示された特定の順序または連続する順序で行なわれること、もしくは、図示された動作がすべて行なわれることを要求するものとして理解されるべきではない。ある状況では、マルチタスクおよび並行処理が有利であるかもしれない。さらに、上述の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を要求するものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは一般に、単一のソフトウェア製品にともに一体化されるか、または複数のソフトウェア製品にパッケージ化され得るということが理解されるべきである。
【0206】
主題の特定の実施形態が説明されてきた。他の実施形態は、特許請求の範囲内にある。たとえば、請求項に記載されたアクションは、異なる順序で行なわれ、依然として望ましい結果を達成することができる。一例として、添付図面に示されたプロセスは、望ましい結果を達成するために、図示された特定の順序または連続する順序を必ずしも必要とはしない。ある実現化例では、マルチタスクおよび並行処理が有利であるかもしれない。
図1
図2
図3
図4
図5
図6
図7