(57)【要約】  第１および第２のプロセッサコンポーネントによるプログラムコードの実行を監視するステップを含む、コンピュータにより実現される方法である。コンピューティングシステムが、ｉ）プログラムコードの一部におけるオペランドを識別すること、または、ｉｉ）コンピューティングシステムのクロックの現在の時間が予め定義された時間値を示していると判定することによって、トリガー条件が満たされていることを検出する。オペランドと予め定義された時間値とは、トレースイベントを始動するために使用される。トリガー条件が満たされている場合、システムは、コンピューティングシステム全体にわたって生じるそれぞれのハードウェアイベントを識別するトレースデータを生成するトレースイベントを始動する。システムは、相関された一組のトレースデータを生成するためにトレースデータを使用する。相関されたトレースデータは、それぞれのハードウェアイベントの時系列の順序を示す。システムは、実行されるプログラムコードの性能を分析するために、相関された一組のトレースデータを使用する。
2020512613.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実現される方法であって、前記方法は、
第１のプロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、前記第１のプロセッサコンポーネントは、前記プログラムコードの少なくとも第１の部分を実行するように構成され、前記方法はさらに、
第２のプロセッサコンポーネントによる前記プログラムコードの実行を監視するステップを含み、前記第２のプロセッサコンポーネントは、前記プログラムコードの少なくとも第２の部分を実行するように構成され、前記方法はさらに、
コンピューティングシステムが、
ｉ）少なくとも前記プログラムコードの前記第１の部分または前記プログラムコードの前記第２の部分におけるオペランドの発生を識別すること、もしくは、
ｉｉ）前記コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出するステップを含み、前記オペランドは、１つ以上のトレースイベントを始動するために使用される第１のパラメータ値を含み、前記方法はさらに、
前記トリガー条件が満たされていることを検出するステップに応答して、前記コンピューティングシステムが、トレースデータを生成する少なくとも第１のトレースイベントを始動するステップを含み、前記トレースデータは、少なくとも前記第１のプロセッサコンポーネントおよび前記第２のプロセッサコンポーネントを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別し、前記それぞれのハードウェアイベントの各々について、前記トレースデータは少なくともハードウェアイベントタイムスタンプを含み、前記方法はさらに、
前記コンピューティングシステムが前記トレースデータを使用して、前記トリガー条件が満たされている場合に生成される前記それぞれのハードウェアイベントの時系列の順序を少なくとも示す相関された一組のトレースデータを生成するステップを含む、方法。
【請求項２】
前記第１のトレースイベントは、前記分散プロセッサユニット間にわたって生じるハードウェアイベントを識別するトレースデータを生成する同期されたトレースイベントであり、前記トレースデータはまた、それぞれのハードウェアイベントのための一意的なトレース識別子を識別し、前記ハードウェアイベントは複数の同期されたハードウェアイベントを含み、２つのハードウェアイベントがグローバルハードウェアイベントタイムスタンプを共有する場合、前記イベントは同期される、請求項１に記載の方法。
【請求項３】
前記トリガー条件が満たされていることを検出するステップは、
前記コンピューティングシステムが、
ｉ）前記オペランドの前記第１のパラメータ値がレジスタの第１の限界値を上回ること、または、
ｉｉ）前記現在の時間によって示される前記予め定義された時間値がレジスタの第１の限界値を上回ること、のうちの１つを検出するステップと、
前記トリガー条件が満たされていることを検出するステップに応答して、前記コンピューティングシステムが、トレースデータを生成する第２のトレースイベントを始動するステップとを含み、前記トレースデータは、前記分散プロセッサユニット間にわたって生じる前記それぞれのハードウェアイベント間で共有される少なくとも１つの属性を識別する、請求項１に記載の方法。
【請求項４】
前記コンピューティングシステムが、
前記オペランドの第２のパラメータ値が前記レジスタの第２の限界値を上回ること、または、
前記現在の時間によって示される第２の予め定義された時間値が前記レジスタの第２の限界値を上回ること、のうちの１つを検出するステップと、
検出するステップに応答して、前記コンピューティングシステムが、前記オペランドの前記第２のパラメータ値が前記第２の限界値を上回る場合、または前記第２の予め定義された時間値が前記第２の限界値を上回る場合に、前記第２のトレースイベントを停止するステップとをさらに含む、請求項３に記載の方法。
【請求項５】
前記オペランドはさらに、
前記プログラムコードの特定のシーケンスステップを示すパラメータ、または、
前記分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータ、のうちの少なくとも１つを含み、
前記予め定義された時間値は、
前記分散プロセッサユニットのグローバルタイムクロックによって示される特定の時間値、または、
前記グローバルタイムクロックに関連付けられた予め定義された時間ウィンドウの特定の時間値、のうちの少なくとも１つを含む、請求項３に記載の方法。
【請求項６】
前記オペランドは第１の２進データ構造を有し、前記オペランドの前記第１のパラメータ値はトレースマークに対応しており、
前記予め定義された時間値は第２の２進データ構造を有し、前記現在の時間はグローバルタイムクロックによって示され、
前記グローバルタイムクロックは、１つ以上のハードウェアイベントタイムスタンプを生成するために前記分散プロセッサユニットによって使用される、請求項３に記載の方法。
【請求項７】
前記コンピューティングシステムのコンパイラが、前記トリガー条件の前記オペランドを、前記第１のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも前記第１の部分に挿入するステップと、
前記コンピューティングシステムの前記コンパイラが、前記トリガー条件の少なくとも１つの予め定義された時間値を、前記第２のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも前記第２の部分に挿入するステップとをさらに含む、請求項３に記載の方法。
【請求項８】
前記第１のトレースイベントまたは前記第２のトレースイベントのうちの少なくとも１つを始動するステップは、
前記コンピューティングシステムが、前記第１のプロセッサコンポーネントの第１のカウントレジスタによって受信される第１の制御信号を生成するステップを含み、前記第１の制御信号は、第１のハードウェアイベントに関連付けられたデータを前記第１のカウントレジスタに格納させ、さらに、
前記コンピューティングシステムが、前記第２のプロセッサコンポーネントの第２のカウントレジスタによって受信される第２の制御信号を生成するステップを含み、前記第２の制御信号は、第２のハードウェアイベントに関連付けられたデータを前記第２のカウントレジスタに格納させる、請求項３に記載の方法。
【請求項９】
前記第１のハードウェアイベントまたは前記第２のハードウェアイベントのうちの１つに関連付けられた前記データは、
前記分散プロセッサユニットの特定のプロセッサコンポーネントの特定のメモリバッファに書込まれたバイトの数、または、
前記分散プロセッサユニットの特定のプロセッサコンポーネントによって実行された命令の数、のうちの少なくとも１つを含む、請求項８に記載の方法。
【請求項１０】
前記コンピューティングシステムが、前記第１または第２のプロセッサコンポーネントによって実行される前記プログラムコードの少なくとも一部における第２のオペランドの発生を識別するステップをさらに含み、前記第２のオペランドは第２のパラメータ値を含み、さらに、
前記コンピューティングシステムが、前記第２のオペランドの前記第２のパラメータ値がレジスタの特定の限界値を上回ること、または前記レジスタの特定の限界値を下回ること、のうちの１つに基づいて、フィルター条件が満たされていると判定するステップと、
前記フィルター条件が満たされていると判定するステップに応答して、前記コンピューティングシステムが１つ以上のトレースイベントをフィルタリングするステップとを含み、前記１つ以上のトレースイベントをフィルタリングするステップは、１つ以上のハードウェアイベントに関連付けられたトレースデータの格納を除外するステップを含む、請求項１に記載の方法。
【請求項１１】
ハードウェアイベント収集システムであって、
１つ以上のプロセッサコアを含む１つ以上のプロセッサと、
命令を格納するための１つ以上のマシン読取可能記憶ユニットとを含み、前記命令は、動作を行なうために前記１つ以上のプロセッサによって実行可能であり、前記動作は、
第１のプロセッサコンポーネントによるプログラムコードの実行を監視することを含み、前記第１のプロセッサコンポーネントは、前記プログラムコードの少なくとも第１の部分を実行するように構成され、前記動作はさらに、
第２のプロセッサコンポーネントによる前記プログラムコードの実行を監視することを含み、前記第２のプロセッサコンポーネントは、前記プログラムコードの少なくとも第２の部分を実行するように構成され、前記動作はさらに、
コンピューティングシステムが、
ｉ）少なくとも前記プログラムコードの前記第１の部分または前記プログラムコードの前記第２の部分におけるオペランドの発生を識別すること、もしくは、
ｉｉ）前記コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出することを含み、前記オペランドは、１つ以上のトレースイベントを始動するために使用される第１のパラメータ値を含み、前記動作はさらに、
前記トリガー条件が満たされていることを検出することに応答して、前記コンピューティングシステムが、トレースデータを生成する少なくとも第１のトレースイベントを始動することを含み、前記トレースデータは、少なくとも前記第１のプロセッサコンポーネントおよび前記第２のプロセッサコンポーネントを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別し、前記それぞれのハードウェアイベントの各々について、前記トレースデータは少なくともハードウェアイベントタイムスタンプを含み、前記動作はさらに、
前記コンピューティングシステムが前記トレースデータを使用して、相関のある一組のトレースデータを生成することを含み、前記相関のある一組のトレースデータは、前記トリガー条件が満たされている場合に生成される前記それぞれのハードウェアイベントの時系列の順序を少なくとも示す、ハードウェアイベント収集システム。
【請求項１２】
前記第１のトレースイベントは、前記分散プロセッサユニット間にわたって生じるハードウェアイベントを識別するトレースデータを生成する同期されたトレースイベントであり、前記トレースデータはまた、それぞれのハードウェアイベントのための一意的なトレース識別子を識別し、前記ハードウェアイベントは複数の同期されたハードウェアイベントを含み、２つのハードウェアイベントがグローバルハードウェアイベントタイムスタンプを共有する場合、前記イベントは同期される、請求項１１に記載のハードウェアイベント収集システム。
【請求項１３】
前記トリガー条件が満たされていることを検出することは、
前記コンピューティングシステムが、
ｉ）前記オペランドの前記第１のパラメータ値がレジスタの第１の限界値を上回ること、または、
ｉｉ）前記現在の時間によって示される前記予め定義された時間値がレジスタの第１の限界値を上回ること、のうちの１つを検出することと、
前記トリガー条件が満たされていることを検出することに応答して、前記コンピューティングシステムが、トレースデータを生成する第２のトレースイベントを始動することとを含み、前記トレースデータは、前記分散プロセッサユニット間にわたって生じる前記それぞれのハードウェアイベント間で共有される少なくとも１つの属性を識別する、請求項１１に記載のハードウェアイベント収集システム。
【請求項１４】
前記動作はさらに、
前記コンピューティングシステムが、
前記オペランドの第２のパラメータ値が前記レジスタの第２の限界値を上回ること、または、
前記現在の時間によって示される第２の予め定義された時間値が前記レジスタの第２の限界値を上回ること、のうちの１つを検出することと、
検出することに応答して、前記コンピューティングシステムが、前記オペランドの前記第２のパラメータ値が前記第２の限界値を上回る場合、または前記第２の予め定義された時間値が前記第２の限界値を上回る場合に、前記第２のトレースイベントを停止することとを含む、請求項１３に記載のハードウェアイベント収集システム。
【請求項１５】
前記オペランドはさらに、
前記プログラムコードの特定のシーケンスステップを示すパラメータ、または、
前記分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータ、のうちの少なくとも１つを含み、
前記予め定義された時間値は、
前記分散プロセッサユニットのグローバルタイムクロックによって示される特定の時間値、または、
前記グローバルタイムクロックに関連付けられた予め定義された時間ウィンドウの特定の時間値、のうちの少なくとも１つを含む、請求項１３に記載のハードウェアイベント収集システム。
【請求項１６】
前記オペランドは第１の２進データ構造を有し、前記オペランドの前記第１のパラメータ値はトレースマークに対応しており、
前記予め定義された時間値は第２の２進データ構造を有し、前記現在の時間はグローバルタイムクロックによって示され、
前記グローバルタイムクロックは、１つ以上のハードウェアイベントタイムスタンプを生成するために前記分散プロセッサユニットによって使用される、請求項１３に記載のハードウェアイベント収集システム。
【請求項１７】
コンピュータにより実現される方法であって、前記方法は、
プロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、前記プロセッサコンポーネントは、前記プログラムコードの少なくとも第１の部分を実行するように構成され、前記方法はさらに、
コンピューティングシステムが、
ｉ）前記プログラムコードの少なくとも前記第１の部分におけるオペランドの発生を識別すること、または、
ｉｉ）前記コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出するステップを含み、前記オペランドは、前記１つ以上のトレースイベントを始動するために使用される第１のパラメータ値を含み、前記方法はさらに、
前記トリガー条件が満たされていることを検出するステップに応答して、前記コンピューティングシステムが、前記プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成するステップを含み、前記制御信号は、ハードウェアイベントに関連付けられたカウントデータを前記カウントレジスタに格納させ、前記方法はさらに、
前記コンピューティングシステムが、実行される前記プログラムコードに関連付けられた１つ以上の性能属性を示すデータ構造を生成するステップを含み、前記データ構造は、格納された前記カウントデータの１つ以上のカウントパラメータに基づいて生成される、方法。
【請求項１８】
前記カウントレジスタは、前記コンピューティングシステムの１つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタのうちの１つであり、少なくとも１つの性能カウンタは、活動カウンタ、ストールカウンタ、統計カウンタ、またはサンプリングカウンタ、のうちの１つを含む、請求項１７に記載の方法。
【請求項１９】
前記１つ以上のカウントパラメータは、
ｉ）特定のプロセッサコンポーネントによって受信された命令の数、
ｉｉ）前記特定のプロセッサコンポーネントによって処理された命令の数、
ｉｉｉ）前記特定のプロセッサコンポーネントによって実行された命令の数、もしくは、
ｉｖ）前記特定のプロセッサコンポーネントによって行なわれたメモリ読出の数、またはメモリ書込の数、のうちの１つを示す、請求項１８に記載の方法。
【請求項２０】
実行される前記プログラムコードに関連付けられた性能属性は、
ｉ）前記プログラムコードを実行する特定のプロセッサコンポーネントのストール頻度、
ｉｉ）前記特定のプロセッサコンポーネントの利用が利用しきい値未満であるという表示、または、
ｉｉｉ）前記特定のプロセッサコンポーネントによって使用されるデータ格納キューがキュー占有率しきい値以下であるという表示、のうちの１つを含む、請求項１７に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
この明細書は、プログラムコードの実行を分析することに関する。
【０００２】
分散ハードウェアコンポーネント内で実行される分散ソフトウェアの効果的な性能分析は、複雑な作業である場合がある。分散ハードウェアコンポーネントは、より大きいソフトウェアプログラムまたはプログラムコードの一部を実行するために協働し対話する２つ以上の中央処理装置（Central Processing Unit：ＣＰＵ）（またはグラフィックス処理装置（Graphics Processing Unit：ＧＰＵ））のそれぞれのプロセッサコアである場合がある。
【０００３】
（たとえばＣＰＵまたはＧＰＵ内の）ハードウェアの観点から見ると、性能分析に利用可能である情報または機能としては概して、１）ハードウェア性能カウンタと、２）ハードウェアイベントトレースという２種類がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
概して、この明細書で説明される主題の革新的な一局面は、１つ以上のプロセッサによって実行される、コンピュータにより実現される方法において具現化され得る。方法は、第１のプロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、第１のプロセッサコンポーネントは、プログラムコードの少なくとも第１の部分を実行するように構成され、方法はさらに、第２のプロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、第２のプロセッサコンポーネントは、プログラムコードの少なくとも第２の部分を実行するように構成される。
【０００５】
方法はさらに、コンピューティングシステムが、ｉ）少なくともプログラムコードの第１の部分またはプログラムコードの第２の部分におけるオペランドの発生を識別すること、もしくは、ｉｉ）コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出するステップを含み、オペランドは、１つ以上のトレースイベントを始動するために使用される第１のパラメータ値を含む。
【０００６】
方法はさらに、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、トレースデータを生成する少なくとも第１のトレースイベントを始動するステップを含み、トレースデータは、少なくとも第１のプロセッサコンポーネントおよび第２のプロセッサコンポーネントを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別する。それぞれのハードウェアイベントの各々について、トレースデータは少なくともハードウェアイベントタイムスタンプを含む。方法はさらに、コンピューティングシステムがトレースデータを使用して、トリガー条件が満たされている場合に生成されるそれぞれのハードウェアイベントの時系列の順序を少なくとも示す相関された一組のトレースデータを生成するステップを含む。
【０００７】
これらのおよび他の実現化例は各々オプションで、以下の特徴のうちの１つ以上を含み得る。たとえば、いくつかの実現化例では、第１のトレースイベントは、分散プロセッサユニット間にわたって生じるハードウェアイベントを識別するトレースデータを生成する同期されたトレースイベントであり、トレースデータはまた、それぞれのハードウェアイベントのための一意的なトレース識別子を識別し、ハードウェアイベントは複数の同期されたハードウェアイベントを含み、２つのハードウェアイベントがグローバルハードウェアイベントタイムスタンプを共有する場合、それらのイベントは同期される。
【０００８】
いくつかの実現化例では、トリガー条件が満たされていることを検出するステップは、コンピューティングシステムが、ｉ）オペランドの第１のパラメータ値がレジスタの第１の限界値を上回ること、または、ｉｉ）現在の時間によって示される予め定義された時間値がレジスタの第１の限界値を上回ること、のうちの１つを検出するステップと、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、トレースデータを生成する第２のトレースイベントを始動するステップとを含み、トレースデータは、分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベント間で共有される少なくとも１つの属性を識別する。
【０００９】
いくつかの実現化例では、方法はさらに、コンピューティングシステムが、オペランドの第２のパラメータ値がレジスタの第２の限界値を上回ること、または、現在の時間によって示される第２の予め定義された時間値がレジスタの第２の限界値を上回ること、のうちの１つを検出するステップと、検出するステップに応答して、コンピューティングシステムが、オペランドの第２のパラメータ値が第２の限界値を上回る場合、または第２の予め定義された時間値が第２の限界値を上回る場合に、第２のトレースイベントを停止するステップとを含む。
【００１０】
いくつかの実現化例では、オペランドはさらに、プログラムコードの特定のシーケンスステップを示すパラメータ、または、分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータ、のうちの少なくとも１つを含み、予め定義された時間値は、分散プロセッサユニットのグローバルタイムクロックによって示される特定の時間値、または、グローバルタイムクロックに関連付けられた予め定義された時間ウィンドウの特定の時間値、のうちの少なくとも１つを含む。
【００１１】
いくつかの実現化例では、オペランドは第１の２進データ構造を有し、第１のオペランドの第１のパラメータ値はトレースマークに対応しており、予め定義された時間値は第２の２進データ構造を有し、現在の時間はグローバルタイムクロックによって示され、グローバルタイムクロックは、１つ以上のハードウェアイベントタイムスタンプを生成するために分散プロセッサユニットによって使用される。
【００１２】
いくつかの実現化例では、方法はさらに、コンピューティングシステムのコンパイラが、トリガー条件のオペランドを、第１のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも第１の部分に挿入するステップと、コンピューティングシステムのコンパイラが、トリガー条件の少なくとも１つの予め定義された時間値を、第２のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも第２の部分に挿入するステップとを含む。
【００１３】
いくつかの実現化例では、第１のトレースイベントまたは第２のトレースイベントのうちの少なくとも１つを始動するステップは、コンピューティングシステムが、第１のプロセッサコアの第１のカウントレジスタによって受信される第１の制御信号を生成するステップを含み、第１の制御信号は、第１のハードウェアイベントに関連付けられたデータを第１のカウントレジスタに格納させ、さらに、コンピューティングシステムが、第２のプロセッサコアの第２のカウントレジスタによって受信される第２の制御信号を生成するステップを含み、第２の制御信号は、第２のハードウェアイベントに関連付けられたデータを第２のカウントレジスタに格納させる。
【００１４】
いくつかの実現化例では、第１のハードウェアイベントまたは第２のハードウェアイベントのうちの１つに関連付けられたデータは、分散プロセッサユニットの特定のプロセッサコアの特定のメモリバッファに書込まれたバイトの数、または、分散プロセッサユニットの特定のプロセッサコアによって実行された命令の数、のうちの少なくとも１つを含む。
【００１５】
いくつかの実現化例では、方法はさらに、コンピューティングシステムが、第１または第２のプロセッサコンポーネントによって実行されるプログラムコードの少なくとも一部における第２のオペランドの発生を識別するステップを含み、第２のオペランドは第２のパラメータ値を含み、さらに、コンピューティングシステムが、第２のオペランドの第２のパラメータ値がレジスタの特定の限界値を上回ること、またはレジスタの特定の限界値を下回ること、のうちの１つに基づいて、フィルター条件が満たされていると判定するステップと、フィルター条件が満たされていると判定するステップに応答して、コンピューティングシステムが１つ以上のトレースイベントをフィルタリングするステップとを含み、１つ以上のトレースイベントをフィルタリングするステップは、１つ以上のハードウェアイベントに関連付けられたトレースデータの格納を除外するステップを含む。
【００１６】
この明細書で説明される主題の他の革新的な局面は、１つ以上のプロセッサコアを含む１つ以上のプロセッサと、命令を格納するための１つ以上のマシン読取可能記憶ユニットとを含む、ハードウェアイベント収集システムにおいて具現化され得る。命令は、動作を行なうために１つ以上のプロセッサによって実行可能であり、動作は、第１のプロセッサコンポーネントによるプログラムコードの実行を監視することを含み、第１のプロセッサコンポーネントは、プログラムコードの少なくとも第１の部分を実行するように構成され、動作はさらに、第２のプロセッサコンポーネントによるプログラムコードの実行を監視することを含み、第２のプロセッサコンポーネントは、プログラムコードの少なくとも第２の部分を実行するように構成される。
【００１７】
システムはさらに、コンピューティングシステムが、ｉ）少なくともプログラムコードの第１の部分またはプログラムコードの第２の部分におけるオペランドの発生を識別すること、もしくは、ｉｉ）コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出するステップを含み、オペランドは、１つ以上のトレースイベントを始動するために使用される第１のパラメータ値を含む。
【００１８】
システムはさらに、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、トレースデータを生成する少なくとも第１のトレースイベントを始動するステップを含み、トレースデータは、少なくとも第１のプロセッサコンポーネントおよび第２のプロセッサコンポーネントを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別する。それぞれのハードウェアイベントの各々について、トレースデータは少なくともハードウェアイベントタイムスタンプを含む。システムはさらに、コンピューティングシステムがトレースデータを使用して、トリガー条件が満たされている場合に生成されるそれぞれのハードウェアイベントの時系列の順序を少なくとも示す相関された一組のトレースデータを生成するステップを含む。
【００１９】
概して、この明細書で説明される主題の革新的な一局面は、１つ以上のプロセッサによって実行される、コンピュータにより実現される方法において具現化され得る。方法は、プロセッサコンポーネントによるプログラムコードの実行を監視するステップを含み、プロセッサコンポーネントは、プログラムコードの少なくとも第１の部分を実行するように構成される。
【００２０】
方法はさらに、コンピューティングシステムが、ｉ）プログラムコードの少なくとも第１の部分におけるオペランドの発生を識別すること、または、ｉｉ）コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定すること、のうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出するステップを含み、オペランドは、１つ以上のトレースイベントを始動するために使用される第１のパラメータ値を含む。
【００２１】
方法はさらに、トリガー条件が満たされていることを検出するステップに応答して、コンピューティングシステムが、プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成するステップを含み、制御信号は、ハードウェアイベントに関連付けられたカウントデータをカウントレジスタに格納させ、方法はさらに、コンピューティングシステムが、実行されるプログラムコードに関連付けられた１つ以上の性能属性を示すデータ構造を生成するステップを含み、データ構造は、格納されたカウントデータの１つ以上のカウントパラメータに基づいて生成される。
【００２２】
これらのおよび他の実現化例は各々オプションで、以下の特徴のうちの１つ以上を含み得る。たとえば、いくつかの実現化例では、カウントレジスタは、コンピューティングシステムの１つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタのうちの１つであり、少なくとも１つの性能カウンタは、活動カウンタ、ストールカウンタ、統計カウンタ、またはサンプリングカウンタ、のうちの１つを含む。
【００２３】
いくつかの実現化例では、１つ以上のカウントパラメータは、ｉ）特定のプロセッサコンポーネントによって受信された命令の数、ｉｉ）特定のプロセッサコンポーネントによって処理された命令の数、ｉｉｉ）特定のプロセッサコンポーネントによって実行された命令の数、もしくは、ｉｖ）特定のプロセッサコンポーネントによって行なわれたメモリ読出の数、またはメモリ書込の数、のうちの１つを示す。
【００２４】
いくつかの実現化例では、実行されるプログラムコードに関連付けられた性能属性は、ｉ）プログラムコードを実行する特定のプロセッサコンポーネントのストール頻度、ｉｉ）特定のプロセッサコンポーネントの利用が利用しきい値未満であるという表示、または、ｉｉｉ）特定のプロセッサコンポーネントによって使用されるデータ格納キューがキュー占有率しきい値以下であるという表示、のうちの１つを含む。
【００２５】
このおよび他の局面の他の実現化例は、コンピュータ記憶デバイス上で符号化された方法のアクションを行なうように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。１つ以上のコンピュータのシステムは、動作時にシステムにアクションを行なわせる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せによって、そのように構成され得る。１つ以上のコンピュータプログラムは、データ処理装置によって実行されると当該装置にアクションを行なわせる命令を有することによって、そのように構成され得る。
【００２６】
この明細書で説明される主題は、以下の長所のうちの１つ以上を実現するように、特定の実施形態で実現され得る。説明されるハードウェアトレーシングシステムは、ハードウェアノブ／機能を通して実行される動的トリガーを使用することによって計算効率を高める。トリガーは、典型的にはシステムリソースがイベント取込みを監視し実行することを要求する符号化シーケンスのみを介するというよりもむしろ、グローバル時間カウンタ、埋込まれた論理オペランド、およびハードウェアレジスタに部分的に基づいて、イベントの同期された取込みを可能にする。
【００２７】
同様に、相関されていない非効率的なイベント取込みの代わりに、同時に生じる短持続時間イベントおよび同期されたグローバルな取込みを取込むために、ハードウェアトリガーが調整される場合、システムメモリ使用が最適化される。より短い持続時間の同期されたイベント取込みのための制御は情報過多を緩和し、それにより、いくつかのメモリリソースが未使用なままとなり、他のシステムプロセス用に利用可能なままとなることを可能にする。
【００２８】
この明細書で説明される主題の１つ以上の実現化例の詳細を、添付図面および以下の説明で述べる。主題の他の潜在的な特徴、局面、および長所は、説明、図面、および請求項から明らかになるであろう。
【図面の簡単な説明】
【００２９】
【図１】分散ハードウェアトレーシングのための例示的なコンピューティングシステムのブロック図である。
【図２】分散ハードウェアトレーシングのための例示的なコンピューティングシステムのトレースチェーンおよびそれぞれのノードのブロック図である。
【図３】例示的なトレース多重化設計アーキテクチャおよび例示的なデータ構造のブロック図である。
【図４】分散ハードウェアトレーシングのための例示的なコンピューティングシステムによって実行される直接メモリアクセストレースイベントのためのトレース活動を示すブロック図である。
【図５】グローバル時間カウンタ（ＧＴＣ）のための例示的なデータ構造と、分散ハードウェアトレーシングのための例示的なコンピューティングシステムによるＧＴＣの使用シナリオを示す表とを示す図である。
【図６】分散ハードウェアトレーシングのための例示的なコンピューティングシステムのコンポーネントに関連付けられた、例示的な時間カウンタおよびハードウェア機能のブロック図である。
【図７】分散ハードウェアトレーシングのための例示的なプロセスのプロセスフロー図である。
【００３０】
さまざまな図面における同様の参照番号および名称は、同様の要素を示す。
【発明を実施するための形態】
【００３１】
詳細な説明
この明細書で説明される主題は概して、分散ハードウェアトレーシングに関する。特に、コンピューティングシステムが、第１のプロセッサコアによって実行されるプログラムコードの実行と、第２のプロセッサコアによって実行されるプログラムコードの実行とを監視する。コンピューティングシステムは、ハードウェアイベントのタイムラインをメモリバッファに格納する。格納されたイベントは、少なくとも第１および第２のプロセッサコアを含む分散プロセッサユニット間にわたって生じる。
【００３２】
タイムラインは、ハードウェアイベントの各々について、ハードウェアイベントを特徴付けるメタデータおよびイベントタイムスタンプを含む。システムは、タイムラインから、ハードウェアイベントを含むデータ構造を生成する。システムは、データ構造をホストデバイスのメモリバンクに格納し、第１または第２のプロセッサコアによって実行されるプログラムコードの性能を評価するためにデータ構造を使用する。イベントトレーシングのこの状況において、この明細書は、図１〜４に示す、分散コンピューティングシステムにおけるハードウェアイベントトレーシングのためのアプローチを説明する。
【００３３】
この明細書はさらに、図５〜７に示す、１つ以上のトリガーメカニズムに基づく同期されたハードウェアイベント収集のためのアプローチを説明する。以下により詳細に説明されるように、この明細書で説明されるコンピューティングシステムの局面は少なくとも、トレーシングデータおよびイベントカウンティングの協調的な／同期する収集に関する。特に、少なくとも１つの局面は、スタンドアロンシステムおよび分散システム内のハードウェア性能カウンタデータおよびトレースイベントデータの同期された収集のためのシステムおよび方法を含む。同期されたイベント収集は、分散プログラムコードの性能データおよびデバッグデータ双方の分析を向上させる。向上された分析は、システム１００によって分析される接続されたソフトウェアコンポーネント／モジュールの実行に応答して生じるイベントの相関を通して、部分的に達成される。
【００３４】
図１は、分散ハードウェアトレーシングのための例示的なコンピューティングシステム１００のブロック図を示す。この明細書で使用されるように、分散ハードウェアシステムトレーシングは、例示的なプロセッサマイクロチップのコンポーネントおよびサブコンポーネント内に生じるイベントの格納に対応する。さらに、ここで使用されるように、分散ハードウェアシステム（またはトレーシングシステム）は、プロセッサマイクロチップの集合のうち、分散実行のために構成されたソフトウェア／プログラムコードのそれぞれの一部を実行するよう協働するプロセッサマイクロチップの集合に対応する。いくつかの実現化例では、システム１００の異なるプロセッサチップが、分散ハードウェアシステムのそれぞれのノードを形成することができる。代替的な実現化例では、単一のプロセッサチップが、そのプロセッサチップのそれぞれのノードを各々形成することができる１つ以上のプロセッサコアおよびハードウェア機能を含み得る。
【００３５】
たとえば、中央処理装置（ＣＰＵ）の状況では、プロセッサチップは少なくとも２つのノードを含んでいてもよく、各ノードはＣＰＵのそれぞれのコアであってもよい。それに代えて、グラフィカル処理装置（ＧＰＵ）の状況では、プロセッサチップは少なくとも２つのノードを含んでいてもよく、各ノードはＧＰＵのそれぞれのストリーミングマルチプロセッサであってもよい。コンピューティングシステム１００は、複数のプロセッサコンポーネントを含み得る。いくつかの実現化例では、プロセッサコンポーネントは、コンピューティングシステム１００全体のプロセッサチップ、プロセッサコア、メモリアクセスエンジン、または少なくとも１つのハードウェアコンポーネントのうちの少なくとも１つであってもよい。
【００３６】
いくつかの例では、プロセッサコアなどのプロセッサコンポーネントは、実行中のプログラムコードの少なくとも１つの発行済命令に基づいて少なくとも１つの特定の動作を実行するように構成された固定機能コンポーネントであってもよい。他の例では、メモリアクセスエンジン（memory access engine：ＭＡＥ）などのプロセッサコンポーネントは、システム１００の他のプロセッサコンポーネントによって実行されるプログラムコードよりも低い詳細度または粒度でプログラムコードを実行するように構成され得る。
【００３７】
たとえば、プロセッサコアによって実行されるプログラムコードは、ＭＡＥ記述子が生成されてＭＡＥに送信されるようにすることができる。記述子の受信後、ＭＡＥは、ＭＡＥ記述子に基づいてデータ転送動作を実行することができる。いくつかの実現化例では、ＭＡＥによって実行されるデータ転送は、たとえば、システムのあるデータ経路またはインターフェイスコンポーネントを介してシステム１００のあるコンポーネント間でデータを動かすこと、または、システム１００の例示的な構成バスにデータ要求を発行することを含み得る。
【００３８】
いくつかの実現化例では、システム１００の例示的なプロセッサチップの各テンソルノードは、プログラム命令を処理するハードウェアブロック／機能であり得る少なくとも２つの「フロントエンド」を有し得る。以下により詳細に説明されるように、第１のフロントエンドは第１のプロセッサコア１０４に対応することができ、一方、第２のフロントエンドは第２のプロセッサコア１０６に対応することができる。よって、第１および第２のプロセッサコアはまた、ここに第１のフロントエンド１０４および第２のフロントエンド１０６と記載されてもよい。
【００３９】
この明細書で使用されるように、トレースチェーンとは、トレースエントリがシステム１００内の例示的なチップマネージャへの送信のために置かれ得る、特定の物理データ通信バスであってもよい。受信されたトレースエントリは、複数のバイトと複数の２進値または２進数とを含むデータワード／構造であってもよい。このため、「ワード」という記述子は、例示的なプロセッサコアのハードウェアデバイスによって１単位として扱われ得る、固定サイズの２進データ片を示す。
【００４０】
いくつかの実現化例では、分散ハードウェアトレーシングシステムのプロセッサチップは、チップのそれぞれのコアでプログラムコードの一部を各々実行する、マルチコア（すなわち複数のコアを有する）プロセッサである。いくつかの実現化例では、プログラムコードの一部は、例示的な多層ニューラルネットワークの推論作業負荷のためのベクトル化計算に対応することができる。一方、代替的な実現化例では、プログラムコードの一部は概して、従来のプログラミング言語に関連付けられたソフトウェアモジュールに対応することができる。
【００４１】
コンピューティングシステム１００は概して、ノードマネージャ１０２と、第１のプロセッサコア（first processor core：ＦＰＣ）１０４と、第２のプロセッサコア（second processor core：ＳＰＣ）１０６と、ノードファブリック（node fabric：ＮＦ）１１０と、データルータ１１２と、ホストインターフェイスブロック（host interface block：ＨＩＢ）１１４とを含む。いくつかの実現化例では、システム１００は、信号切替、多重化、および逆多重化機能を行なうように構成されたメモリｍｕｘ１０８を含み得る。システム１００はさらに、ＦＰＣ１０４が内部に配置されたテンソルコア１１６を含む。テンソルコア１１６は、ベクトル化計算を多次元データアレイに行なうように構成された例示的な計算デバイスであってもよい。テンソルコア１１６はベクトル処理ユニット（vector processing unit：ＶＰＵ）１１８を含んでいてもよく、それは、行列ユニット（matrix unit：ＭＸＵ）１２０、転置ユニット（transpose unit：ＸＵ）１２２、簡約および置換ユニット（reduction and permutation unit：ＲＰＵ）１２４と対話する。いくつかの実現化例では、コンピューティングシステム１００は、ロード／格納ユニット、算術論理演算ユニット（arithmetic logic unit：ＡＬＵ）、およびベクトルユニットといった、従来のＣＰＵまたはＧＰＵの１つ以上の実行ユニットを含み得る。
【００４２】
システム１００のコンポーネントは、大きい一組のハードウェア性能カウンタと、コンポーネント内のトレース活動の完了を促進するサポートハードウェアとを一括して含む。以下により詳細に説明されるように、システム１００のそれぞれのプロセッサコアによって実行されるプログラムコードは、コード実行中に複数の性能カウンタを同時にイネーブルにするために使用される埋込みトリガーを含み得る。一般に、検出されたトリガーは、トレースデータが１つ以上のトレースイベントのために生成されるようにする。トレースデータは、カウンタに格納され、プログラムコードの性能特性を識別するために分析され得るインクリメンタルパラメータカウントに対応することができる。それぞれのトレースイベントについてのデータは、例示的な記憶媒体（たとえばハードウェアバッファ）に格納可能であり、トリガーの検出に応答して生成されるタイムスタンプを含み得る。
【００４３】
さらに、トレースデータは、システム１００のハードウェアコンポーネント内に生じるさまざまなイベントについて生成され得る。例示的なイベントは、直接メモリアクセス（ＤＭＡ）動作および同期フラグ更新（各々、以下により詳細に説明される）といった、ノード内およびクロスノード通信動作を含み得る。いくつかの実現化例では、システム１００は、一般にグローバル時間カウンタ（Global Time Counter：ＧＴＣ）と呼ばれる、グローバルに同期するタイムスタンプカウンタを含み得る。他の実現化例では、システム１００は、ランポート（Lamport）クロックといった他のタイプのグローバルクロックを含み得る。
【００４４】
ＧＴＣは、プログラムコード実行と、分散処理環境で実行されるソフトウェア／プログラムコードの性能との正確な相関のために使用され得る。加えて、およびＧＴＣに一部関連して、いくつかの実現化例では、システム１００は、分散システムでデータトレーシングを非常に協調的な態様で起動および停止するために分散ソフトウェアプログラムによって使用される１つ以上のトリガーメカニズムを含み得る。
【００４５】
いくつかの実現化例では、ホストシステム１２６が、埋込まれたオペランドを含み得るプログラムコードをコンパイルする。オペランドは、検出されると、ハードウェアイベントに関連付けられたトレースデータの取込みおよび格納を引き起こすことをトリガーする。いくつかの実現化例では、ホストシステム１２６は、コンパイルされたプログラムコードを、システム１００の１つ以上のプロセッサチップに提供する。代替的な実現化例では、プログラムコードは例示的な外部コンパイラによって（埋込まれたトリガーを用いて）コンパイルされ、システム１００の１つ以上のプロセッサチップにロードされ得る。いくつかの例では、コンパイラは、ソフトウェア命令の一部に埋込まれたあるトリガーに関連付けられた（以下に説明される）１つ以上のトレースビットを設定することができる。コンパイルされたプログラムコードは、システム１００の１つ以上のコンポーネントによって実行される分散ソフトウェアプログラムであってもよい。
【００４６】
ホストシステム１２６は、システム１００の１つ以上のコンポーネントによるプログラムコードの実行を監視するように構成された監視エンジン１２８を含み得る。いくつかの実現化例では、監視エンジン１２８は、ホストシステム１２６が、少なくともＦＰＣ１０４およびＳＰＣ１０６によって実行されるプログラムコードの実行を監視することを可能にする。たとえば、コード実行中、ホストシステム１２６は、少なくとも、生成されたトレースデータに基づいてハードウェアイベントの周期的なタイムラインを受信することによって、監視エンジン１２８を介して実行コードの性能を監視することができる。ホストシステム１２６のために単一のブロックが示されているが、いくつかの実現化例では、ホストシステム１２６は、システム１００の複数のプロセッサチップまたはチップコアに関連付けられる複数のホスト（またはホストサブシステム）を含み得る。
【００４７】
他の実現化例では、データトラフィックがＦＰＣ１０４と例示的な第３のプロセッサコア／ノードとの間の通信経路を横断する際、少なくとも３つのプロセッサコアを伴うクロスノード通信が、ホストシステム１２６に、１つ以上の中間「ホップ」でデータトラフィックを監視させてもよい。たとえば、ＦＰＣ１０４と第３のプロセッサコアとは、所与の期間にプログラムコードを実行する唯一のコアであってもよい。よって、ＦＰＣ１０４から第３のプロセッサコアへのデータ転送は、データがＦＰＣ１０４から第３のプロセッサコアへ転送される際、ＳＰＣ１０６で中間ホップについてのトレースデータを生成することができる。別の言い方をすると、システム１００でのデータルーティング中、第１のプロセッサチップから第３のプロセッサチップに向かうデータは、第２のプロセッサチップを横断する必要があるかもしれず、そのため、データルーティング動作の実行は、トレースエントリが第２のチップでのルーティング活動のために生成されるようにするかもしれない。
【００４８】
コンパイルされたプログラムコードが実行されると、システム１００のコンポーネントは、分散コンピュータシステムで生じるハードウェアイベントのタイムラインを生成するために対話することができる。ハードウェアイベントは、ノード内およびクロスノード通信イベントを含み得る。分散ハードウェアシステムの例示的なノードおよびそれらの関連付けられた通信は、図２を参照して以下により詳細に説明される。いくつかの実現化例では、少なくとも１つのハードウェアイベントタイムラインのためのハードウェアイベントの集合を識別するデータ構造が生成される。タイムラインは、分散システムで生じるイベントの再構築を可能にする。いくつかの実現化例では、イベント再構築は、特定のイベントの発生中に生成されたタイムスタンプの分析に基づく正しいイベント順序付けを含み得る。
【００４９】
一般に、例示的な分散ハードウェアトレーシングシステムは、システム１００の上述のコンポーネントと、ホストシステム１２６に関連付けられた少なくとも１つのホストコントローラとを含み得る。分散トレーシングシステムから得られたデータの性能またはデバッグは、イベントデータがたとえば時系列でまたは順序立てて相関される場合に有用であり得る。いくつかの実現化例では、接続されたソフトウェアモジュールに対応する複数の格納されたハードウェアイベントが格納され、次に、ホストシステム１２６による構造化分析のために順序立てられた場合に、データ相関が生じ得る。複数のホストシステムを含む実現化例については、異なるホストを介して得られたデータの相関は、たとえばホストコントローラによって行なわれてもよい。
【００５０】
いくつかの実現化例では、ＦＰＣ１０４およびＳＰ１０６は各々、１つのマルチコアプロセッサチップの別個のコアである。一方、他の実現化例では、ＦＰＣ１０４およびＳＰ１０６は、別個のマルチコアプロセッサチップのそれぞれのコアである。上述のように、システム１００は、少なくともＦＰＣ１０４およびＳＰＣ１０６を有する分散プロセッサユニットを含み得る。いくつかの実現化例では、システム１００の分散プロセッサユニットは、より大きい分散ソフトウェアプログラムまたはプログラムコードの少なくとも一部を実行するように構成された１つ以上のハードウェアまたはソフトウェアコンポーネントを含み得る。
【００５１】
データルータ１１２は、システム１００のコンポーネント間にデータ通信経路を提供するチップ間相互接続（inter-chip interconnect：ＩＣＩ）である。特に、ルータ１１２は、ＦＰＣ１０４とＳＰＣ１０６との間に、およびコア１０４、１０６に関連付けられたそれぞれのコンポーネント間に、通信結合または接続を提供することができる。ノードファブリック１１０は、システム１００の分散ハードウェアコンポーネントおよびサブコンポーネント内でデータパケットを動かすために、データルータ１１２と対話する。
【００５２】
ノードマネージャ１０２は、マルチノードプロセッサチップにおける低レベルのノード機能を管理する高レベルのデバイスである。以下により詳細に説明されるように、プロセッサチップの１つ以上のノードは、ハードウェアイベントデータを管理してローカルエントリログに格納するためにノードマネージャ１０２によって制御されるチップマネージャを含み得る。メモリｍｕｘ１０８は、例示的な外部高帯域メモリ（high bandwidth memory：ＨＢＭ）に提供されたデータ信号、または外部ＨＢＭから受信されたデータ信号に対してスイッチング、多重化、および逆多重化動作を行なうことができる多重化デバイスである。
【００５３】
いくつかの実現化例では、ｍｕｘ１０８がＦＰＣ１０４とＳＰＣ１０６とを切り替える際、（以下に説明される）例示的なトレースエントリがｍｕｘ１０８によって生成され得る。メモリｍｕｘ１０８は、ｍｕｘ１０８にアクセスできない特定のプロセッサコア１０４、１０６の性能に影響を与える可能性がある。このため、ｍｕｘ１０８によって生成されたトレースエントリデータは、それぞれのコア１０４、１０６に関連付けられたあるシステム活動のレイテンシにおいて結果として生じるスパイクを理解することを助けることができる。いくつかの実現化例では、ｍｕｘ１０８内で発生するハードウェアイベントデータ（たとえば、以下に説明されるトレースポイント）は、例示的なハードウェアイベントタイムラインで、ノードファブリック１１０についてのイベントデータと共にグループ化され得る。あるトレース活動が、複数のハードウェアコンポーネントについてのイベントデータを、例示的なハードウェアバッファ（たとえば、以下に説明されるトレースエントリログ２１８）に格納させる場合、イベントグループ化が生じ得る。
【００５４】
システム１００では、性能分析ハードウェアは、ＦＰＣ１０４、ＳＰＣ１０６、ｍｕｘ１０８、ノードファブリック１１０、データルータ１１２、およびＨＩＢ１１４を包含する。これらのハードウェアコンポーネントまたはユニットの各々は、ハードウェア性能カウンタと、ハードウェアイベントトレース機構および機能とを含む。いくつかの実現化例では、ＶＰＵ１１８、ＭＸＵ１２０、ＸＵ１２２、およびＲＰＵ１２４は、それら自体の専用性能ハードウェアを含んでいない。むしろ、そのような実現化例では、ＦＰＣ１０４は、ＶＰＵ１１８、ＭＸＵ１２０、ＸＵ１２２、およびＲＰＵ１２４のための必要なカウンタを提供するように構成され得る。
【００５５】
ＶＰＵ１１８は、例示的な行列−ベクトルプロセッサのベクトル要素に関連付けられたローカル化高帯域データ処理および算術演算をサポートする内部設計アーキテクチャを含み得る。ＭＸＵ１２０は、たとえば最大１２８×１２８の行列乗算を被乗数のベクトルデータセットに対して行なうように構成された行列乗算ユニットである。
【００５６】
ＸＵ１２２は、たとえば最大１２８×１２８の行列転置演算を、行列乗算演算に関連付けられたベクトルデータに対して行なうように構成された転置ユニットである。ＲＰＵ１２４は、シグマユニットと置換ユニットとを含み得る。シグマユニットは、行列乗算演算に関連付けられたベクトルデータに対して順次簡約を実行する。簡約は、和およびさまざまなタイプの比較演算を含み得る。置換ユニットは、行列乗算演算に関連付けられたベクトルデータのすべての要素を完全に置換し、または複製することができる。
【００５７】
いくつかの実現化例では、システム１００のコンポーネントによって実行されるプログラムコードは、機械学習、ニューラルネットワーク推論計算、および／または１つ以上の直接メモリアクセス機能を代表し得る。システム１００のコンポーネントは、システムの処理ユニットまたはデバイスに１つ以上の機能を実行させる命令を含む１つ以上のソフトウェアプログラムを実行するように構成され得る。「コンポーネント」という用語は、あらゆるデータ処理デバイス、または制御ステータスレジスタなどの記憶デバイス、またはデータを処理し格納することができる任意の他のデバイスを含むよう意図される。
【００５８】
システム１００は概して、１つ以上のプロセッサ（たとえばマイクロプロセッサまたは中央処理装置（ＣＰＵ））、グラフィックス処理装置（ＧＰＵ）、特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）、または異なるプロセッサの組合せを含み得る、複数の処理ユニットまたはデバイスを含み得る。代替的な実施形態では、システム１００は各々、この明細書で説明されるハードウェアトレース機能に関連する計算を行なうための追加の処理オプションを提供する、他のコンピューティングリソース／デバイス（たとえばクラウドベースのサーバ）を含み得る。
【００５９】
処理ユニットまたはデバイスはさらに、１つ以上のメモリユニットまたはメモリバンク（たとえばレジスタ／カウンタ）を含み得る。いくつかの実現化例では、処理ユニットは、この明細書で説明される１つ以上の機能を行なうために、メモリに格納された、システム１００のデバイスへのプログラミングされた命令を実行する。メモリユニット／バンクは、１つ以上の非一時的マシン読取可能記憶媒体を含み得る。非一時的マシン読取可能記憶媒体は、ソリッドステートメモリ、磁気ディスク、および光学ディスク、ランダムアクセスメモリ（random access memory：ＲＡＭ）、読取専用メモリ（read-only memory：ＲＯＭ）、消去可能プログラマブル読取専用メモリ（たとえばＥＰＲＯＭ、ＥＥＰＲＯＭ、またはフラッシュメモリ）、もしくは、情報を格納可能な任意の他の有形媒体を含み得る。
【００６０】
図２は、システム１００によって実行される分散ハードウェアトレーシングに使用されるトレースチェーンおよびそれぞれの例示的なノード２００、２０１のブロック図を示す。いくつかの実現化例では、システム１００のノード２００、２０１は、単一のマルチコアプロセッサ内の異なるノードであってもよい。他の実現化例では、ノード２００は第１のマルチコアプロセッサチップにおける第１のノードであってもよく、ノード２０１は第２のマルチコアプロセッサチップにおける第２のノードであってもよい。
【００６１】
図２の実現化例では２つのノードが図示されているが、代替的な実現化例では、システム１００は複数のノードを含み得る。複数のノードを伴う実現化例については、クロスノードデータ転送が、複数のノードを横断する例示的なデータ経路に沿った中間ホップでトレースデータを生成することができる。たとえば、中間ホップは、特定のデータ転送経路における別個のノードを通過するデータ転送に対応することができる。いくつかの例では、１つ以上のノードを通過するクロスノードデータ転送中に生じる１つ以上の中間ホップのために、ＩＣＩトレース／ハードウェアイベントに関連付けられたトレースデータを生成することができる。
【００６２】
いくつかの実現化例では、ノード０およびノード１は、推論作業負荷のためのプログラムコードの一部に関連付けられたベクトル化計算に使用されるテンソルノードである。この明細書で使用されるように、テンソルは多次元の幾何学的オブジェクトであり、例示的な多次元の幾何学的オブジェクトは行列とデータアレイとを含む。
【００６３】
図２の実現化例に示すように、ノード２００は、システム１００のコンポーネントの少なくとも部分集合と対話するトレースチェーン２０３を含む。同様に、ノード２０１は、システム１００のコンポーネントの少なくとも部分集合と対話するトレースチェーン２０５を含む。いくつかの実現化例では、ノード２００、２０１はコンポーネントの同じ部分集合の例示的なノードであり、一方、他の実現化例では、ノード２００、２０１は別個のコンポーネント部分集合のそれぞれのノードである。データルータ／ＩＣＩ１１２は、トレースデータをチップマネージャ２１６に提供するためにトレースチェーン２０３および２０５と概して収束するトレースチェーン２０７を含む。
【００６４】
図２の実現化例では、ノード２００、２０１は各々、少なくともＦＰＣ１０４、ＳＰＣ１０６、ノードファブリック１１０、およびＨＩＢ１１４を有するそれぞれのコンポーネント部分集合を含み得る。ノード２００、２０１の各コンポーネントは、ノードの特定のコンポーネントによって生成される（以下に説明される）トレースポイントをグループ化するように構成された１つ以上のトレースｍｕｘを含む。ＦＰＣ１０４はトレースｍｕｘ２０４を含み、ノードファブリック１１０はトレースｍｕｘ２１０ａ／ｂを含み、ＳＰＣ１０６はトレースｍｕｘ２０６ａ／ｂ／ｃ／ｄを含み、ＨＩＢ２１４はトレースｍｕｘ２１４を含み、ＩＣＩ２１２はトレースｍｕｘ２１２を含む。いくつかの実現化例では、各トレースｍｕｘのためのトレース制御レジスタは、個々のトレースポイントがイネーブルおよびディスエーブルにされることを可能にする。いくつかの例では、１つ以上のトレースｍｕｘのために、それらの対応するトレース制御レジスタは、個々のイネーブルビットと、より広範なトレースｍｕｘ制御とを含み得る。
【００６５】
一般に、トレース制御レジスタは、トレース命令データを受信して格納する従来の制御ステータスレジスタ（control status register：ＣＳＲ）であってもよい。より広範なトレースｍｕｘ制御に関し、いくつかの実現化例では、システム１００によって実行されるＣＳＲ書込に基づいて、トレーシングがイネーブルおよびディスエーブルにされ得る。いくつかの実現化例では、トレーシングは、グローバル時間カウンタ（ＧＴＣ）の値に基づいて、ＦＰＣ１０４（またはコア１１６）における例示的なトレースマークレジスタの値に基づいて、もしくは、ＳＰＣ１０６における例示的なトレースマークレジスタの値に基づいて、システム１００によって動的に起動および停止され得る。
【００６６】
トレース活動を動的に起動および停止するための、ならびに、同期されたハードウェアイベント収集のためのシステムおよび方法に関連する追加の詳細および説明が、図５〜７の実現化例を参照してより詳細に説明される。
【００６７】
いくつかの実現化例では、コア１１６のために、ＦＰＣ１０４は、コア１１６内に生じるイベント活動に関連付けられたトレースウィンドウを定義するためにトレース制御パラメータを使用することができる。トレース制御パラメータは、トレースウィンドウが、ＧＴＣについての下限および上限、ならびに、トレースマークレジスタについての下限および上限によって定義されることを可能にする。
【００６８】
いくつかの実現化例では、システム１００は、トレースイベントフィルタリング機能といった、生成されるトレースエントリの数の減少を可能にする機能を含み得る。たとえば、ＦＰＣ１０４およびＳＰＣ１０６は各々、各コアが（以下に説明される）例示的な生成されたトレース記述子においてトレースビットを設定するレートを制限するフィルタリング機能を含み得る。ＨＩＢ１１４は、あるＤＭＡトレースイベントの取込みに関連付けられたトレースビットを制限する例示的なＤＭＡレートリミッタといった、同様のフィルタリング機能を含み得る。加えて、ＨＩＢ１１４は、ソースＤＭＡトレースエントリをキューに入れる制限のための（たとえばイネーブルビットを介した）制御を含み得る。
【００６９】
いくつかの実現化例では、ＤＭＡ動作用の記述子は、ホストシステム１２６の例示的なコンパイラによって設定されるトレースビットを有し得る。トレースビットが設定されると、トレースデータを判定して生成するハードウェア機能／ノブが、例示的なトレースイベントを完了するために使用される。いくつかの例では、ＤＭＡにおける最後のトレースビットは、コンパイラによって静的に挿入されるトレースビットと、特定のハードウェアコンポーネントによって動的に判定されるトレースビットとの論理和演算であり得る。よって、いくつかの例では、コンパイラが生成したトレースビットは、フィルタリングとは別に、生成されるトレースデータの全体量を減少させるためのメカニズムを提供することができる。
【００７０】
たとえば、ホストシステム１２６のコンパイラは、１つ以上のリモートＤＭＡ動作（たとえば、少なくとも２つのノード間にわたるＤＭＡ）のためのトレースビットだけを設定し、１つ以上のローカルＤＭＡ動作（たとえば、ノード２００といった特定のテンソルノード内のＤＭＡ）のためのトレースビットをクリアするよう、決定してもよい。このように、生成されるトレースデータの量は、クロスノード（すなわちリモート）およびローカルＤＭＡ動作の双方を含むトレース活動ではなく、クロスノードＤＭＡ動作に制限されたトレース活動に基づいて減少され得る。
【００７１】
いくつかの実現化例では、システム１００によって始動された少なくとも１つのトレースイベントが、システム１００全体にわたって生じる複数の中間動作を含むメモリアクセス動作に関連付けられ得る。メモリアクセス動作用の記述子（たとえばＭＡＥ記述子）は、複数の中間動作に関連付けられたデータを１つ以上のメモリバッファに格納させるトレースビットを含み得る。このため、トレースビットは、データパケットがシステム１００を横断する際、ＤＭＡ動作の中間ホップで中間メモリ動作に「タグ付け」し、複数のトレースイベントを生成するために使用され得る。
【００７２】
いくつかの実現化例では、ＩＣＩ１１２は、ノード２００、２０１の特定のコンポーネントの各入口および出口ポートのための制御機能性を提供する、１組のイネーブルビットおよび１組のパケットフィルタを含み得る。これらのイネーブルビットおよびパケットフィルタは、ＩＣＩ１１２が、ノード２００、２０１の特定のコンポーネントに関連付けられたトレースポイントをイネーブルおよびディスエーブルにすることを可能にする。トレースポイントをイネーブルおよびディスエーブルにすることに加えて、ＩＣＩ１１２は、イベントソース、イベント宛先、およびトレースイベントパケットタイプに基づいてトレースデータをフィルタリングするように構成され得る。
【００７３】
いくつかの実現化例では、ステップマーカー、ＧＴＣ、またはトレースマーカーを使用することに加えて、プロセッサコア１０４、１０６、およびＨＩＢ１１４のための各トレース制御レジスタはまた、「各自」（everyone）トレースモードを含み得る。この「各自」トレースモードは、プロセッサチップ全体にわたるトレーシングがトレースｍｕｘ２０４またはトレースｍｕｘ２０６ａのいずれかによって制御されることを可能にし得る。各自トレースモード時、トレースｍｕｘ２０４および２０６ａは、その特定のトレースｍｕｘ、すなわち、ｍｕｘ２０４またはｍｕｘ２０６ａのいずれかがトレースウィンドウ内にあるか否かを特定する、「ウィンドウ内」トレース制御信号を送信することができる。
【００７４】
ウィンドウ内トレース制御信号は、たとえば、１つのプロセッサチップ内の、または複数のプロセッサチップ間にわたる他のすべてのトレースｍｕｘに一斉送信され、または全般的に送信され得る。ｍｕｘ２０４またはｍｕｘ２０６ａのいずれかがトレース活動を実行している場合、他のトレースｍｕｘへの一斉送信によって、すべてのトレーシングがイネーブルにされ得る。いくつかの実現化例では、プロセッサコア１０４、１０６、およびＨＩＢ１１４に関連付けられたトレースｍｕｘは各々、「各自トレース」制御信号がいつ、および／またはどのように生成されるかを特定するトレースウィンドウ制御レジスタを含む。
【００７５】
いくつかの実現化例では、トレースｍｕｘ２１０ａ／ｂおよびトレースｍｕｘ２１２におけるトレース活動は一般に、トレースビットが、ＩＣＩ／データルータ１１２を横断するＤＭＡ動作または制御メッセージのためにデータワードにおいて設定されるかどうかに基づいて、イネーブルにされる。ＤＭＡ動作または制御メッセージは、ある状況またはソフトウェア状態に基づいて設定された２進データパケット内にトレースビットを有し得る、固定サイズの２進データ構造であってもよい。
【００７６】
たとえば、ＤＭＡ動作がトレースタイプＤＭＡ命令によってＦＰＣ１０４（またはＳＰＣ１０６）で始動され、イニシエータ（プロセッサコア１０４または１０６）がトレースウィンドウ内にある場合、トレースビットはその特定のＤＭＡにおいて設定されるであろう。別の例では、ＦＰＣ１０４について、ＦＰＣ１０４がトレースウィンドウ内にあり、トレースデータを格納させるトレースポイントがイネーブルにされた場合、システム１００内の別のコンポーネントへのデータ書込みのための制御メッセージがトレースビットを設定させるであろう。
【００７７】
いくつかの実現化例では、ゼロレングスＤＭＡ動作が、システム１００内のより広範なＤＭＡ実現化例の一例を提供する。たとえば、いくつかのＤＭＡ動作は、システム１００内に非ＤＭＡ活動を生成することができる。非ＤＭＡ活動の実行も、非ＤＭＡ活動がまるでＤＭＡ動作（たとえば、非ゼロレングス動作を含むＤＭＡ活動）であるかのようにトレースされ得る（たとえば、トレースデータを生成する）。たとえば、ソース位置で始動されたものの、送信または転送されるべきデータがない（たとえばゼロレングスである）ＤＭＡ動作は、代わりに、制御メッセージを宛先位置へ送信してもよい。制御メッセージは、宛先に受信または作業されるべきデータがないことを示すであろう。そして、制御メッセージ自体は、非ゼロレングスＤＭＡ動作がトレースされるように、システム１００によってトレースされるであろう。
【００７８】
いくつかの例では、ＳＰＣ１０６について、ゼロレングスＤＭＡ動作は制御メッセージを生成することができ、ＤＭＡがトレースビットを設定させた場合のみ、すなわち、制御メッセージがゼロレングスを有していなかった場合のみ、そのメッセージに関連付けられたトレースビットが設定される。一般に、ＨＩＢ１１４がトレースウィンドウ内にある場合、ホストシステム１２６から始動されたＤＭＡ動作がトレースビットを設定させるであろう。
【００７９】
図２の実現化例では、トレースチェーン２０３は、ノード０と整列するコンポーネント部分集合についてのトレースエントリデータを受信し、一方、トレースチェーン２０５は、ノード１と整列するコンポーネント部分集合についてのトレースエントリデータを受信する。各トレースチェーン２０３、２０５、２０７は、チップマネージャ２１６の例示的なトレースエントリデータログ２１８にトレースエントリデータを提供するためにそれぞれのノード２００、２０１、およびＩＣＩ１１２によって使用される別個のデータ通信経路である。このため、トレースチェーン２０３、２０５、２０７のエンドポイントは、トレースイベントが例示的なメモリユニットに格納され得るチップマネージャ２１６である。
【００８０】
いくつかの実現化例では、チップマネージャ２１６の少なくとも１つのメモリユニットは１２８ビット幅であり、少なくとも２０，０００個のトレースエントリのメモリ深度を有し得る。代替的な実現化例では、少なくとも１つのメモリユニットは、より大きい、またはより小さいビット幅を有していてもよく、より多い、またはより少ないエントリを格納できるメモリ深度を有していてもよい。
【００８１】
いくつかの実現化例では、チップマネージャ２１６は、受信されたトレースエントリデータを管理するための命令を実行する少なくとも１つの処理デバイスを含み得る。たとえば、チップマネージャ２１６は、トレースチェーン２０３、２０５、２０７を介して受信されたトレースデータのそれぞれのハードウェアイベントについてのタイムスタンプデータを走査／分析するための命令を実行することができる。分析に基づいて、チップマネージャ２１６は、ハードウェアトレースイベントの時系列の順序を識別（または生成）するために使用され得るデータを含むように、トレースエントリログ２１８をポピュレートすることができる。ハードウェアトレースイベントは、システム１００の処理ユニットが例示的な分散ソフトウェアプログラムを実行する際にコンポーネントおよびサブコンポーネントレベルで生じるデータパケットの移動に対応することができる。
【００８２】
いくつかの実現化例では、システム１００のハードウェアユニットは、例示的なハードウェアトレースバッファを非時系列的に（すなわち順不同に）ポピュレートするトレースエントリ（および対応するタイムスタンプ）を生成してもよい。たとえば、チップマネージャ２１６は、生成されたタイムスタンプを有する複数のトレースエントリをエントリログ２１８に挿入させることができる。挿入された複数のトレースエントリのうち、それぞれのトレースエントリは、互いに対して時系列化されていなくてもよい。この実現化例では、非時系列のトレースエントリは、ホストシステム１２６の例示的なホストバッファによって受信され得る。ホストバッファによって受信されると、ホストシステム１２６は、それぞれのトレースエントリについてのタイムスタンプデータを走査／分析するために、性能分析／監視用ソフトウェアに関連する命令を実行することができる。実行された命令は、トレースエントリをソートするために、および、ハードウェアトレースイベントのタイムラインを構築／生成するために使用され得る。
【００８３】
いくつかの実現化例では、トレーシングセッション中、ホストＤＭＡ動作を介して、トレースエントリをエントリログ２１８から除去することができる。いくつかの例では、ホストシステム１２６は、ＤＭＡエントリを、それらがログに追加されるのと同じくらい速く、トレースエントリログ２１８から除去しないかもしれない。他の実現化例では、エントリログ２１８は、予め定義されたメモリ深度を含み得る。エントリログ２１８のメモリ深度制限に達すると、追加のトレースエントリが失われるかもしれない。どのトレースエントリが失われるかを制御するために、エントリログ２１８は、先入れ先出し（first-in-first-out：ＦＩＦＯ）モードで、またはそれに代えて、上書き記録モードで動作することができる。
【００８４】
いくつかの実現化例では、上書き記録モードは、事後デバッグに関連付けられた性能分析をサポートするために、システム１００によって使用され得る。たとえば、プログラムコードは、トレース活動がイネーブルにされ、上書き記録モードがイネーブルにされた状態で、ある期間実行され得る。システム１００内の事後ソフトウェアイベント（たとえばプログラム破損）に応答して、ホストシステム１２６によって実行される監視用ソフトウェアは、プログラム破損前に生じたハードウェアイベントを把握するために、例示的なハードウェアトレースバッファのデータ内容を分析することができる。この明細書で使用されるように、事後デバッグは、コードが破損した後の、または、意図されたように実行される／動作することがおおむねできなくなった後のプログラムコードの分析またはデバッグに関する。
【００８５】
ＦＩＦＯモードでは、エントリログ２１８がいっぱいである場合、および、ホストシステム１２６がある時間枠内の保存されたログエントリを除去する場合、メモリリソースを節約するために、新しいトレースエントリはチップマネージャ２１６のメモリユニットに保存されないかもしれない。一方、上書き記録モードでは、ホストシステム１２６がある時間枠内の保存されたログエントリを除去するためにエントリログ２１８がいっぱいである場合、メモリリソースを節約するために、新しいトレースエントリを、エントリログ２１８内に格納された最も古いトレースエントリに上書きすることができる。いくつかの実現化例では、トレースエントリは、ＤＭＡ動作がＨＩＢ１１４の処理機能を使用することに応答して、ホストシステム１２６のメモリへ動かされる。
【００８６】
この明細書で使用されるように、トレースポイントは、トレースエントリと、チップマネージャ２１６によって受信され、トレースエントリログ２１８に格納された当該トレースエントリに関連付けられたデータとの生成元である。いくつかの実現化例では、マルチコアマルチノードプロセッサマイクロチップは、チップ内に３つのトレースチェーンを含んでいてもよく、第１のトレースチェーンはチップノード０からトレースエントリを受信し、第２のトレースチェーンはチップノード１からトレースエントリを受信し、第３のトレースチェーンはチップのＩＣＩルータからトレースエントリを受信するようになっている。
【００８７】
各トレースポイントは、そのトレースチェーン内に、それがトレースエントリのヘッダに挿入する一意的なトレース識別番号を有する。いくつかの実現化例では、各トレースエントリは、それが発生したトレースチェーンを、１つ以上のバイト／ビットのデータワードによって示されたヘッダにおいて識別する。たとえば、各トレースエントリは、特定のトレースイベントに関する情報を伝える定義されたフィールドフォーマット（たとえばヘッダ、ペイロードなど）を有するデータ構造を含み得る。トレースエントリにおける各フィールドは、トレースエントリを生成したトレースポイントに適用可能な有用なデータに対応する。
【００８８】
上述のように、各トレースエントリは、トレースエントリログ２１８に関連付けられたチップマネージャ２１６のメモリユニットに書込まれ、または格納され得る。いくつかの実現化例では、トレースポイントが個々にイネーブルまたはディスエーブルにされてもよく、複数のトレースポイントが、同じタイプであるものの異なるトレースポイント識別子を有するトレースエントリを生成してもよい。
【００８９】
いくつかの実現化例では、各トレースエントリタイプは、トレース名と、トレース記述と、トレースエントリ内の特定のフィールドおよび／またはフィールドの集合のための符号化を識別するヘッダとを含み得る。これらの名前、記述、およびヘッダは、トレースエントリが表わすことの記述を一括して提供する。チップマネージャ２１６の観点から見ると、この記述は、特定のトレースエントリが特定のプロセッサチップ内に加わった特定のトレースチェーン２０３、２０５、２０７を識別することもできる。このため、トレースエントリ内のフィールドは、記述に関する（たとえばバイト／ビット単位の）データ片を表わしており、どのトレースポイントが特定のトレースエントリを生成したかを判定するために使用されるトレースエントリ識別子であってもよい。
【００９０】
いくつかの実現化例では、格納されたハードウェアイベントのうちの１つ以上に関連付けられたトレースエントリデータは、ａ）少なくともノード０とノード１との間、ｂ）少なくともノード０内のコンポーネント間、および、ｃ）少なくともノード１内のコンポーネント間に生じるデータ通信に部分的に対応することができる。たとえば、格納されたハードウェアイベントは、１）ノード０のＦＰＣ１０４とノード１のＦＰＣ１０４との間、ノード０のＦＰＣ１０４とノード０のＳＰＣ１０６との間、２）ノード１のＳＰＣ１０６とノード１のＳＰＣ１０６との間、のうちの少なくとも１つで生じるデータ通信に部分的に対応することができる。
【００９１】
図３は、例示的なトレース多重化設計アーキテクチャ３００および例示的なデータ構造３２０のブロック図を示す。トレース多重化設計３００は概して、トレースバス入力３０２、バスアービタ３０４、およびローカルトレースポイントアービタ３０６、バスＦＩＦＯ３０８、少なくとも１つのローカルトレースイベントキュー３１０、共有トレースイベントＦＩＦＯ３１２、およびトレースバスアウト３１４を含む。
【００９２】
多重化設計３００は、システム１００のコンポーネント内に配置された例示的なトレースｍｕｘに対応する。多重化設計３００は、以下の機能性を含み得る。バスイン３０２は、時間アービトレーション論理（たとえばアービタ３０４）によってトレースデータが例示的なトレースチェーンに置かれるようになるまでバスＦＩＦＯ３０８内に一時的に格納されるローカルトレースポイントデータに関連し得る。コンポーネントのための１つ以上のトレースポイントが、トレースイベントデータを、少なくとも１つのローカルトレースイベントキュー３１０に挿入することができる。アービタ３０６は第１のレベルのアービトレーションを提供し、キュー３１０内に格納されたローカルトレースイベントからのイベントの選択を可能にする。選択されたイベントは、格納キューとしても機能する共有トレースイベントＦＩＦＯ３１２に置かれる。
【００９３】
アービタ３０４は、ＦＩＦＯキュー３１２からローカルトレースイベントを受信し、ローカルトレースイベントをトレースバスアウト３１４を介して特定のトレースチェーン２０３、２０５、２０７上に併合する第２のレベルのアービトレーションを提供する。いくつかの実現化例では、トレースエントリは、それらが共有ＦＩＦＯ３１２に併合され得るよりも速く、ローカルキュー３１０に押込まれてもよい。または、それに代えて、トレースエントリは、それらがトレースバス３１４上に併合され得るよりも速く、共有ＦＩＦＯ３１２に押込まれてもよい。これらのシナリオが生じる場合、それぞれのキュー３１０および３１２はトレースデータでいっぱいになるであろう。
【００９４】
いくつかの実現化例では、いずれかのキュー３１０または３１２がトレースデータでいっぱいになると、システム１００は、最新のトレースエントリがドロップされて特定のキューに格納または併合されないように構成され得る。他の実現化例では、あるキュー（たとえばキュー３１０、３１２）がいっぱいになった場合にトレースエントリをドロップするのではなく、システム１００は、もう一度いっぱいになったキューがエントリを受信するための利用可能キュー空間を有するまで、例示的な処理パイプラインをストールさせるように構成され得る。
【００９５】
たとえば、キュー３１０、３１２を使用する処理パイプラインは、十分なまたはしきい値の数のトレースエントリがトレースバス３１４上に併合されるまでストールされ得る。十分なまたはしきい値の数は、１つ以上のトレースエントリがキュー３１０、３１２によって受信されるための利用可能なキュー空間をもたらす、特定の数の併合されたトレースエントリに対応することができる。下流のキュー空間が利用可能になるまで処理パイプラインがストールされる実現化例は、トレースエントリがドロップされるのではなく保たれることに基づいた、より高い忠実度のトレースデータを提供することができる。
【００９６】
いくつかの実現化例では、ローカルトレースキューは、各トレースエントリがローカルキュー３１０において１ヶ所のみを占めるように、トレースエントリによって要求されるのと同じくらい幅が広い。しかしながら、共有トレースＦＩＦＯキュー３１２は、いくつかのトレースエントリが共有キュー３１２において２つの位置を占め得るように、一意的なトレースエントリライン符号化を使用することができる。いくつかの実現化例では、トレースパケットのいずれかのデータがドロップされた場合、部分パケットがトレースエントリログ２１８に現われないように、パケット全体がドロップされる。
【００９７】
一般に、トレースは、システム１００の特定のコンポーネントに関連付けられた活動またはハードウェアイベントのタイムラインである。集合体データである（以下に説明される）性能カウンタとは異なり、トレースは、特定されたトレースウィンドウ中に生じるハードウェア活動についての洞察力を提供する詳細なイベントデータを含む。説明されるハードウェアシステムは、トレースエントリの生成、ハードウェア管理バッファでのトレースエントリの一時的格納、１つ以上のトレースタイプの静的および動的イネーブリング、ならびに、ホストシステム１２６へのトレースエントリデータのストリーミングを含む、分散ハードウェアトレーシングのための大規模なサポートを可能にする。
【００９８】
いくつかの実現化例では、トレースは、ＤＭＡ動作の生成、ＤＭＡ動作の実行、ある命令の発行／実行、または同期フラグの更新といった、システム１００のコンポーネントによって実行されるハードウェアイベントのために生成され得る。いくつかの例では、トレース活動は、システムを通してＤＭＡを追跡するために、または、特定のプロセッサコア上で実行される命令を追跡するために使用され得る。
【００９９】
システム１００は、ハードウェアイベントのタイムラインから１つ以上のハードウェアイベント３２２、３２４を識別する少なくとも１つのデータ構造３２０を生成するように構成され得る。いくつかの実現化例では、データ構造３２０は、１つ以上のハードウェアイベント３２２、３２４を、少なくともＦＰＣ１０４およびＳＰＣ１０６に関連付けられたイベントの時系列の順序で配置する。いくつかの例では、システム１００は、データ構造３２０を、ホストシステム１２６のホスト制御デバイスのメモリバンクに格納することができる。データ構造３２０は、少なくともプロセッサコア１０４および１０６によって実行されるプログラムコードの性能を評価するために使用され得る。
【０１００】
ハードウェアイベント３２４によって示されるように、いくつかの実現化例では、特定のトレース識別（ＩＤ）番号（たとえばトレースＩＤ‘００３）が、分散プロセッサユニット間にわたって生じる複数のハードウェアイベントに関連付けられ得る。複数のハードウェアイベントは、特定のメモリアクセス動作（たとえばＤＭＡ）に対応することができ、特定のトレースＩＤ番号は、１つ以上のハードウェアイベントを相関させるために使用される。
【０１０１】
たとえば、イベント３２４によって示されるように、ＤＭＡ動作用の単一のトレースＩＤは、ＤＭＡにおける複数の異なるポイントに対応する複数のタイムスタンプを含み得る。いくつかの例では、トレースＩＤ‘００３は、互いに対して何らかの時間離れているとして識別される、「発行済」イベント、「実行済」イベント、および「完了済」イベントを有することができる。よって、この点に関し、トレースＩＤはさらに、相関に基づいて、およびタイムスタンプを参照して、メモリアクセス動作のレイテンシ属性を判定するために使用され得る。
【０１０２】
いくつかの実現化例では、データ構造３２０を生成することは、たとえば、システム１００が、ハードウェアイベントの第１の部分集合におけるそれぞれのイベントのイベントタイムスタンプを、ハードウェアイベントの第２の部分集合におけるそれぞれのイベントのイベントタイムスタンプと比較することを含み得る。データ構造３２０を生成することはさらに、システム１００が、イベントの第１の部分集合とイベントの第２の部分集合との比較に部分的に基づいて、相関された一組のハードウェアイベントを、データ構造における提示のために提供することを含み得る。
【０１０３】
図３に示すように、データ構造３２０は、特定のハードウェアイベント３２２、３２４のレイテンシ属性を示す少なくとも１つのパラメータを識別することができる。レイテンシ属性は少なくとも、特定のハードウェアイベントの持続時間を示し得る。いくつかの実現化例では、データ構造３２０は、ホストシステム１２６の制御デバイスによって実行されるソフトウェア命令によって生成される。いくつかの例では、構造３２０は、制御デバイスがトレースエントリデータをホストシステム１２６のメモリディスク／ユニットに格納することに応答して生成され得る。
【０１０４】
図４は、システム１００によって実行される直接メモリアクセス（ＤＭＡ）トレースイベントのための例示的なトレース活動を示すブロック図４００である。ＤＭＡトレーシングのために、第１のプロセッサノードから第２のプロセッサノードへと発生する例示的なＤＭＡ動作についてのデータが、ＩＣＩ１１２を介して進むことができ、データ経路に沿って中間ＩＣＩ／ルータホップを生成することができる。ＤＭＡ動作がＩＣＩ１１２を横断する際、ＤＭＡ動作は、プロセッサチップ内の各ノードで、および各ホップに沿ってトレースエントリを生成するであろう。ノードおよびホップに沿ったＤＭＡ動作の時間的推移を再構築するために、これらの生成されたトレースエントリの各々によって情報が取込まれる。
【０１０５】
例示的なＤＭＡ動作は、図４の実現化例に示すプロセスステップに関連付けられ得る。この動作のために、ローカルＤＭＡが、プロセッサコア１０４、１０６の少なくとも１つに関連付けられた仮想メモリ４０２（ｖｍｅｍ４０２）からＨＢＭ１０８へデータを転送する。図４００に示された番号付けは、表４０４のステップに対応しており、概して、ノードファブリック１１０における活動、またはノードファブリック１１０によって始動される活動を表わす。
【０１０６】
表４０４のステップは概して、関連付けられたトレースポイントを説明する。例示的な動作は、このＤＭＡのために６つのトレースエントリを生成するであろう。ステップ１は、プロセッサコアからノードファブリック１１０への最初のＤＭＡ要求を含み、それはノードファブリックにおいてトレースポイントを生成する。ステップ２は、ノードファブリック１１０がプロセッサコアにデータを転送するよう求める読出コマンドを含み、それはノードファブリック１１０において別のトレースポイントを生成する。ｖｍｅｍ４０２がノードファブリック１１０の読出を完了すると、例示的な動作は、ステップ３のためのトレースエントリを有していない。
【０１０７】
ステップ４は、ノードファブリック１１０が、プロセッサコアにおいて同期フラグ更新を引き起こすために読出リソース更新を行なうことを含み、それはプロセッサコアにおいてトレースポイントを生成する。ステップ５は、次のデータがＨＢＭに書込まれることをノードファブリック１１０がメモリｍｕｘ１０８に通知する書込コマンドを含む。書込コマンドを介した通知は、ノードファブリック１１０においてトレースポイントを生成し、一方、ステップ６で、ＨＢＭへの書込の完了も、ノードファブリック１１０においてトレースポイントを生成する。ステップ７で、ノードファブリック１１０は、プロセッサコアにおいて同期フラグ更新を引き起こすために書込リソース更新を行ない、それはプロセッサコアにおいて（たとえばＦＰＣ１０４において）トレースポイントを生成する。書込リソース更新に加えて、ノードファブリック１１０は、ＤＭＡ動作のためのデータ完了がプロセッサコアに信号で送り返される受信確認更新（ａｃｋ更新）を行なうことができる。ａｃｋ更新は、書込リソース更新によって生成されたトレースエントリと同様のトレースエントリを生成することができる。
【０１０８】
別の例示的なＤＭＡ動作では、ＤＭＡ命令が発生元ノードのノードファブリック１１０において発行されると、第１のトレースエントリが生成される。ＤＭＡについてのデータを読出し、そのデータを送信用キューに書込むために使用される時間を取込むために、追加のトレースエントリがノードファブリック１１０において生成され得る。いくつかの実現化例では、ノードファブリック１１０は、ＤＭＡデータを、より小さいチャンクのデータへとパケット化することができる。より小さいチャンクへとパケット化されたデータのために、読出および書込トレースエントリが、最初のデータチャンクおよび最後のデータチャンクについて生成され得る。オプションで、最初と最後のデータチャンクに加えて、すべてのデータチャンクが、トレースエントリを生成するために設定され得る。
【０１０９】
ＩＣＩホップを要求し得るリモート／非ローカルＤＭＡ動作のために、最初のデータおよび最後のデータチャンクは、ＩＣＩ／ルータ１１２に沿った各中間ホップにおける入口および出口ポイントで、追加のトレースエントリを生成することができる。ＤＭＡデータが宛先ノードに到着すると、以前のノードファブリック１１０エントリと同様のトレースエントリが、宛先ノードで生成される（たとえば、最初と最後のデータチャンクの読出／書込）。いくつかの実現化例では、ＤＭＡ動作の最後のステップは、ＤＭＡに関連付けられた実行された命令が宛先ノードで同期フラグの更新を引き起こすことを含み得る。同期フラグが更新されると、ＤＭＡ動作の完了を示すトレースエントリが生成され得る。
【０１１０】
いくつかの実現化例では、トレースポイントが実行され得るように、ＤＭＡトレーシングが、ＦＰＣ１０４、ＳＰＣ１０６、またはＨＩＢ１１４によって、各コンポーネントがトレースモードである場合に始動される。システム１００のコンポーネントは、トリガーメカニズムを介したＦＰＣ１０４またはＳＰＣ１０６におけるグローバル制御に基づいて、トレースモードに入ることができる。システム１００のコンポーネントによるプログラムコードの実行に関連付けられた特定のアクションまたは状態の発生に応答して、トレースポイントはトリガーする。たとえば、プログラムコードの一部は、システム１００の少なくとも１つのハードウェアコンポーネントによって検出可能である、埋込まれたトリガー機能を含み得る。
【０１１１】
システム１００のコンポーネントは、ＦＰＣ１０４またはＳＰＣ１０６の少なくとも１つによって実行されるプログラムコードの一部に関連付けられたトリガー機能を検出するように構成され得る。いくつかの例では、トリガー機能は、１）実行されたプログラムコードの一部またはモジュールにおける特定のシーケンスステップ、または、２）システム１００の分散プロセッサユニットによって使用されるＧＴＣによって示される特定の時間パラメータ、のうちの少なくとも１つに対応することができる。
【０１１２】
トリガー機能の検出に応答して、システム１００の特定のコンポーネントは、１つ以上のハードウェアイベントに関連付けられたトレースエントリデータをハードウェアコンポーネントの少なくとも１つのメモリバッファに格納させる少なくとも１つのトレースポイント（たとえばトレースイベント）を、始動、トリガー、または実行することができる。上述のように、格納されたトレースデータは次に、少なくとも１つのトレースチェーン２０３、２０５、２０７を経由して、チップマネージャ２１６に提供され得る。
【０１１３】
上述のように、図１〜４は、分散コンピューティングシステムにおけるハードウェアイベントトレーシングのためのアプローチを例示してきた。残りの図５〜７は、分散コンピューティングシステムにおける同期されたハードウェアイベント収集のためのアプローチを説明する。ハードウェアイベントの同期された収集は、１つ以上のトリガーメカニズムに少なくとも部分的に基づき得る。
【０１１４】
図５は、グローバル時間カウンタ（ＧＴＣ）５０２のための例示的なデータ構造と、分散ハードウェアトレーシングのための例示的なコンピューティングシステム（たとえばシステム１００）によるＧＴＣ５０２の使用シナリオを示す表５０４および５０６とを示す。図５の実現化例では、ＧＴＣ５０２は、６０ビットのカウンタと４ビットのオフセットとを含む６４ビット値である。代替的な実現化例では、ＧＴＣ５０２は、６４ビット未満から６４ビットを超える範囲のビット単位のサイズを有する固定サイズの２進データ片であってもよい。
【０１１５】
ＧＴＣ５０２に関連付けられたデータ構造は、グローバルマスターカウンタにだけでなく、図６の実現化例を参照して以下に説明されるローカル時間カウンタ（local time counter：ＬＴＣ）にも当てはまる。ＧＴＣ５０２の上位６０ビットは、（以下に説明される）ＧＴＣ位相変化に対処するために「キャッチアップ」または「キャッチダウン」する場合を除き、サイクル毎に１ずつインクリメントする実時間カウンタに対応する。たとえば、ローカルＧＴＣ５０２（すなわちＬＴＣ）の更新中、ローカルＧＴＣ５０２は、マスターグローバルＧＴＣ５０２に「キャッチダウン」するために、数サイクルの間「ティック」することができない。これらのシナリオでは、下位の４つの「オフセット」ビットは、プログラムコード実行中に生じ得るＧＴＣ位相変化を補償するために使用される。
【０１１６】
ＧＴＣ位相変化に対処する場合、最後の４ビットは、これらの状況でインクリメントされ得る。これは、１つには、さもなければＧＴＣが同一になってしまうであろうローカルハードウェアイベント活動のためのタイムスタンプ間の区別を維持するためである。ほとんどの他の例では、ＧＴＣ５０２の４ビットのオフセットはクリアであり、したがって未使用である。いくつかの実現化例では、オフセットビットを１５までカウントし、そこで止めてもよい。一方、代替的な実現化例では、オフセットビットを、特定のカウンタ設計によって必要とされるような任意の整数値までカウントしてもよい。いくつかの例では、ＧＴＣ５０２の上位６０ビットが再びティックし始めると、オフセットビットはクリアされる。
【０１１７】
ＧＴＣ５０２、６０２（以下に説明される）の構成および管理に関し、いくつかの実現化例では、実行されたプログラムコードは、システム１００の１つ以上のプロセッサチップを構成することによってＧＴＣを構成またはセットアップすることができる。プロセッサチップを構成することは、システムのためのグローバルマスターＧＴＣを指定することと、システム１００のそれぞれのノードまたはコンポーネントのためのローカルマスターＧＴＣ（すなわちＬＴＣ）を指定することとを含み得る。
【０１１８】
コンポーネントは、実行されるプログラムコード／ソフトウェアが、１つ以上のローカルＧＴＣ（すなわち図６のＬＴＣ）のクロックレイテンシを計算し補償するために、およびＬＴＣの手動調整を行なうために使用する、ハードウェアノブ／機能を含み得る。ＬＴＣのクロックレイテンシの補償および手動調整は、位相変化を最小化または緩和するように、マスターＧＴＣに対して行なわれる。いくつかの実現化例では、システム１００は、コンポーネントハードウェア機能が「ｐｉｎｇおよびエコー」メカニズムを介してリンクレイテンシを自動的に判定する、レイテンシ補償のためのオートパイロットモードを含み得る。
【０１１９】
いくつかの実現化例では、システム１００は、例示的な制御／ステータスレジスタ（ＣＳＲ）のパラメータ値を調節するために使用されるプログラムコードの一部または部分集合を含む、リンク／ソフトウェアスタックを含み得る。いくつかの例では、リンクスタックプログラムコードの実行に応答して生成された制御信号は、１つ以上のパラメータ値がＣＳＲに書込まれるようにする。これらのＣＳＲパラメータ値は、ＧＴＣ５０２、６０２またはＬＴＣのさまざまな局面を構成するために使用され得る。
【０１２０】
たとえば、１つ以上のパラメータは、１）マスターグローバルＧＴＣ、ローカルマスターＧＴＣ、またはローカルスレーブＧＴＣの選択、および更新サンプルサイズの選択を引き起こすＧＴＣ＿ｃｏｎｆｉｇパラメータ、２）マスターＧＴＣをリセットするかまたは「ｐｉｎｇ」測定値をクリアするために使用されるＧＴＣ＿ｓｙｎｃパラメータ、３）手動レイテンシ補償を構成するＧＴＣ＿ｌａｔｅｎｃｙ＿ｃｏｍｐｅｎｓａｔｉｏｎ＿ｃｏｎｔｒｏｌパラメータ、４）最小ｐｉｎｇレイテンシを示すＧＴＣ＿ｌｉｎｋ＿ｐｉｎｇパラメータ、５）実際のＧＴＣ値を示すＧＴＣ＿ｃｏｕｎｔパラメータ、および／または、６）ローカルＧＴＣとマスターＧＴＣとの観察される最大の差を示すＧＴＣ＿ｍａｘ＿ｄｉｆｆパラメータ、を含み得る。
【０１２１】
上述のように、グローバルマスターＧＴＣ５０２と１つ以上のローカルＧＴＣ５０２とは、イベントタイムスタンプを得るために、および、システム内で生じるハードウェアイベント間の順序立てられた順序付けを判定するために、システム１００によって使用され得る。活動間の順序に加えて、ＧＴＣ５０２は、活動のレイテンシを判定するために使用され得る。いくつかの実現化例では、特定のＧＴＣ５０２が位相変化を呈するかもしれず、よって、判定されたレイテンシは、１つ以上のサイクルごとに不正確であるかもしれない。
【０１２２】
上述のように、あるＧＴＣ５０２がインクリメントするレートは、ローカルＧＴＣがグローバルマスターと異なるかどうかに依存して、すなわち、位相変化がある場合に、変わり得る。定常状態では、位相変化がない場合、マスターグローバルＧＴＣ５０２は、特定のコンポーネントのＬＴＣとまったく同様に、サイクル毎に１回インクリメントし、（たとえばあるコンポーネントの）ローカル活動のレイテンシおよび順序をカウントするために使用され得る。
【０１２３】
いくつかの実現化例では、マスターＧＴＣ５０２は、あるＬＴＣよりも遅くカウントするかもしれない。これらの例では、ＧＴＣ５０２のオフセットビットは、ローカルクロックサイクル毎に１回インクリメントし続ける。表５０４、５０６によって示されるように、ＧＴＣオフセットビットの一意的な機能性を考慮すると、拡張ＧＴＣ（ＧＴＣ−ｅｘｔ）が、システム１００による使用のために定義され得る。いくつかの実現化例では、ＧＴＣ−ｅｘｔは、上位６０ビット（ＧＴＣ：ｔｏｐ）と下位の４つのオフセットビット（ＧＴＣ：ｏｆｆｓｅｔ）とを加えることによって構築され得る。一方、他の実現化例では、特定のプロセッサで実行されるプログラムコードはＧＴＣ−ｅｘｔを、ＧＴＣ：ｏｆｆｓｅｔの小数値が合計されたＧＴＣ：ｔｏｐと等しくなるように計算することができる。
【０１２４】
いくつかの実現化例では、オフセットビットをインクリメントすることに応答して、ＧＴＣ−ｅｘｔパラメータが、イベント順序付けおよびローカル動作のレイテンシを判定するために使用され得る。表５０４、５０６は、ハードウェアイベント順序付けおよびイベント動作のレイテンシを判定する際にＧＴＣ−ｅｘｔパラメータが有用であることが分かり得る使用シナリオを示す。
【０１２５】
表５０４は、活動またはハードウェアイベント間の順序を判定するためのＧＴＣ使用例を説明する。いくつかの実現化例では、グローバルな順序、たとえば、少なくとも２つの別個の計算ノード（たとえば、マスターＧＴＣを各々有する別個のノード）間の１つ以上の活動の順序を判定するためにＧＴＣ５０２を使用する場合、活動分析中にＧＴＣ５０２がインクリメントするレートが適切ではないかもしれない。しかしながら、特定のノードでのローカルＧＴＣ５０２がそのノードのマスターＧＴＣよりも遅い場合、表５０４の機能５０８によって示されるように、２つのローカル活動を、または、２つのローカル活動がリモートリソースへの書込を始動した時間を区別するために、ＧＴＣ−ｅｘｔが使用され得る。
【０１２６】
表５０６は、ローカル活動／イベントまたは２つ以上のノードにまたがる活動のレイテンシを計算するためのＧＴＣ使用例を説明する。いくつかの実現化例では、システムパラメータは、特定のチップでのＧＴＣ５０２が正常なレートでティックしている（すなわち、指定されたマスターグローバルクロックと同期している）か、または、指定されたマスターグローバルクロックと位相がずれたレートでティックしているかを示さないかもしれない。このため、いくつかの例では、表５０６の機能５１０によって示されるように、ローカル活動のイベントレイテンシ判定のために、ＬＴＣが使用され得る。一方、他の実現化例では、１つ以上の動作のレイテンシを測定するために、ＧＴＣまたはＧＴＣ−ｅｘｔが使用され得る。
【０１２７】
一般に、システム１００のさまざまなノードまたはコンポーネントで生じるハードウェアトレースイベントは、ＧＴＣパラメータを含み得る。いくつかの実現化例では、トレースされたハードウェアイベント／活動がシステム１００の複数のノードにまたがる場合、ローカル活動に関連付けられたレイテンシは、ＬＴＣではなくＧＴＣを介して計算されるべきである。これらの実現化例では、ＧＴＣまたはＧＴＣ−ｅｘｔの使用は、好ましいカウンタ／クロックソリューションになり得る。なぜなら、２つ以上の別個のノード間にわたるＬＴＣは、同期していないかもしれず、または同じレートでクロック／ティックしていないかもしれないためである。
【０１２８】
図６は、分散ハードウェアトレーシングのための例示的なコンピューティングシステム（たとえばシステム１００）のそれぞれのコンポーネントに関連付けられた、例示的な時間カウンタおよび１つ以上のカウンタのブロック図を示す。時間カウンタは、グローバル時間カウンタ（ＧＴＣ）６０２と、システム１００のそれぞれのコンポーネントに各々関連付けられた複数のローカル時間カウンタ（ＬＴＣ）とを含み得る。
【０１２９】
明瞭にするために、図６はシステム１００の特定のコンポーネントに結合された単一のＬＴＣブロックを図示しているが、代替的な実現化例では、各コンポーネントは１つまたは複数のローカル時間カウンタ／ＬＴＣを含み得る。また、図６は単一のマスターＧＴＣ６０２を図示しているが、この機能はまた、グローバルマスターとして機能するよう選択された特定のＬＴＣに対応するか、またはそのようなＬＴＣを表わすことができる。たとえば、いくつかの実現化例では、ＧＴＣ６０２は、グローバルマスタークロック／カウンタとして機能するための特定のＬＴＣを選択するためにホストシステム１２６によって実現されるカウンタ選択論理に対応する。
【０１３０】
いくつかの例では、システム１００は、グローバルマスタークロックとして機能するためのＩＣＩ１１２の例示的なノードを選択することができ、例示的なノードのＬＴＣはクロックサイクル毎に１回ずつティックする。一方、代替的な実現化例では、ＧＴＣ６０２は、グローバルマスタークロックとして機能し、特定の時間パラメータをシステム１００のコンポーネントに一斉送信する、グローバル時間カウンタである。いずれの実現化例でも、ＧＴＣ６０２は、システム１００全体にわたって生じるハードウェアイベントを相関させるために使用される、グローバルに同期するクロックであってもよい。
【０１３１】
いくつかの実現化例では、上述のように、ＧＴＣ６０２はシステム１００全体にわたって小さい位相変化を有し得るものの、長期の時間ドリフトを回避するように構成され得る。たとえば、ＧＴＣ６０２は、特定のプロセッサチップの例示的な発振器（たとえば、グローバルマスターになるために選択された発振器）に基づいてティックまたはカウントすることができる。一般に、システム１００におけるプロセッサチップの選択された発振器に特有の長期ドリフトまたは位相変化はないが、時間がたつにつれて、別個のプロセッサチップ間の発振器に対してドリフトまたは変化が生じ得る。よって、ＧＴＣ６０２は、グローバルマスターでないプロセッサチップでのローカルクロック（ＬＴＣ）よりも速くまたは遅くインクリメント（すなわちティック）するかもしれない。
【０１３２】
グローバルマスターとして、ＧＴＣ６０２の現在のマスター値が、ＩＣＩ１１２のすべてのノードに一斉送信され得る。例示的なＩＣＩノードは、システム１００の１つ以上のコンポーネントに対応することができる。受信ノードは、特定のコンポーネント／ノードに特有のローカル動作に使用される例示的なＧＴＣのそのローカル値の差を計算することができる。例示的なサンプリング期間にわたる受信されたマスター値とローカルＧＴＣ値との最小の差が、ローカルＧＴＣを更新するために使用され得る。時間がたつにつれて、マスター値とローカルＧＴＣ値との間の位相変化は、もしあれば、上述の１つ以上のオフセットビットを使用して実現されるカウンタ調節に基づいて「キャッチアップ」され得る。
【０１３３】
図６の実現化例に示すように、システム１００のコンポーネントは各々、１つ以上の性能カウンタを含み得る。システム１００内の性能カウンタの集団的集合または部分集合は、ここに複数のカウンタ６００として記載される。特に、コンポーネント毎に具体的には、ＦＰＣ１０４は複数のカウンタ６０４を含み、ＳＰＣ１０６は複数のカウンタ６０６を含み、ｍｕｘメモリ（ＨＢＭ）１０８は複数のカウンタ６０８を含み、ノードファブリック１１０は複数のカウンタ６１０を含み、ＩＣＩ１１２は複数のカウンタ６１２を含み、ＨＩＢ１１４は複数のカウンタ６１４を含み得る。
【０１３４】
システム１００では、１つ以上のプロセッサによって実行されるプログラムコードの性能分析は、システムの特定のコンポーネントに関連付けられた１つ以上のハードウェア性能カウンタの使用に基づいてイネーブル／ディスエーブルにされ得る。これらの性能カウンタは、図６の複数のそれぞれのカウンタに対応することができ、１）活動カウンタ、２）ストールカウンタ、３）統計カウンタ、および、４）サンプリングカウンタ、のうちの少なくとも１つを含み得る。
【０１３５】
いくつかの実現化例では、システム１００は、実行されるプログラムコードの技術的局面に関連付けられた特定されたカウントデータをインクリメントし格納するようにプログラムされ得る、さまざまな他のタイプの性能カウンタを含む。また、１つ以上のカウンタの使用を通し、トレース活動のためのハードウェアサポートは、たとえば、命令トレーシングイベントデータの取込み、メモリｍｕｘトレーシングイベントデータの取込み、ＤＭＡトレーシングイベントデータの取込み、および、トレースバッファにおけるイベントデータの取込みに関連する機能を含み得る。
【０１３６】
いくつかの実現化例では、複数のカウンタ６００のうちの少なくとも部分集合は、ＨＩＢ１１４を介してホストシステム１２６によってアクセス可能であるＣＳＲまたはカウントレジスタであってもよい。これらのカウントレジスタ／ＣＳＲは、特定のハードウェアコンポーネントによって受信、処理、または実行された命令を識別するさまざまなタイプのカウントデータ／情報、および、実行されるプログラムコードの技術的局面に関連付けられたさまざまな他のタイプのデータ／情報を格納するように構成された記憶デバイスであってもよい。いくつかの例では、データは、特定の命令またはプロセッサ動作に関連付けられたカウントまたはインクリメント（たとえばカウントパラメータ）の形で格納される。いくつかの実現化例では、システム１００の複数のカウンタ６００は、何百または何千もの性能カウンタ／カウントレジスタに対応することができる。
【０１３７】
上述の少なくとも４つのタイプの性能カウンタに関し、いくつかの実現化例では、活動カウンタは、異なるハードウェアユニットのための利用パラメータに関連付けられたデータを格納し分析するために使用され得る。活動カウンタはまた、実行されるプログラムコードの一部を分析するために、または、コード実行中に転送されているデータの量またはタイプを分析するために使用され得る。たとえば、いくつかのプロセッサコアは、命令のさまざまなストリームにおけるインストラクションミックスを導き出すために使用される活動カウンタを含み得る。たとえば、活動カウンタは、例示的な命令ストリームにおける特定の命令タイプの実行に関連付けられたカウントを格納するように構成され得る。
【０１３８】
いくつかの実現化例では、活動カウンタは、ある命令タイプの発行時にインクリメントされる発行カウンタ、メモリ経路上で利用可能であり、たとえば（たとえばｍｕｘ１０８とＶＭＥＭ４０２との間の）メモリ転送に関連付けられた読出／書込に応答してインクリメントされるメモリ活動カウンタ、ならびに、割込み、同期フラグ、および警告カウンタなどの命令の発生に応答してインクリメントされる１つ以上の他の一般活動カウンタといった、カウンタの部分集合を含み得る。
【０１３９】
ストールカウンタに関し、いくつかの実現化例では、これらのカウンタは、あるハードウェアユニット／コンポーネントが、命令処理またはデータ計算に関連付けられた有用な作業をする代わりに、特定のストール理由に起因してストールされたサイクルの数を示すストールカウントを提供することができる。たとえば、特定のハードウェアユニットの利用が利用しきい値未満である場合、または、プログラムコードが所望のしきい値性能レベルで機能していない場合、ストールカウンタは、（たとえば利用／性能しきい値を下回る）利用および性能問題の原因分析を行なうための適切なストール情報を得るために、システム１００によって使用され得る。
【０１４０】
いくつかの実現化例では、ストールカウンタは、利用不可能として示された通常利用可能なあるメモリ経路の検出に基づくストール、１つ以上の同期フラグ命令の実行の遅延に基づくストール、および／または、利用不可能として示された通常利用可能な１つ以上の実行ユニット（たとえばＸＵ１２２またはＲＰＵ１２４）に起因するストール、に関連する適切な情報を提供することができる。
【０１４１】
いくつかの実現化例では、ＦＰＣ１０４は、ＶＰＵ１１８によって行なわれるベクトル化計算のためのスカラー量を提供する少なくとも１つのスカラーユニットを含み得る。スカラーユニットに関連付けられたストールカウンタは、スカラーユニット内で生じ得る１つ以上のハザードに起因するストールについての適切な情報を提供することができる。いくつかの例では、さまざまなハザードタイプが生じる場合があり、ＦＰＣ１０４は、各ハザードタイプのためのストールカウンタを含み得る。例示的なハザードタイプは、ＤＭＡ遅延ハザード、スカラーフェンス遅延ハザード、および／または、スカラー遅延命令ハザードを含み得る。
【０１４２】
統計カウンタに関し、いくつかの実現化例では、システム１００のコンポーネントは１つ以上のデータキュー（たとえば記憶媒体）を含んでいてもよく、活動カウンタは、キュー利用に関連する情報を提供するように構成され得る。しかしながら、いくつかの例では、キューのための活動カウンタは、実行されるプログラムコードによってキューがどれだけ利用されているかに関するあらゆる情報を提供するのに十分ではないかもしれない。これらの例では、平均キュー占有率と、あるキューで費やされる時間とに関連する計算値が求められ得るようにあるデータカウントを得るために、統計カウンタが１つ以上のコンポーネントにおいて利用可能であり得る。
【０１４３】
いくつかの実現化例では、キュー統計カウンタは、キュー占有率、キュー挿入ステータス、キューフルステータス、または、しきい値占有率ステータスでのキューに関連する統計カウントを提供することができる。いくつかの例では、キュー統計カウンタがアクティブである場合、コンポーネントキューに関連付けられた占有率カウンタが、各プロセッサ／命令サイクルにおけるキューの現在の占有率に基づいてインクリメントされる。
【０１４４】
他の例では、アクティブなキュー統計カウンタが、キューフルステータスに関連するカウントを提供する場合、カウンタは、キューがフルに占有されるサイクルで（たとえば１ずつ）インクリメントされる。また、アクティブなキュー統計カウンタが、キュー挿入ステータスに関連するカウントを提供する場合、カウンタは、データチャンクがキューに配置されること（すなわちキュー挿入）に応答してインクリメントされる。さらに、しきい値占有率ステータスでのキューについては、カウンタは、現在のキュー占有率が特定のキューしきい値占有率よりも大きい各サイクルで（たとえば１ずつ）インクリメントされ得る。
【０１４５】
いくつかの実現化例では、システム１００のコンポーネントは、データ構造（たとえば構造３２０または６２０）を生成するためにホストシステム１２６から周期的に読出され得るサンプリングカウンタの集合を含み得る。データ構造は、ハードウェアイベント、トレース活動、または、システム１００の分散プロセッサユニットで生じる活動／イベントについての詳細なデータ処理情報に関するサンプリングされた統計を含み得る。いくつかの実現化例では、サンプリングされた統計に基づいて生成されたデータ構造は、たとえば、（上述の）構造３２０または（以下に説明される）構造６２０を含み得る。いくつかの例では、生成されたデータ構造は、システム１００のコンポーネントによって実行されるプログラムコードの性能を分析するためにホストシステム１２６の監視エンジン１２８によって使用される１つ以上の監視ツールを構築するために使用される。
【０１４６】
上述のように、システム１００のコンポーネントは、１つ以上のトリガーメカニズムに関連付けられたグローバル制御に基づいて、イベントトレーシングを始動することができる。いくつかの実現化例では、複数のカウンタ６００は、トレースポイントに、１つ以上のハードウェアイベントに関連する特定のデータを含むトレースエントリを実行させ生成させるトリガーメカニズムを始動するために、イネーブルにされ、ディスエーブルにされ、または他の態様で制御され得る。いくつかの実現化例では、ハードウェアイベントに関連するトレースエントリは、上述の複数のカウンタ６００のうちの１つ以上によって集められたカウントデータに少なくとも部分的に基づいて、イベントデータをポピュレートされる。
【０１４７】
グローバル制御は一般に、ＣＳＲ制御（すなわち、特定のＣＳＲハードウェア機能／ノブ）と、カウンタがインクリメントされることを可能にし、トレースが協調的で同期された態様で生成されることを可能にするトリガーメカニズムとの使用を含む。いくつかの実現化例では、協調的で同期された制御が、システム１００の分散プロセッサユニット間にわたって生じ得る。上述のように、グローバルマスタークロック（たとえばＧＴＣ６０２）として使用されるグローバルに同期するカウンタの使用を通して、同期されたトレーシングが部分的にイネーブルにされ得る。
【０１４８】
いくつかの実現化例では、システム１００は、分散プロセッサユニットのグローバル時間クロックによって示された特定の時間パラメータ（たとえば時間パラメータ０９：０１．１３）に基づいて、同期されたイベントトレーシングをトリガーする。たとえば、システム１００は、ＧＴＣ６０２のグローバルマスタークロック値を、ある動作の持続時間の間、すべてのカウンタおよびトレーシングを正確に起動および停止するためのトリガーとして使用することができる。
【０１４９】
いくつかの例では、システム１００の例示的なソフトウェアコンパイラは、ＧＴＣ６０２に関連付けられた予め定義された特定の時間ウィンドウに基づくトリガーメカニズムのためのオペランドまたはパラメータ値を含む命令を、実行されるプログラムコード内に埋込むかまたは挿入することができる。予め定義された時間ウィンドウは、トレースイベント起動時間（たとえば、第１のＧＴＣ６０２時間パラメータ）と、トレースイベント停止時間（たとえば、第１のＧＴＣ時間パラメータよりも時間が遅い第２のＧＴＣ６０２時間パラメータ）とを有する、例示的なトレース持続時間を含み得る。
【０１５０】
図６の実現化例に示すように、システム１００のコンポーネントは、複数の性能カウンタ６００を含み得る。それはトリガーメカニズムに関連するため、性能カウンタ制御は、カウンタをイネーブルおよびディスエーブルにするための、ならびに、カウンタをクリアするための、およびカウンタを一時停止するためのメカニズムを含み得る。また、上述の統計カウンタ機能に加えて、いくつかのハードウェアユニットは、イベントがカウントされるハードウェアユニット内のハードウェアブロックの部分集合を選択するために使用される関連付けられたセレクタ（たとえばＣＳＲ）を有する統計カウンタを含み得る。
【０１５１】
トレースｍｕｘ制御を参照して上述されたように、いくつかの実現化例では、トレーシングは、システム１００によって実行されるＣＳＲ書込に基づいてイネーブルおよびディスエーブルにされ得る。いくつかの例では、トレーシングは、ＦＰＣ１０４（またはコア１１６）における例示的なトレースマーク（trace-mark：ＴＭ）レジスタの値に基づいて、もしくは、ＳＰＣ１０６における例示的なＴＭレジスタの値に基づいて、システム１００によって動的に起動および停止され得る。
【０１５２】
いくつかの実現化例では、例示的なトレース制御パラメータが、特定のトレースウィンドウを定義するために使用され得る。たとえば、トレース制御パラメータは、トレースウィンドウが、ＧＴＣ６０２の下限および上限（たとえば起動時間＆停止時間クロック値）、ならびに、ＦＰＣ１０４における例示的なトレースマークレジスタまたはＳＰＣ１０６における例示的なトレースマークレジスタの下限および上限によって定義されることを可能にし得る。
【０１５３】
いくつかの実現化例では、システム１００内で実行されるプログラムコードは、ＦＰＣ１０４またはＳＰＣ１０６のうちの１つにおいて各プロセッササイクルでトレースイベントをトリガーするためのトリガー処理論理を含み得る。いくつかの例では、トリガー論理は、実行されるソフトウェア／プログラムコードによって、１つ以上の命令ストリームに挿入され得る特別の「トレースマーク設定」命令に関連付けられる。
【０１５４】
たとえば、ＦＰＣ１０４のためのトリガー論理に関し、トレースマークを設定するための例示的な命令がＦＰＣ１０４内で発行される場合、トリガー論理は、命令のトレースマークオペランドを分析することと、オペランドのパラメータ値を例示的なトレースマークウィンドウの値と比較することとを含み得る。この分析および比較は、オペランドパラメータ値が、特定のトレースマークウィンドウの下限値と等しいか、または、トレースマークウィンドウの下限値および上限値内に収まるかを判定するために使用される。
【０１５５】
オペランドのパラメータ値がトレースマークウィンドウの限界値内にある場合、トリガーを作動させること（たとえば、トリガー条件を満たすこと）ができ、ＦＰＣ１０４は、トレーシングまたはカウンティングモードに入って、複数のカウンタ６０４のうちの１つ以上のカウンタをイネーブルにすることができる。いくつかの実現化例では、次の「トレースマーク設定」命令が、オペランド値が例示的なトレースマークウィンドウの上限と等しいかまたはそれから外れることに基づいてカウンティング停止トリガーを作動させるオペランドパラメータ値を含む場合、ＦＰＣ１０４はトレーシング／カウンティングモードを出る。
【０１５６】
いくつかの実現化例では、システム１００は、ｉ）実行されるプログラムコードの少なくとも第１の部分における例示的なトレースマークオペランドの発生を識別することのうちの少なくとも１つに基づいて、トリガー条件が満たされていることを検出することができる。トレースマークオペランドは、１つ以上のトレースイベントおよび／または性能カウンティングを始動するために使用されるパラメータ値（たとえばコードステップシーケンス／値）を含み得る。システム１００はまた、ＧＴＣ６０２の現在の時間が、１つ以上のトレースイベントおよび／または性能カウンティングを始動するために使用される予め定義された時間値を示しているという判定に基づいて、トリガー条件が満たされていることを検出することができる。
【０１５７】
トリガー条件が満たされていることを検出することに応答して、システム１００のプロセッサコンポーネントは、プロセッサコンポーネントのカウントレジスタによって受信される制御信号を生成することができる。制御信号は、１つ以上のハードウェアイベントに関連付けられたさまざまなカウントデータをカウントレジスタに格納させることができる。いくつかの実現化例では、システム１００は、実行されるプログラムコードに関連付けられた１つ以上の性能属性を示すデータ構造を、たとえばホストシステム１２６を介して生成するように構成またはプログラムされ得る。たとえば、データ構造は、格納されたカウントデータの１つ以上のカウントパラメータに基づいて生成され得る。いくつかの実現化例では、カウントレジスタは、システム１００の１つ以上のプロセッサコンポーネントの性能に関するカウントデータを格納するように構成された複数の性能カウンタ６００のうちの１つである。
【０１５８】
トレースマークトリガーをさらに説明するために、例示的なコードシーケンスでは、トレースマーク設定命令は、分散ソフトウェア構成体（たとえば、例示的なニューラルネットワーク推論作業負荷の計算ステップ）を識別する３２ビットのトリガーオペランドを含み得る。ＦＰＣ１０４は、プログラムコードにおいて「ｔｒａｃｅｍａｒｋ＿ｌｉｍｉｔｓ」として識別される特殊用途ＣＳＲを含み得る。この例示的なコードシーケンスでは３２ビットのオペランドが説明されているが、代替的な実現化例では、トリガーオペランドまたはレジスタ制限オペランド／パラメータ値は、３２ビットよりも少ない、または多いビットを有する２進データ構造であってもよい。
【０１５９】
この特殊用途ＣＳＲは、少なくとも２つの３２ビット値を符号化することができる。第１の符号化された３２ビット値は、トレーシング／カウンティングを起動するために使用されるトレースマーク下限に対応することができ、一方、第２の符号化された３２ビット値は、トレーシング／カウンティングを停止するために使用されるトレースマーク上限に対応することができる。いくつかの実現化例では、第１および第２の符号化された値は、例示的なニューラルネットワーク推論作業負荷などの分散ソフトウェアプログラム／構成体、または任意の他の分散プログラムコードにおける計算ステップに対応する。
【０１６０】
例示的なコードシーケンスを再び参照すると、「トレースマーク設定」命令が実行されると、３２ビットのオペランド値が、ｔｒａｃｅｍａｒｋ＿ｌｉｍｉｔｓレジスタにおける第１および第２の符号化された値と比較される。この比較に基づいて、トリガーオペランドが起動値（すなわち第１の符号化された値）と等しい／一致するかまたは起動値よりも高い値を有する場合、性能分析活動がトリガーされる。同様に、トリガーオペランドが停止値（すなわち第２の符号化された値）と一致するかまたは停止値よりも高い値を有する場合、進行中の性能分析活動が停止される。
【０１６１】
トレースマークトリガーとほぼ同様に、ＧＴＣ６０２が（たとえばＦＰＣ１０４またはＳＰＣ１０６のための）トリガーとして使用される場合、特定のコンポーネントのための例示的なＧＴＣ／ＬＴＣトリガーレジスタの上限および下限が、ＧＴＣ６０２の現在値に対して評価され得る。よって、ＧＴＣトリガーを使用してトレース活動を実行するために、ＧＴＣ６０２の現在の時間パラメータまたは値を、予め定義された例示的な時間ウィンドウの下限と比較することができる。同様に、カウント活動を始めるためのＧＴＣトリガーの実行後、ＧＴＣ６０２が上限値と一致するかまたはそれから外れるかを判定するために、ＧＴＣ６０２の現在の時間パラメータまたは値を、ＧＴＣトリガーレジスタの上限と比較することができる。ＧＴＣ６０２が少なくとも上限値と一致することに応答して、コンポーネントがカウンティングモードを出るようにするためにカウンティング停止トリガーが作動するであろう。
【０１６２】
いくつかの実現化例では、ＳＰＣ１０６は、ＦＰＣ１０４のトレースマーク設定命令に相当するものを含む。よって、ＳＰＣ１０６のためのトリガー処理論理は、ＦＰＣ１０４での態様と同じかまたはほぼ同様の態様で機能することができる。たとえば、トレースマークパラメータが、ＳＰＣ１０６によって発行された１つ以上の命令へのオペランドとして含まれ得る。いくつかの例では、オペランドのトリガー評価が各命令発行時に生じ、評価論理は、カウンティングがＦＰＣ１０４において（たとえばトレースマークオペランドを使用して）イネーブルにされる態様とほぼ同様であってもよい。たとえば、ＳＰＣ１０６では、トレースマーク設定命令に含まれるトレースマークオペランドが例示的なトレースウィンドウの下限および上限内にある場合、トレーシングはイネーブルにされる。同様に、トレースマーク命令に含まれるトレースマークオペランドがトレースウィンドウの下限および上限外にある場合、トレーシングはディスエーブルにされる。
【０１６３】
上述のように、ＧＴＣ６０２またはトレースマーカーを使用することに加えて、システム１００は「各自」トレースモードを含み得る。一般に、この各自トレースモードは、プロセッサチップ全体にわたるトレーシングが、たとえばＦＰＣ１０４またはＳＰＣ１０６のコンポーネントによって生成される制御信号によって制御されるようにすることができる。いくつかの実現化例では、制御信号は、システム１００の分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータであってもよい。いくつかの例では、特定の性能状態は「各自」トレースモードに対応する。
【０１６４】
いくつかの実現化例では、１つ以上のハードウェアコンポーネント（たとえばＨＩＢ１１４またはＩＣＩ１１２）は、「各自」トレースモードの起動に応答してイベントトレーシングを始動するように、もしくは、各自トレースモードを示す伝搬する制御信号を単に無視するようにプログラムまたは構成され得る。このため、システム１００は各自トレース制御信号を伝搬するためのシグナリングメカニズムを含み得るものの、システム１００はまた、少なくとも１つのハードウェアコンポーネントに制御信号を無視させるためのメカニズムを含み得る。
【０１６５】
たとえば、システム１００のユーザ（たとえば性能アナリスト）が、すべてのホスト通信を示すデータパケットを追跡するためにＨＩＢ１１４を使用したいかもしれない。ユーザは、システム１００の他のハードウェアコンポーネントからデータのある単一ステップシーケンスを取込むために各自トレースモードも使用しながら、ＨＩＢ１１４が「常時トレース」モードに入るようにするための例示的なプログラム命令を、たとえば外部コンパイラを介して挿入することができる。よって、常時トレースモードで実行されるようにプログラムされた場合、ＨＩＢ１１４は、他のハードウェアコンポーネントから単一ステップシーケンストレースデータを生成するために使用される各自トレース制御信号を無視することができる。
【０１６６】
いくつかの実現化例では、システム１００のコンポーネントによるプログラムコードの実行に関連する特定のアクションまたは状態の発生に応答して、トレースポイントはトリガー可能である。たとえば、分散ソフトウェアプログラムは、共有されるかまたは重複するコードシーケンスまたはステップを各々含む複数のソフトウェアモジュールを含み得る。たとえば、プロセッサコア１０４、１０６は各々、分散ソフトウェアプログラムの一部を受信して実行することができ、各プログラム部分は、例示的なコードシーケンス１〜１００を含み得る。
【０１６７】
上述のように、いくつかの実現化例では、システム１００は、分散プログラムコードの特定のシーケンスステップを有する、または当該シーケンスステップに基づいた、１つ以上のトリガー条件／メカニズムを含むように構成され得る。よって、システム１００は、コード実行中にプロセッサコア１０４、１０６の各々がある符号化シーケンス／ステップ（たとえばコードシーケンスステップ３３）に到着することに応答して、トレースポイントをトリガーするように構成され得る。いくつかの例では、実行された分散プログラムコードの一部は、システム１００の少なくとも１つのハードウェアコンポーネントによって検出可能である、埋込まれたトリガー機能を含み得る。
【０１６８】
たとえば、上述のように、システム１００は、ＦＰＣ１０４またはＳＰＣ１０６のうちの１つによって実行されるプログラムコードの少なくとも一部におけるオペランドの発生を識別することに基づいて、１つ以上のトリガー条件が満たされていることを検出するように構成され得る。少なくとも１つのトリガー条件が満たされていることを検出することに応答して、システム１００は、トレースエントリ／トレースデータまたはカウントデータを生成する１つ以上のトレースイベントを始動することができる。いくつかの実現化例では、生成されたトレースエントリは、分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベント間で共有される少なくとも１つの属性（たとえば、共有されるタイムスタンプまたはコードシーケンスステップ）を含み得る。
【０１６９】
たとえば、データ構造６２０によって示されるように、生成されたトレースエントリ６２２は同期されたトレースイベントに対応することができ、トレースデータは、それぞれのハードウェアイベントのための一意的なトレース識別子と、少なくとも２つのそれぞれのハードウェアイベント間で共有されるグローバルハードウェアイベントタイムスタンプ（たとえば０９：０１．１３）とを含み得る。このため、トレースエントリ６２２については、それぞれのハードウェアイベント間で共有される少なくとも１つの属性は、ハードウェアイベントタイムスタンプであり得る。同様に、システム１００が特定のコードシーケンスに基づいてトレースポイントをトリガーした場合、トレースエントリ６２４については、それぞれのハードウェアイベント間で共有される少なくとも１つの属性は、コードシーケンスまたはトレースマークステップであり得る。
【０１７０】
いくつかの実現化例では、トレースエントリは、タイムスタンプヘッダまたはフィールドを含み得る。タイムスタンプヘッダは、トレースエントリが生成された時間を識別する４８ビットのタイムスタンプを含み得る。いくつかの例では、タイムスタンプヘッダは、ＧＴＣ５０２の下位４８ビットに対応することができる。
【０１７１】
上述のように、いくつかの実現化例では、システム１００のコンパイラが、複数のトリガー条件のための１つ以上のオペランドを、システム１００の例示的なプロセッサコアによって実行されるプログラムコードの一部に挿入することができる。たとえば、ＦＰＣ１０４に関連付けられたコンパイラが、トリガー条件のための１つ以上のオペランドを、ＦＰＣ１０４によって実行されるプログラムコードの一部に挿入するかまたは埋込むことができる。同様に、ＳＰＣ１０６に関連付けられたコンパイラが、トリガー条件のための１つ以上のオペランドを、ＳＰＣ１０６によって実行されるプログラムコードの一部に挿入するかまたは埋込むことができる。
【０１７２】
一般に、上述のように、システム１００は、１つ以上のトリガー条件を検出し、条件の検出に応答して少なくとも１つのトレースイベントを始動するように構成される。いくつかの実現化例では、少なくとも１つのトレースイベントを始動することは、システム１００がたとえば第１の制御信号をＦＰＣ１０４の第１の性能カウンタ／レジスタ（たとえば活動カウンタなどのＣＳＲ）に提供することを含み得る。この第１の制御信号は、少なくとも１つのハードウェアイベントに関連付けられたデータを第１の性能カウンタに格納させることができる。
【０１７３】
同様に、いくつかの実現化例では、少なくとも１つのトレースイベントを始動することはさらに、システム１００がたとえば第２の制御信号をＳＰＣ１０６の第２の性能カウンタ／レジスタ（たとえば統計カウンタなどのＣＳＲ）に提供することを含み得る。この第２の制御信号は、少なくとも１つのハードウェアイベントに関連付けられたデータを第２の性能カウンタに格納させることができる。
【０１７４】
いくつかの実現化例では、少なくとも１つのハードウェアイベントに関連付けられたデータは、１）システム１００の分散プロセッサユニットのあるプロセッサコアの特定のメモリバッファに書込まれたバイトの数、または、２）システム１００の分散プロセッサユニットの特定のプロセッサコアによって実行された命令の数、のうちの１つを含み得る。
【０１７５】
一般に、説明されたトレーシングシステムは、ハードウェアベースのトリガーアクションメカニズムを含む。トリガーは、ソフトウェア意味論に基づいて作動するように早めに構成され得る。たとえば、トリガー条件のためのオペランドは、ソフトウェアコンポーネントのプロローグおよびエピローグで（たとえば、分散ソフトウェアシステムにおける機能、ループヘッダ、または他の適切な位置で）挿入されるかまたは埋込まれ得る。上述のように、いくつかの例では、トリガー条件のためのオペランドの挿入は、システム１００におけるコンパイラによって行なわれ、一方、他の例では、トリガーおよびトリガーオペランドは、システム１００によるコード実行に先立ってプログラマーによって埋込まれ／挿入されてもよく、または、リアルタイムのコード実行中にホストシステム１２６によって埋込まれてもよい。
【０１７６】
たとえば、いくつかの実現化例では、トリガーがいつ作動すべきかを示す条件が、ホストシステム１２６上で実行される性能分析ソフトウェアによって、分散ハードウェアシステム全体にわたって（たとえば、システム１００の各チップ／ノードにおいて）セットアップされてもよい。トリガーが作動すると、特定のハードウェアユニットにおいてハードウェアトレーシングおよび性能カウンティングが行なわれ、同様のトリガー条件が、トレースデータ収集を停止するためにセットアップされる。
【０１７７】
他の実現化例では、システム１００におけるトリガーは、命令へのオペランドである、単調に増加する値であってもよい。命令は、プロセッサコアの例示的なコンパイラによって、重要なソフトウェア構成体のプロローグおよびエピローグで挿入され得る。一般に、トリガーが作動するまで性能データは収集されないため、実行されるプログラムコードには、命令内にトリガーオペランドを常時存在させることに対する些細な性能ペナルティがある。
【０１７８】
たとえば、トリガー条件は、ハードウェアコンポーネントにおける例示的なレジスタに書込むことによってセットアップされ得る。トリガーを評価または検出するために、トリガー命令に遭遇するたびに、ハードウェアコンポーネントは、このレジスタにおける値を、命令におけるトリガー条件のオペランド値と比較することができる。一般に、トリガー条件は、分散システムにおけるどのプロセッサチップ／ノードも時期尚早にトリガー条件に到着しないように、ある符号化シーケンスステップのかなり前にセットアップされるべきである。
【０１７９】
いくつかの例では、ハードウェアトリガー実現化例は、例示的なプロセッサチップ／ノードの異なるコンポーネント内でトリガー信号を伝搬することを必要とする。トリガーアクションメカニズムの少なくとも１つの利点は、分散ソフトウェアプログラムが、第１のノードでの活動（たとえばコードシーケンスステップ３３）を、別の（第２の）ノードでの関連する活動（たとえばコードシーケンスステップ３３）とは非常に異なる時間に実行することを可能にする。この実現化例では、システム１００は、異なるハードウェアコンポーネントまたはプロセッサノードによって異なる期間に実行される同一のまたは実質的に関連する活動についてのハードウェア性能データの正確な収集を維持することができる。
【０１８０】
いくつかの実現化例では、例示的なトリガー使用事例は、システム１００が、特定のトリガー条件を再プログラム／再設定／再挿入することなく、複数の組のトレースデータを収集することを含み得る。たとえば、実行されるプログラムコードは、トレースマークを設定するための同じオペランドが複数回現れる命令シーケンスを生成するソフトウェア構成体を含み得る。いくつかの例では、システム１００のプロセッサがプログラムコードのある一部をループで実行する場合、同じトレースマーク設定オペランドが複数回現れる。プログラムループの実行中、イベントトレーシングが、プログラムループの反復に従って開始および終了され得る。
【０１８１】
たとえば、ループ反復の最初に現われるオペランド値に基づいて、トリガー条件を満たすことが可能であり、たとえば、トリガーが作動し、イベントトレーシングが起動する。同様に、ループ反復の最後に現われるオペランド値に基づいて、トリガー条件を満たすことがもはや不可能であり、たとえば、イベントトレーシングが停止する。一般に、ループ反復の最初およびループ反復の最後は、所与のソフトウェア構成体のためのプログラムループの境界に対応することができる。よって、ソフトウェア構成体の各実行（たとえば各ループ反復）時に、トレーシングセッションが開始および終了され得る。
【０１８２】
いくつかの実現化例では、適切なトリガーオペランド値（たとえばＧＴＣまたはトレースマーク）が以下の態様で判定され得る。上述のように、分散ソフトウェアプログラムは、共有されるかまたは重複するコードシーケンスまたはステップを各々含むソフトウェアモジュールを含み得る。システム１００内での分散プログラムコードの実行中、性能アナリストは、たとえば現在のコードシーケンスまたはステップ番号を判定するために、システム１００のコンピューティングコンソールを介して、トレースマークレジスタのＣＳＲ値を読出すかまたは分析することができる。
【０１８３】
いくつかの例では、アナリストは、シーケンスまたはステップの平均増加レートを判定するために、ＣＳＲ値を繰り返し読出す。判定された増加レートは、たとえばトレースマークオペランド値の発生に基づいて１つ以上のトリガー条件を予測的に設定するために使用され得る。いくつかの実現化例では、ＧＴＣを使用する場合、性能アナリストは、ＧＴＣが増加するレートを予測または判定するために、システム／マシン（またはハードウェアコンポーネント）クロック速度を読出すかまたは分析することができる。アナリストは次に、特定のＧＴＣ値の発生に基づいて１つ以上のトリガー条件を設定するために、判定されたレートを使用することができる。
【０１８４】
図７は、コンピューティングシステム１００とシステム１００の１つ以上のノード２００、２０１とを使用する分散ハードウェアトレーシングのための例示的なプロセス７００のプロセスフロー図である。このため、プロセス７００は、ノード２００、２０１のリソースを含むシステム１００の上述のコンピューティングリソースのうちの１つ以上を使用して実現され得る。
【０１８５】
プロセス７００はブロック７０２で始まり、コンピューティングシステム１００が、第１のプロセッサコアによって実行されるプログラムコードの実行を監視するステップを含む。いくつかの実現化例では、第１のプロセッサコアは、監視されるプログラムコードの少なくとも第１の部分を実行するように構成される。プロセス７００のブロック７０４で、システム１００は、第２のプロセッサコアによって実行されるプログラムコードの実行を監視する。いくつかの実現化例では、第２のプロセッサコアは、監視されるプログラムコードの少なくとも第２の部分を実行するように構成される。
【０１８６】
ブロック７０６で、システム１００は、少なくとも１つのトリガー条件が満たされていることを検出する。いくつかの実現化例では、システム１００は、第１のプロセッサコアまたは第２のプロセッサコアのうちの１つによって実行されるプログラムコードの少なくとも一部におけるオペランドの発生を識別することに基づいて、トリガー条件が満たされていることを検出する。いくつかの実現化例では、システム１００内で実行されるプログラムコードは、トレースイベントをトリガーするためのトリガー処理論理を含む。
【０１８７】
いくつかの例では、トリガー論理は、１つ以上の命令ストリームに挿入される「トレースマーク設定」命令に関連付けられる。トリガー論理は、命令のトレースマークオペランドの発生を識別することと、トレースマークオペランドを分析することと、オペランドを例示的なトレースマークウィンドウの値と比較することとを含み得る。いくつかの例では、この分析および比較は、第１のトリガー条件が満たされていることを検出するために使用される。
【０１８８】
他の例では、トリガー論理は、システム１００の外部ユーザによって、またはシステムの例示的なコンパイラによって１つ以上の命令ストリームに挿入され得る予め定義された時間値に関連付けられる。トリガー論理は、コンピューティングシステムの少なくとも１つのクロックの現在の時間が、１つ以上のトレースイベントを始動するために使用される予め定義された時間値を示していると判定することを含み得る。いくつかの実現化例では、現在の時間が予め定義された時間値を示していると判定することは、予め定義された時間値を受信することと、予め定義された時間値を例示的な予め定義された時間ウィンドウの時間値と比較することとを含み得る。
【０１８９】
ブロック７０８で、トリガー条件が満たされていることを検出するステップに応答して、システム１００は、トレースデータを生成する少なくとも第１のトレースイベントを始動する。生成されたトレースデータは、少なくとも第１のプロセッサコアおよび第２のプロセッサコアを含む分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベントを識別する。
【０１９０】
たとえば、トリガー条件が満たされていることを検出するステップに応答して、システム１００は、ＦＰＣ１０４およびＳＰＣ１０６にわたって生じるハードウェアイベントを識別するトレースデータを生成する同期されたトレースイベントを始動することができる。いくつかの実現化例では、トレースデータは、それぞれのハードウェアイベントのための一意的なトレース識別子を識別する。いくつかの例では、ハードウェアイベントは複数の同期されたハードウェアイベントを含み、複数の同期されたイベントのうちの少なくとも２つのハードウェアイベントがグローバルハードウェアイベントタイムスタンプを共有する場合、それらのイベントは同期される。
【０１９１】
いくつかの実現化例では、複数のトリガー条件が、実行されるプログラムコードに関連付けられ得る。いくつかの例では、少なくとも第１または第２のプロセッサコアによって実行されるプログラムコードの少なくとも一部における特定のオペランドの発生を識別することに基づいて、特定のトリガー条件が満たされ得る。特定のオペランドは、１つ以上のトレースイベントのうちの第２のトレースイベントを始動するために各々使用され得る複数のパラメータ値のうちの１つを含み得る。この実現化例では、特定のトリガー条件が満たされていることを検出するステップは、システム１００が、特定のパラメータ値がレジスタの第１の限界値を上回ることを検出するステップを含み得る。
【０１９２】
いくつかの実現化例では、特定のトリガー条件が満たされていることを検出するステップに応答して、システム１００は、分散プロセッサユニット間にわたって生じるそれぞれのハードウェアイベント間で共有される少なくとも１つの属性を識別するトレースデータを生成するトレースイベントを始動する。いくつかの実現化例では、それぞれのハードウェアイベントの属性は、ソースメモリアドレス、宛先メモリアドレス、またはシーケンス／プログラム計算ステップを少なくとも含み得る。一方、共有される少なくとも１つの属性は、プログラムコードの特定のシーケンスステップまたはプログラムステップを含み得る。
【０１９３】
いくつかの実現化例では、１つ以上のトリガー条件は、１）プログラムコードの特定のシーケンスステップ、２）分散プロセッサユニットの特定の性能状態を示すグローバル制御パラメータ、３）分散プロセッサユニットのグローバル時間クロック／カウンタによって示される現在の時間または特定の時間パラメータ、または、４）グローバル時間クロックに関連付けられた予め定義された時間ウィンドウ、のうちの少なくとも１つに関連付けられ得る。
【０１９４】
いくつかの実現化例では、システム１００はまた、特定のオペランドの特定のパラメータ値、または特定の予め定義された時間値がレジスタの第２の限界値を上回ることを検出することができる。いくつかの例では、この検出に応答して、システム１００は、あるオペランドの特定のパラメータ値、またはある予め定義された時間値がレジスタの第２の限界値を上回る場合に、第２のトレースイベントを停止することができる。
【０１９５】
プロセス７００のブロック７１０で、システム１００は、それぞれのハードウェアイベントを含む相関された一組のトレースデータを、ホストデバイスに提供する。いくつかの実現化例では、相関された一組のトレースデータは、第１のトリガー条件が満たされている場合に生成されるそれぞれのハードウェアイベントの時系列の順序を少なくとも示す。それぞれのハードウェアイベントの各々について、トレースデータは、ハードウェアイベントのためのハードウェアイベントタイムスタンプと、ハードウェアイベントを特徴付けるメタデータとを少なくとも含む。いくつかの例では、相関された一組のトレースデータは、データ構造６２０に少なくとも部分的に対応する。
【０１９６】
ブロック７１２で、コンピューティングシステム１００は相関された一組のトレースデータを使用して、少なくとも第１のプロセッサコアおよび第２のプロセッサコアによって実行されるプログラムコードの性能を分析する。いくつかの実現化例では、データ構造６２０（すなわち、相関されたトレースデータに対応）は、少なくともプロセッサコア１０４および１０６によって実行されるプログラムコードの性能を分析するために、ホストシステム１２６によって使用される。同様に、データ構造６２０は、システム１００の少なくとも１つのコンポーネントの性能を分析するために、ホストシステム１２６によって使用され得る。
【０１９７】
たとえば、ホストシステム１２６または例示的なユーザは、プログラムコードの特定のソフトウェアモジュールの実行に関連付けられた性能問題があるかどうかを検出または判定するために、データ構造６２０を分析することができる。例示的な問題は、ソフトウェアモジュールが、割り当てられた実行時間ウィンドウ内で、またはレイテンシしきい値未満で、ある命令ストリームの実行を完了できないことを含み得る。
【０１９８】
さらに、ユーザまたはホストデバイス／システム１２６は、システム１００の特定のコンポーネントがしきい値性能レベルを上回って動作しているか、または下回って動作しているかを検出または判定することができる。コンポーネント性能に関連する例示的な問題は、特定のハードウェアコンポーネントが、許容可能なしきい値結果パラメータ範囲外にある結果データを生成することを含み得る。いくつかの実現化例では、生成された結果データは、実質的に同様の命令／動作を実行するシステム１００の他の関連するコンポーネントによって生成された結果データと一致していないかもしれない。
【０１９９】
たとえば、プログラムコードの実行中、システム１００の第１のコンポーネントが、動作を完了するために、および結果を生成するために必要とされ得る。同様に、システム１００の第２のコンポーネントが、実質的に同様の動作を完了するために、および実質的に同様の結果を生成するために必要とされ得る。相関された一組のトレースデータの分析は、第２のコンポーネントが、第１のコンポーネントによって生成された結果とはかなり異なる結果を生成したことを示し得る。同様に、相関されたトレースエントリの例示的なデータ構造は、許容可能なパラメータ範囲外にある第２のコンポーネントの結果パラメータ値を示すかもしれない。これらの結果は、第２のコンポーネントの潜在的な性能問題を示し得る。
【０２００】
この明細書で説明される主題および機能的動作の実施形態は、デジタル電子回路で、有形に具体化されたコンピュータソフトウェアまたはファームウェアで、この明細書に開示された構造およびそれらの構造的同等物を含むコンピュータハードウェアで、もしくは、それらのうちの１つ以上の組合せで実現され得る。この明細書で説明される主題の実施形態は、１つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、有形の非一時的プログラム担体上で符号化されたコンピュータプログラム命令の１つ以上のモジュールとして実現され得る。それに代えて、またはそれに加えて、プログラム命令は、データ処理装置による実行のために好適なレシーバ装置へ送信される情報を符号化するために生成される、人工的に生成された伝搬信号、たとえば、マシンによって生成された電気信号、光学信号、または電磁信号上で符号化され得る。コンピュータ記憶媒体は、マシン読取可能記憶デバイス、マシン読取可能記憶基板、ランダムまたはシリアルアクセスメモリデバイス、もしくは、それらのうちの１つ以上の組合せであってもよい。
【０２０１】
この明細書で説明されるプロセスおよび論理フローは、１つ以上のプログラマブルコンピュータが、１つ以上のコンピュータプログラムを、入力データ上で動作して出力を生成することによって機能を行なうように実行することによって、行なわれ得る。プロセスおよび論理フローはまた、特殊用途論理回路、たとえばＦＰＧＡ（field programmable gate array：フィールドプログラマブルゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、またはＧＰＧＰＵ（General purpose graphics processing unit：汎用グラフィック処理ユニット）によって行なわれてもよく、装置はまた、当該特殊用途論理回路として実現されてもよい。
【０２０２】
コンピュータプログラムの実行に好適なコンピュータは、汎用または専用マイクロプロセッサまたはそれら双方、もしくは任意の他の種類の中央処理装置を例として含み、それに基づき得る。一般に、中央処理装置は、読取専用メモリまたはランダムアクセスメモリまたはそれら双方から、命令およびデータを受信するであろう。コンピュータの本質的要素は、命令を行なうか実行するための中央処理装置と、命令およびデータを格納するための１つ以上のメモリデバイスとである。一般に、コンピュータはまた、データを格納するための１つ以上の大容量記憶デバイス、たとえば磁気ディスク、光磁気ディスク、または光学ディスクを含み、もしくは、当該大容量記憶デバイスからデータを受信し、または当該大容量記憶デバイスへデータを転送し、またはそれら双方を行なうために動作可能に結合されるであろう。しかしながら、コンピュータはそのようなデバイスを有していなくてもよい。
【０２０３】
コンピュータプログラム命令およびデータを格納するのに好適なコンピュータ読取可能媒体は、半導体メモリデバイス、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリデバイス；磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスクを例として含む、あらゆる形態の不揮発性メモリ、媒体、およびメモリデバイスを含む。プロセッサおよびメモリは、特殊用途論理回路によって補足され、またはそれに組み込まれ得る。
【０２０４】
この明細書は多くの特定の実現詳細を含むものの、これらは、発明の範囲または特許請求の範囲に対する限定として解釈されるべきでなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。この明細書において別々の実施形態の状況で説明されるある特徴を、単一の実施形態において組合せて実現することもできる。逆に、単一の実施形態の状況で説明されるさまざまな特徴を、複数の実施形態で別々に、または任意の好適な部分的組合せで実現することもできる。さらに、特徴はある組合せで作用するとして上述され、そういうものとして当初特許請求され得るが、場合によっては、特許請求された組合せからの１つ以上の特徴がその組合せから削除されてもよく、特許請求された組合せは、部分的組合せまたは部分的組合せの変形に向けられてもよい。
【０２０５】
同様に、動作は特定の順序で図面に示されているが、これは、望ましい結果を達成するために、そのような動作が図示された特定の順序または連続する順序で行なわれること、もしくは、図示された動作がすべて行なわれることを要求するものとして理解されるべきではない。ある状況では、マルチタスクおよび並行処理が有利であるかもしれない。さらに、上述の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を要求するものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは一般に、単一のソフトウェア製品にともに一体化されるか、または複数のソフトウェア製品にパッケージ化され得るということが理解されるべきである。
【０２０６】
主題の特定の実施形態が説明されてきた。他の実施形態は、特許請求の範囲内にある。たとえば、請求項に記載されたアクションは、異なる順序で行なわれ、依然として望ましい結果を達成することができる。一例として、添付図面に示されたプロセスは、望ましい結果を達成するために、図示された特定の順序または連続する順序を必ずしも必要とはしない。ある実現化例では、マルチタスクおよび並行処理が有利であるかもしれない。
【図１】
2020512613.tif 000003
【図２】
2020512613.tif 000004
【図３】
2020512613.tif 000005
【図４】
2020512613.tif 000006
【図５】
2020512613.tif 000007
【図６】
2020512613.tif 000008
【図７】
2020512613.tif 000009
【国際調査報告】
2020512613.tif 000010
2020512613.tif 000011
2020512613.tif 000012
2020512613.tif 000013
2020512613.tif 000014