(57)【要約】  システムは、マルチスレッドソフトウェアプログラムの記録された実行の性能及び／または正確性の特徴をグラフィカルに視覚化する。システムは、マルチスレッドプログラムの実行中に記録されたチャンクベースの情報を処理し、記録された情報のグラフィカルな視覚化を準備し、アニメーション化された態様で、ディスプレイ上にグラフィカルな視覚化を表示する。システムは、視聴者が、アニメーション化されたグラフィカルな視覚化の表示をインタラクティブに制御することを可能としてもよい。
2016514318.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上におけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに表示する視覚化システムであって、
視覚化のために前記マルチスレッドソフトウェアプログラムの前記実行中に記録されるプログラム実行データを準備する構文解析モジュールと、
前記プログラム実行データのアニメーション化されたグラフィカル表示を表示するグラフィカルモデラーであって、前記アニメーション化されたグラフィカル表示は、前記性能及び正確性の特徴のうち１つまたは複数を強調表示する、グラフィカルモデラーと、
ディスプレイ上において、前記アニメーション化されたグラフィカル表示の前記表示をインタラクティブに制御するコントローラモジュールと、
を備える、視覚化システム。
【請求項２】
前記構文解析モジュールは、前記マルチスレッドソフトウェアプログラムによって前記実行中に実行された複数の命令に関するデータと、前記複数の命令が実行された複数のスレッドとを含む複数の命令トレースを準備する、請求項１に記載の視覚化システム。
【請求項３】
前記構文解析モジュールは、前記マルチスレッドソフトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって生成される複数のログファイルからプログラム実行データを読み出す、請求項１または２に記載の視覚化システム。
【請求項４】
前記構文解析モジュールは、複数のチャンクに従って前記データを構成し、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す、請求項１から３のいずれか１項に記載の視覚化システム。
【請求項５】
前記グラフィカルモデラーは、複数の視覚的特徴を表示し、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む、請求項４に記載の視覚化システム。
【請求項６】
各チャンクの各命令は、実行時間を有し、各視覚的特徴は、前記チャンクにおける前記複数の命令の前記実行時間によって定義されるサイズを有する形状を含む、請求項５に記載の視覚化システム。
【請求項７】
前記形状の前記サイズは、前記チャンクにおける命令の数によってさらに定義される、請求項６に記載の視覚化システム。
【請求項８】
前記グラフィカルモデラーは、前記プログラムの合計実行時間に基づいて、前記アニメーション化されたグラフィカル表示のサイズを正規化する、請求項１から７のいずれか１項に記載の視覚化システム。
【請求項９】
前記アニメーション化されたグラフィカル表示は、前記マルチスレッドソフトウェアプログラムの前記実行中に生じた共有メモリ依存コンフリクトを強調表示する、請求項１から８のいずれか１項に記載の視覚化システム。
【請求項１０】
前記グラフィカルモデラーは、前記アニメーション化されたグラフィカル表示のオフライン再生のために、前記アニメーション化されたグラフィカル表示に関するデータを格納する、請求項１から９のいずれか１項に記載の視覚化システム。
【請求項１１】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記オフライン再生を制御する、請求項１０に記載の視覚化システム。
【請求項１２】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の視聴者からの入力を受信し、前記アニメーション化されたグラフィカル表示の前記表示中の前記入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示を調節する、請求項１から１１のいずれか１項に記載の視覚化システム。
【請求項１３】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記表示中の前記視聴者の入力に応じて、前記アニメーション化されたグラフィカル表示が表示されるスピードを増減させる、請求項１２に記載の視覚化システム。
【請求項１４】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記表示中の前記視聴者の入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示の倍率を変化させる、請求項１２または１３に記載の視覚化システム。
【請求項１５】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記表示中の前記視聴者の入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示を回転させる、請求項１２から１４のいずれか１項に記載の視覚化システム。
【請求項１６】
コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに視覚化する方法であって、
前記マルチスレッドソフトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって記録されるプログラム実行データを読み出す段階と、
グラフィカルな視覚化のために前記プログラム実行データを準備する段階と、
前記プログラム実行データのアニメーション化されたグラフィカル表示を表示する段階であって、前記アニメーション化されたグラフィカル表示は、前記性能及び正確性の特徴のうち１つまたは複数を強調表示する、段階と、
１つまたは複数の視覚化パラメータに応じて、前記アニメーション化されたグラフィカル表示の前記表示を制御する段階と、
を備える、方法。
【請求項１７】
複数のチャンクに従って前記データを構成する段階を備え、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す、請求項１６に記載の方法。
【請求項１８】
前記複数のチャンクに関する複数の視覚的特徴を表示する段階を備え、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む、請求項１７に記載の方法。
【請求項１９】
各チャンクの各命令は、実行時間を有し、各チャンクは、命令の数に関連付けられ、前記方法は、前記チャンクにおける前記複数の命令の前記実行時間によって定義されるサイズを有する形状を含むように、各視覚的特徴を定義する段階を備える、請求項１８に記載の方法。
【請求項２０】
前記プログラム実行のサイズに基づいて、前記アニメーション化されたグラフィカル表示のサイズを構成する段階を備える、請求項１６から１９のいずれか１項に記載の方法。
【請求項２１】
前記アニメーション化されたグラフィカル表示において、前記マルチスレッドソフトウェアプログラムの前記実行中に生じた共有メモリ依存コンフリクトを強調表示する段階を備える、請求項１６から２０のいずれか１項に記載の方法。
【請求項２２】
前記アニメーション化されたグラフィカル表示の視聴者からの入力を受信する段階と、前記アニメーション化されたグラフィカル表示の前記表示中の前記入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示を調節する段階とを備える、請求項１６から２１のいずれか１項に記載の方法。
【請求項２３】
実行されたことに応じて、コンピューティングデバイスに請求項１６から２２のいずれか１項に記載の方法を実行させる、プログラム。
【請求項２４】
コンピューティングデバイス上におけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに視覚化するシステムであって、
前記マルチスレッドソフトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって記録されたプログラム実行データを読み出す手段と、
グラフィカルな視覚化のためにプログラム実行データを準備する手段と、
前記プログラム実行データのアニメーション化されたグラフィカル表示を表示する手段であって、前記アニメーション化されたグラフィカル表示は、前記性能及び正確性の特徴のうち１つまたは複数を強調表示する、手段と、
１つまたは複数の視覚化パラメータに応じて、前記アニメーション化されたグラフィカル表示の前記表示を制御する手段と、
を備える、システム。
【請求項２５】
複数のチャンクに従って前記データを構成する手段を備え、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す、請求項２４に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
マルチコアプロセッサ技術の出現により、並列プログラミングが普及した。しかしながら、並列プログラムの非決定的本質により、同一の入力がなされた同じ複数の並列プログラムの複数の実行は、異なる複数の結果を生成することがある。
【０００２】
複数のメモリ競合記録（ＭＲＲ）技術は、記録されるべき複数のマルチスレッドプログラムの実行を可能とし、これにより、複数のメモリアクセスがインタリーブする順番をロギングする。記録は、デバッグ目的のために再生可能である。再生される場合、記録は、元の実行によって取得されたものと同じ複数の結果を生成する。複数のポイントツーポイントＭＲＲ技術は、複数のメモリアクセスインタリービングを個々の複数の共有メモリ命令レベルで追跡するが、複数のチャンクベース技術は、アトミックに（例えば、コンフリクトするリモートメモリアクセスをインタリービングすることなく）実行するメモリオペレーションの数を観察することによって、複数のメモリアクセスインタリービングを追跡する。
【図面の簡単な説明】
【０００３】
本明細書で説明された複数の概念は、例として示されるものであり、添付の複数の図において限定として示されるものではない。例示の簡略化及び明瞭化のため、複数の図に示される複数の要素は、必ずしも縮尺に従って表されていない。適切とみなされる場合には、複数の参照符号は、複数の対応するまたは類似の要素を示すために、複数の図の間で反復されている。
【図１】マルチスレッドソフトウェアプログラムの実行の性能及び／または正確性の特徴を視覚化するシステムの少なくとも１つの実施形態の簡略化されたブロック図である。
【図２】図１の視覚化システムの少なくとも１つの実施形態の簡略化されたブロック図である。
【図３】図２の動的再生モジュールの少なくとも１つの実施形態の簡略化されたブロック図である。
【図４】マルチスレッドソフトウェアプログラムの実行に関する複数のログファイルの簡略化された図である。
【図５】マルチスレッドソフトウェアプログラムもの記録された実行の性能及び／または正確性の特徴を視覚化する方法の少なくとも１つの実施形態の簡略化されたフロー図である。
【図６】記録されたソフトウェアプログラム実行データを視覚化のために準備する方法の少なくとも１つの実施形態の簡略化されたフロー図である。
【図７】マルチスレッドソフトウェアプログラムの記録された実行の視覚化を制御する方法の少なくとも１つの実施形態の簡略化されたフロー図である。
【図８】マルチスレッドソフトウェアプログラムの記録された実行の視覚化をグラフィカルに与える方法の少なくとも１つの実施形態の簡略化されたフロー図である。
【図９】マルチスレッドソフトウェアプログラムの記録された実行のグラフィカルな視覚化の少なくとも１つの実施形態の簡略化された図である。
【図１０】図９のグラフィカルな視覚化が「ズームアウト」されたバージョンの簡略化された図である。
【図１１】図９のグラフィカルな視覚化が「ズームイン」されたバージョンの簡略化された図である。
【発明を実施するための形態】
【０００４】
本開示の複数の概念は、様々な複数の改良及び複数の代替形式に容易に想到するが、それらの具体的な複数の実施形態は、例として複数の図面において示されており、本明細書において詳細に説明される。
【０００５】
しかしながら、本開示の複数の概念を開示された特定の複数の形式に限定する意図はなく、反対に、本開示及び添付された特許請求の範囲に一致する全ての改良、均等物及び代替物を包含することを意図することが理解されるべきである。明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が特定の特徴、構造または特性を含み得るが、各実施形態が当該特定の特徴、構造または特性を含んでもよく、または必ずしも含まないこともあることを示す。さらに、このような複数の表現は、必ずしも同じ実施形態を参照するものではない。さらに、特定の特徴、構造または特性が、ある実施形態と関連して説明される場合、明示的に説明されているか否かに関わらず、このような特徴、構造または特性を他の複数の実施形態と関連してもたらすことは、当業者の知識の範囲内にあるとされる。
【０００６】
複数の開示された実施形態は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせで実装されてもよい。複数の開示された実施形態は、１つまたは複数のプロセッサによって読み出し及び実行可能な一時的または非一時的機械可読（例えば、コンピュータ可読）記憶媒体によって伝達され、またはこれに格納される複数の命令としてさらに実装されてもよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、または機械によって可読な形式で情報を格納または送信するための他の物理的構造（例えば、揮発性または不揮発性メモリ、メディアディスクまたは他のメディアデバイス）として具現化されてもよい。
【０００７】
複数の図面において、いくつかの構造または方法の特徴は、複数の具体的な構成及び／または複数の順番で示されてもよい。しかしながら、このような複数の具体的な構成及び／または複数の順番が必要とされなくてもよいことが理解されるべきである。むしろ、いくつかの実施形態において、このような特徴は、例示的な複数の図において示されるものとは異なる態様及び／または順番で構成されてもよい。さらに、特定の図において構造または方法の特徴を含むことは、このような特徴が全ての実施形態で必要とされることを示唆することを意味するものではなく、いくつかの実施形態においては、含まれなくてもよく、または、他の複数の特徴と組み合わせられてもよい。
【０００８】
ここで図１を参照すると、いくつかの実施形態において、マルチスレッドソフトウェアプログラム１２６の実行を視覚化するシステム１２４は、以下にさらに詳細に説明されるように、ソフトウェアプログラム１２６の実行中にチャンクベースのメモリ競合レコーダ１１８によって生成された複数のログファイル１３０に基づいて、複数の命令トレース１３２を準備し、プログラマまたはソフトウェアアナリストのような視聴者に対して、記録された実行のアニメーション化されたグラフィカル表示１３４を、ディスプレイ１２０上に表示する。アニメーション化されたグラフィカル表示１３４は、複数の形状及び複数の色のような複数の視覚的特徴を含み、これらは、ソフトウェアプログラム１２６の記録された実行の性能及び正確性の特徴を強調表示するように構成される。本明細書で用いられるように、用語「強調表示」は、視聴者の眼において性能及び正確性の特徴に対する注意を呼び起こすように機能し得る複数の視覚的特徴の任意の構成または組み合わせを意味する。例えば、いくつかの実施形態において、記録された実行の複数のスレッドの複数の視覚的特徴は、全て同じ状況で表示される。使用時において、以下さらに詳細に説明されるように、視覚化システム１２４は、例えば、１つまたは複数のユーザ制御１２２による視聴者からの入力に応じて、アニメーション化されたグラフィカル表示１３４の表示をインタラクティブに調節する。例えば、いくつかの実施形態において、システム１２４は、視聴者が、倍率を増減させる（例えば、「ズームイン」または「ズームアウト」）、アニメーションのスピードを増減させる（例えば、「早送り」または「巻き戻し」）、またはグラフィカル表現１３４を回転させることを可能とする複数のインタラクティブ制御を与える。同じ状況において複数のスレッドの全ての同時実行の実行をグラフィカルに示すことによって、視覚化システム１２４は、実行の単なるテキスト表現からは識別困難または不可能な性能及び／または正確性の特徴をソフトウェア開発者が識別する助けとなり得る態様で、視覚化されるべき複数のスレッド間の複数のインタラクションを可能とする。
【０００９】
コンピューティングデバイス１００は、アニメーション化されたグラフィカル情報を視聴者に表示し、本明細書で説明される複数の機能を実行する任意のタイプのコンピューティングデバイスとして具現化されてもよい。１つのコンピューティングデバイスが図１に示されるが、複数の他の実施形態においては、システム１２４は、複数のコンピューティングデバイス１００で具現化されてもよいことを理解されたい。例示的なコンピューティングデバイス１００は、プロセッサ１１０、メモリ１１２、入出力サブシステム１１４、データストレージデバイス１１６、メモリ競合レコーダ１１８、ディスプレイ１２０、複数のユーザ制御１２２、視覚化システム１２４及びソフトウェアプログラム１２６を含む。勿論、コンピューティングデバイス１００は、他の実施形態において、コンピュータにおいて一般的に見られるもの（例えば、様々な複数の入出力デバイス）のような他のまたは追加的な複数のコンポーネントを含んでもよい。さらに、いくつかの実施形態において、例示的な複数のコンポーネントのうち１つまたは複数は、他のコンポーネントに組み込まれ、またはその一部であってもよい。例えば、メモリ１１２またはそれらの一部は、いくつかの実施形態において、プロセッサ１１０に組み込まれてもよい。
【００１０】
プロセッサ１１０は、現在知られているまたは将来開発される任意のタイプのプロセッサとして具現化され、本明細書で説明される複数の機能を実行可能であってもよい。例えば、プロセッサは、シングルまたはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラ、または他のプロセッサもしくは処理／制御回路として具現化されてもよい。同様に、メモリ１１２は、現在知られているまたは将来開発される任意のタイプの揮発性もしくは不揮発性メモリまたはデータストレージとして具現化され、本明細書で説明される複数の機能を実行可能であってもよい。動作時において、メモリ１１２は、システム１２４の動作中に用いられる複数のオペレーティングシステム、複数のアプリケーション、複数のプログラム、複数のライブラリならびに複数のドライバのような様々なデータ及びソフトウェアを格納してもよい。メモリ１１２は、Ｉ／Ｏサブシステム１１４を介して、プロセッサ１１０と通信可能に連結されてもよく、これは、コンピューティングデバイス１００のプロセッサ１１０、メモリ１１２及び複数の他のコンポーネントとの入出力動作を容易にする回路及び／または複数のコンポーネントとして具現化されてもよい。例えば、Ｉ／Ｏサブシステム１１４は、複数のメモリコントローラハブ、複数の入出力制御ハブ、複数のファームウェアデバイス、複数の通信リンク（すなわち、ポイントツーポイントリンク、バスリンク複数の有線、複数のケーブル、複数の光ガイド、複数のプリント回路基板トレース等）及び／または複数の入出力動作を容易にする複数の他のコンポーネント及びサブシステムとして具現化されてもよく、または、これらを含んでもよい。いくつかの実施形態において、Ｉ／Ｏサブシステム１１４は、システムオンチップ（ＳｏＣ）の一部を形成してもよく、プロセッサ１１０、メモリ１１２及びコンピューティングデバイス１００の複数の他のコンポーネントと共に、単一の集積回路チップに組み込まれてもよい。
【００１１】
データストレージ１１６は、例えば、メモリデバイス及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブまたは他の複数のデータストレージデバイスのようなデータの短期間または長期間ストレージのように構成される任意のタイプのデバイスまたは複数のデバイスとして具現化されてもよい。例示的な実施形態において、視覚化システム１２４及び／またはメモリ競合レコーダ１１８は、複数のＭＲＲログファイル１３０、複数の命令トレース１３２、グラフィカル表現１３４、それらの一部及び／または他の情報をデータストレージ１１６に含むプログラム実行データ１２８を維持してもよい。以下、さらに詳細に説明されるように、複数のログファイル１３０及び複数の命令トレース１３２は、グラフィカル表現１３４を形成するために用いられてもよい。プログラム実行データ１２８の一部は、ディスプレイ１２０上における表示を可能にする任意のタイプのデジタルデータとして具現化されてもよい。例えば、プログラム実行データ１２８の一部は、バイナリコード、機械またはアセンブリレベルのコード、テキスト、グラフィック及び／または他のタイプのコンテンツとして具現化されてもよい。プログラム実行データ１２８の一部は、複数のデジタルファイル、複数のアレイ、複数のデータベース、複数のテーブル及び／または他の適切な複数のデータ構造に格納されてもよい。
【００１２】
メモリ競合レコーダ１１８は、チャンクベースの態様でマルチスレッドソフトウェアプログラムの実行を記録する任意の適切なタイプのシステムとして具現化されてもよい。例えば、メモリ競合レコーダ１１８は、ハードウェアまたはソフトウェアシステム、例えば、プロセッサ１１０のアーキテクチャで実装されるハードウェアシステムとして具現化されてもよい。メモリ競合レコーダ１１８は、後で決定的な再生を行うために、マルチスレッドソフトウェアプログラム１２６の実行を記録する。メモリ競合レコーダ１１８は、記録された実行が再生される場合、それが元の実行中に記録されたときと同様に再現されるように構成される。このために、メモリ競合レコーダ１１８は、複数のスレッドにわたって、これらのスレッドが再生中に元の実行と同様に再同期され得るように、複数のメモリアクセスインタリービングを記録する。メモリ競合レコーダ１１８は、複数のメモリアクセスがインタリーブする順番のログを取る。
【００１３】
上述されたように、メモリ競合レコーダ１１８は、コンフリクトする共有メモリの依存関係を介在させることなく実行可能なメモリオペレーションの数を観察することによって、複数のメモリアクセスインタリービングを追跡するために、チャンクベースのアプローチを用いる。「チャンク」は、別々に、すなわち、他のスレッドからの複数のコンフリクトするメモリアクセスとの一切のインタリービングなしに、実行する複数の命令のブロックを表す。換言すると、チャンクは、複数のスレッド間でコンフリクトを生じさせる複数の隣接キャッシュコヒーレンシ要求の間で生じる複数の共有メモリアクセスをキャプチャする。共有メモリは、例えば、複数の異なるプロセッサ、または複数のコアを有するプロセッサにおける複数のプロセッサコアによってアクセス可能なメモリ（例えば、ランダムアクセスメモリまたはＲＡＭ）を指す。共有メモリシステムは、多くの場合、キャッシュメモリの利用を含む。キャッシュコヒーレンシは、複数のキャッシュのうちの１つが複数の他のプロセッサまたは複数のコアによって用いられ得る情報によって更新される場合はいつも、全てのプロセッサまたはプロセッサコアによって用いられるキャッシュメモリを更新する必要性を指す。そこで、「コンフリクト」または「依存関係」は、例えば、プロセッサが共有メモリに格納された情報にアクセスする必要があるが、他のプロセッサによって共有メモリに書き込まれたデータによってそのキャッシュが更新されるまで待たなければならない場合に生じ得る。さらに、チャンクベースのメモリ競合記録の説明は、例えば、ＭＩＣＲＯ  '０９，  Ａｓｓｏｃｉａｔｉｏｎ  ｏｆ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｒｙ  （ＡＣＭ），  Ｄｅｃｅｍｂｅｒ  １２−１６，  ２００９に掲載されたＰｏｋａｍ  ｅｔ  ａｌ．，  Ａｒｃｈｉｔｅｃｔｉｎｇ  ａ  Ｃｈｕｎｋ−ｂａｓｅｄ  Ｍｅｍｏｒｙ  Ｒａｃｅ  Ｒｅｃｏｒｄｅｒ  ｉｎ  Ｍｏｄｅｒｎ  ＣＭＰｓに見られる。
【００１４】
コンピューティングデバイス１００のディスプレイ１２０は、任意の１つまたは複数の表示スクリーンとして具現化されてもよく、ここで、視聴者に対して情報が表示されてもよい。ディスプレイは、例えば、インタラクティブディスプレイ（例えば、タッチスクリーン）、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイ、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ及び／または現在知られているまたは将来開発される他の表示技術を含む、任意の適切な表示技術として具現化されてもよく、またはこれらを用いてもよい。単一のディスプレイ１２０のみが図１に示されるが、コンピューティングデバイス１００は、同じまたは異なるコンテンツが同時にまたは互いに連続して表示可能な複数のディスプレイまたは表示スクリーンを含んでもよいことを理解されたい。ユーザ制御１２２は、視聴者が例えばグラフィカル表現１３４の表示を調節することによってアクティブ化され得る、任意の１つまたは複数の物理または仮想制御として具現化されてもよい。ユーザ制御１２２は、例えば、物理または仮想（例えば、タッチスクリーン）キー、キーボードまたはキーパッド、マウス、物理または仮想ボタン、スイッチ、スライド、ダイヤル等を含む、現在知られているまたは将来開発される任意の適切なユーザ制御技術として、また、音声またはジェスチャによってアクティブ化される制御のような非触覚制御として、具現化されてもよい。ソフトウェアプログラム１２６は、任意のタイプのマルチスレッドまたは「並列」機械実行可能ソフトウェアプログラムとして具現化されてもよく、その実行は、メモリ競合レコーダ１１８によって記録可能である。用語「マルチスレッド」は、概して、複数のスレッドが独立して、例えば、複数の異なるプロセッサまたはコアで実行することを可能とするプログラミング技術を用いて実装されるソフトウェアプログラムを指し、ここで、「スレッド」は、複数のプログラミング命令の小さいシーケンスを指し、複数の異なるスレッドは、用いられる同期のタイプ（例えば、ロック、トランザクションメモリまたはいくつかの他の同期技術）に関わらず、共有メモリにアクセスすることができる。例えば、視覚化システム１２４は、用いられる同期のタイプに応じて、複数の共有メモリ依存コンフリクト及び／または複数の同期コンテンションを視覚化することができる。トランザクションメモリを視覚化するシステムの例は、ＰＡＣＴ  '１２，  Ａｓｓｏｃｉａｔｉｏｎ  ｏｆ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｒｙ  （ＡＣＭ），  Ｓｅｐｔｅｍｂｅｒ  １９−２３，  ２０１２に掲載されたＧｏｔｔｓｃｈｌｉｃｈ，  ｅｔ  ａｌ．，  Ｖｉｓｕａｌｉｚｉｎｇ  Ｔｒａｎｓａｃｔｉｏｎａｌ  Ｍｅｍｏｒｙにおいて説明されている。
【００１５】
ここで図２を参照すると、視覚化システム１２４の実施形態２００は、構文解析モジュール２１０及び動的再生モジュール２１２を含む。構文解析モジュール２１０及び動的再生モジュール２１２は、例えば、複数の機械実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして各々具現化されてもよい。構文解析モジュール２１０は、複数のＭＲＲログファイル１３０を読み出し、そこからソフトウェアプログラム１２６の元の実行、例えば、メモリ競合レコーダ１１８に記録された実行の情報を抽出する。
【００１６】
このような情報は、例えば、全てのスレッドの各チャンクにおけるプログラム命令の数及び複数のチャンクの順番を含んでもよい。図４に示されるように、複数のログファイル１３０は、共有メモリの順番の複数の依存関係を、ソフトウェアプログラム１２６の元の実行中にこれらが生じた順番で含んでもよい。例えば、チャンクベースのメモリ競合記録の結果として、ログファイル１３０は、各スレッドに対して形成されてもよい。各ログファイルは、その対応するスレッドにおいて実行する複数のチャンクの実行順番を示し、ソフトウェアプログラム１２６の元の記録された実行中に、全てのスレッドにおける全てのチャンクの実際の実行順番を示す複数の命令ポインタを含み、またはこれらを参照する。複数のログファイル１３０からのチャンク順番情報は、アニメーション化されたグラフィカル表示１３４が表示される場合に、複数のチャンクの元の実行順番を保持するために用いられる。複数のログファイル１３０は典型的には複数のバイナリファイルであることから、構文解析モジュール２１０は、そこから複数の命令トレース１３２を形成し、これらは、複数のログファイル１３０から抽出された情報の、本質的に人間が読み取り可能な複数の表現である。
【００１７】
複数の命令トレース１３２は、動的再生モジュール２１２への入力として用いられる。動的再生モジュール２１２は、アニメーション化されたグラフィカル表示１３４を形成し、視聴者に対してこれをインタラクティブに提示するために、ディスプレイ１２０及びユーザ制御１２２とのインタフェースを取る。ここで図３を参照すると、動的再生モジュール２１２は、多数の機械実行可能命令、モジュール、ルーチン、ロジックユニットまたはハードウェアユニットもしくはデバイスとして具現化されてもよく、これは、リアルタイムコントローラモジュール３１０、命令シミュレーションモジュール３１２、グラフィカルモデラー３１４及びユーザ入力コントローラ３１６を含む。グラフィカルモデラー３１４は、視聴者からの要求に応じて、最初にグラフィカル表現１３４を形成し、その後これを（例えば、オフライン）再生する。
【００１８】
リアルタイムコントローラ３１０は、これに関連付けられた視覚化パラメータ３４０に基づいて、グラフィカル表現１３４のアニメーション化された表示を制御する。視覚化パラメータ３４０は、例えば、再生方向、レート、倍率及び／または向きを含んでもよい。すなわち、全てのプログラム実行データを一度に視聴するのではなく、リアルタイムコントローラ３１０は、記録された実行が元の実行のスピードまたはレートで「リアルタイム」に「再生」されることを可能にする。さらに、リアルタイムコントローラ３１０は、それが元のプログラム実行を再生する方向（例えば、前または後ろへ）、倍率、向き（例えば、回転）及び／またはレートもしくはスピードを調節することができることにより、視聴者は、例えば、これらの展開に従って生じる複数のイベントを観察し、再生を減速し、複数の関心領域により大きい注意を払い、または無関係なまたは重要性の低い複数の領域をスキップするために再生スピードを上げることが可能となる。リアルタイムコントローラ３１０自体は、ユーザ入力コントローラ３１６とのインタフェースを取ることにより、アニメーション化されたグラフィカル表示１３４の提示の複数の変更に関する視聴者の複数の要求を処理する。
【００１９】
リアルタイムコントローラ３１０は、命令シミュレーションモジュール３１２とインタフェースを取ることにより、記録された実行の間に実行された複数の命令に対応するテキストの表示を制御し、グラフィカルモデラー３１４とインタフェースを取ることにより、ユーザ入力コントローラ３１６によって受信された入力に応じて、グラフィカル表現１３４の表示を制御する。ユーザ入力コントローラ３１６は、ユーザ制御１２２のアクティブ化又は非アクティブ化を検出し、リアルタイムコントローラ３１０及びグラフィカルモデラー３１４によって実行され得るこれらのユーザアクションを、必要に応じて複数の命令に変換する。例えば、視聴者がディスプレイ１２０上で「＋」グラフィカル制御をタップしたことをユーザ入力コントローラ３１６が検出した場合、ユーザ入力コントローラ３１６は、再生スピードを上昇させるようリアルタイムコントローラ３１０に命令してもよい。同様に、ユーザが拡大鏡アイコンをタップした、または特定のジェスチャ（例えば、親指及び人差し指を互いから離すように動かす）を行ったことをユーザ入力コントローラ３１６が検出した場合、ユーザ入力コントローラ３１６は、グラフィカル表現１３４の倍率を上昇させるようグラフィカルモデラー３１４に命令してもよい。
【００２０】
グラフィカルモデラー３１４は、アニメーションロジックモジュール３２０及びグラフィックレンダリングモジュール３２２として具現化されてもよい。アニメーションロジックモジュール３２０は、グラフィカル表現１３４の複数の視覚的特徴が示されるレート（例えば、更新レート）を制御することにより、グラフィカル表現１３４のアニメーションを与える。例えば、いくつかの実施形態において、更新レートは、毎秒約５０フレームまたは他の適切なレートの範囲にあることにより、元の実行をリアルタイムにシミュレーションする態様でグラフィカル表現１３４を与えてもよい。グラフィックレンダリングモジュール３２２は、最初に、命令トレース１３２によって与えられたテキスト情報に基づいてグラフィカル表現１３４を展開させ、視覚化パラメータに従って、ユーザ入力コントローラ３１６によって時々調節または更新され得るように、グラフィカル表現１３４を表示する。グラフィックレンダリングモジュール３２２は、例えば、複数の多角形レンダリング技術及び／または複数の他の適切な技術を適用することにより、グラフィカル表現１３４をディスプレイ１２０に表示してもよい。
【００２１】
マルチスレッドソフトウェアプログラム１２６の元の記録された実行のグラフィカル表現１３４は、アレイ、コンテナ、テーブル、ハッシュ、またはそれらの組み合わせもしくは複数のようなデータ構造に格納される。グラフィカル表現１３４は、元の実行の間に実行された複数のスレッド３３０、複数のスレッド３３０の各々によって実行された複数のチャンク３３２、及びこれらが実行された順番、複数のチャンク３３２の各々に関連付けられた複数の機械実行可能命令３３４、複数の命令３３４の各々に関連付けられた複数の実行時間３３６（絶対値であっても相対値であってもよい）、複数のスレッド３３０、複数のチャンク３３２及び複数の命令３３４の各々に関連付けられた複数の視覚的特徴３３８、及びグラフィカル表現１３４に関連付けられた複数の視覚化パラメータ３４０に関するデータを含む。視覚的特徴３３８は、例えば、複数の異なるスレッド３３０に関連付けられた複数の異なる色を含んでもよい。視覚的特徴３３８は、例えば、各チャンク３３２に関連付けられた複数の形状のような複数のグラフィックをさらに含んでもよい。例えば、所与のチャンク３３２に対して、視覚的特徴３３８は、チャンク３３２における命令３３４の数及び／またはチャンク３３２における全ての命令３３４の合計実行時間によって定義されてもよい。図９−１１の複数の例示的な視覚化において、例えば、複数の視覚的特徴３３８は、複数の矩形のバーを含み、各バーの垂直高さは（例えば、複数のバーが視点または倍率に関わらず視認可能となるように）一定である。複数の他の実施形態において、複数のバーの垂直高さは、可変である。例えば、垂直高さは、チャンク３３２における命令の数によって、または、プログラム実行のいくつかの他の動的署名に基づいて、定義されてもよい。各バーの水平長さは、チャンク３３２における複数の命令３３４の合計実行時間によって定義される。また、図９−１１において、複数の異なるスレッドに関連付けられた複数のチャンクは、複数の異なる色で表示され、同じスレッドに関連付けられた全てのチャンクは、同じ色で表示される。複数の視覚化パラメータ３４０は、グラフィカル表現１３４の再生レート及びクロック時、（視覚化のサイズを正規化するために使用可能な）記録されたプログラム実行の合計サイズ、及び／または上述されたような複数のユーザ定義パラメータに関するデータを含んでもよい。
【００２２】
ここで図５を参照すると、複数の実行可能命令、複数のモジュールまたは複数のルーチンとして実装され、コンピューティングデバイス１００、例えば、視覚化システム１２４によって実行され得る方法５００が示される。予めブロック５１０において、マルチスレッドソフトウェアプログラム１２６は、メモリ競合レコーダ１１８と関連して実行されることにより、複数のログファイル１３０を生成する。ブロック５１０において複数の破線で示されるように、いくつかの実施形態において、この処理は、視覚化システム１２４の外部で実行可能である。命令トレース１３２は、ブロック５１２において、複数のログファイル１３０を構文解析することによって形成される。ブロック５１４において、ソフトウェアプログラム実行のグラフィカルな視覚化（例えば、グラフィカル表現１３４）は、複数の命令トレース１３２に基づいて形成される。ブロック５１６において、コンピューティングデバイス１００は、視覚化を再生する要求が（例えば、ユーザ入力コントローラ３１６によって）受信されたか否かを判断する。受信されなかった場合、コンピューティングデバイス１００は、終了する、またはこのような要求を待つ。要求が受信された場合、コンピューティングデバイス１００は、ブロック５１８に進み、ここで、視覚化パラメータ３４０は、（例えば、グラフィカル表現１３４にアクセスすることによって、及び／または、ユーザ入力によって）決定され、視覚化は、ディスプレイ１２０上で再生される。ブロック５２０において、視覚化をさらに再生する間に、コンピューティングデバイス１００は、新たなまたは変更された視覚化パラメータが（例えば、ユーザ入力コントローラ３１６によって）受信されたか否かを判断する。受信されなかった場合、コンピューティングデバイス１００は、現在の複数の視覚化パラメータを用いて視覚化の再生を継続し、新たなまたは変更されたパラメータを待ち続ける。新たなまたは変更された視覚化パラメータが受信された場合、方法は、ブロック５２２に進み、ここで、コンピューティングデバイス１００は、ブロック５２０で取得された新たなまたは変更された視覚化パラメータに基づいて視覚化の再生を変更し、視覚化の最後に達する、または視聴者が再生を閉じるまたは終了させるまで、新たなまたは変更されたパラメータを用いて視覚化の再生を継続する。
【００２３】
ここで図６を参照すると、方法６００が示されるが、これは、例えば、複数の実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして実装されてもよく、コンピューティングデバイス１００、例えば構文解析モジュール２１０によって実行されてもよい。ブロック６１０において、コンピューティングデバイス１００は、アクティブなスレッドトラッカを初期化する。アクティブなスレッドトラッカは、例えば、ポインタ、または、アクティブなスレッドの変化に併せてその値が変化する変数として具現化されてもよい。アクティブなスレッドトラッカは、現在のチャンクに関連付けられたスレッドのトラックを保持する。同様に、現在のスレッドトラッカは、現在読み出されている命令に関連付けられたスレッドのトラックを保持する。例えば、コンピューティングデバイス１００が、命令トレース１３２の始めに第１の命令を現在読み出している場合、アクティブなスレッドトラッカ及び現在のスレッドトラッカの値は同じとなる。コンピューティングデバイス１００が次に第１の命令と同じスレッドに関連付けられた命令を読み出す場合、アクティブなスレッドトラッカ及び現在のスレッドトラッカの値はさらに同じとなる。しかしながら、第２の命令が第１の命令と異なるスレッドに関連付けられる場合、現在のスレッドトラッカの値は新たなスレッドを反映するように変更する。
【００２４】
ブロック６１２において、コンピューティングデバイス１００は、命令トレース１３２から次の命令を読み出す。ブロック６１２において読み出される命令ラインは、視覚化システム１２４が命令のテキストを及びグラフィカルシミュレーションを形成するために必要とする命令に関する情報、例えば、命令型、ニーモニックストリング、複数のメモリ動作及び複数の引数を含む。コンピューティングデバイス１００が命令トレース１３２の最後の命令を読み出した場合（ブロック６１４）、ブロック６１６において、コンピューティングデバイス１００は、（最後の命令がその一部である）最後のチャンクのための情報をアクティブなスレッドアレイに追加する。アクティブなスレッドアレイは、プログラム実行の視覚化のために必要なチャンクベースの情報を格納する。コンピューティングデバイス１００がファイルの最後に到達していない場合、ブロック６１８において、コンピューティングデバイス１００は、現在読み出されている命令ラインが現在アクティブなスレッドまたは新たなスレッドに関連付けられているか否かを確認する。このために、コンピューティングデバイス１００は、アクティブなスレッドトラッカの値を現在のスレッドトラッカの値と比較してもよい。現在読み出されている命令ラインが新たなスレッドに関連付けられている場合、ブロック６２０および６２２において、コンピューティングデバイス１００は、現在のチャンク（例えば、前に読み出された命令が属するチャンク）をアクティブなスレッドアレイに追加し、新たなスレッドのために必要に応じてスレッドコンテナを動的にサイズ変更し、新たなスレッドのためにコンテナを初期化し、アクティブなスレッドトラッカを更新することにより、新たなスレッドがここでアクティブなスレッドとなったことを示す。スレッドコンテナは、実行されたスレッドの全てのデータを保持するデータストアである。スレッドコンテナの動的なサイズ変更は、コンピューティングデバイス１００が、予めその情報を知ることなく、任意の数の様々なサイズのスレッドを処理することを可能とする。換言すると、いくつかの実施形態において、コンピューティングデバイス１００は、記録されたプログラム実行に含まれるスレッドの数及びそれらのサイズを予め知ることなく、命令トレース１３２を削減する。結果として、コンピューティングデバイス１００は、複数の命令トレース１３２を一度読み出すことのみを必要とする。
【００２５】
現在の命令ラインが新たなスレッドまたは前に読み出された命令ラインと同じスレッドを含む場合、コンピューティングデバイス１００は、ブロック６１８またはブロック６２２から、場合によってはブロック６２４に進む。ブロック６２４において、コンピューティングデバイス１００は、視覚化に必要な命令情報を準備する命令を処理する。ブロック６２６において、コンピューティングデバイス１００は、命令型を設定し、その命令型に基づいて、シミュレーションされた命令実行時間を判断する。例えば、複数の「ロード」命令は、複数の「格納」命令の２倍高速である実行時間を有するとして定義されてもよい。他の複数のタイプの複数の命令は、同じまたは同様の実行時間を有してもよい。いくつかの実施形態において、複数の命令の複数の実行時間は、上述されたように、複数の視覚的特徴３３８の長さを判断するために用いられる。
【００２６】
ブロック６２８において、コンピューティングデバイス１００は、命令トレース１３２から読み出された命令ラインに基づいて、現在の命令の命令ポインタ値を設定する。命令ポインタ値は、いくつかの実施形態において、視聴者が視覚化の間に、命令トレース１３２の命令ラインに関連付けられた実際の逆アセンブルされたバイナリコード（例えば、ログファイル１３０において）を再び参照することを可能とするように用いられる。これは、デバッグ目的及び／または他の複数の理由のために有用たり得る。ブロック６３０において、コンピューティングデバイス１００は、命令トレース１３２に与えられた情報に基づいて、現在の命令に関連付けられたニーモニックストリングを設定する。例えば、ログファイル１３０は現在の命令のバイナリ表現を含み得るが、ニーモニックは、例えば、アセンブリコードまたはソースコードで使用可能なように、バイナリオペランドを人間が読み取り可能にしたもの（例えば、「ストア」、「ロード」、「ジャンプ」等）に相当する。ニーモニックは、多くの場合、コンピューティングデバイス１００にインストールされたオペレーティングシステムに与えられる変換テーブルまたは標準的な逆アセンブラユーティリティを用いて判断可能である。現在の命令に関する前述の情報の全てを用いることにより、コンピューティングデバイス１００は、命令情報を現在のチャンクのデータストアまたはコンテナに挿入するように進む。上述されたように、視覚化に必要な前述の情報は、チャンクによって構成され、次に、チャンクベースの情報は、スレッドアレイに格納され、視覚化処理（例えば、動的再生モジュール２１２）への入力として機能する。いくつかの実施形態において、スレッドアレイは、グラフィカル表現１３４に格納されてもよく、またはその一部であってもよい。
【００２７】
ここで図７を参照すると、方法７００が示されるが、これは、例えば、複数の実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして実装されてもよく、コンピューティングデバイス１００、例えばリアルタイムコントローラ３１０によって実行されてもよい。ブロック７１０において、コンピューティングデバイス１００は、マルチスレッドソフトウェアプログラムの前に記録された実行（例えば、グラフィカル表現１３４）の視覚化を再生する要求を処理する。このような要求は、複数のユーザ制御１２２のうち１つまたは複数により、視聴者によって開始されてもよく、上述されたように、ユーザ入力コントローラ３１６によって変換されてもよい。いくつかの実施形態において、要求は、再生レート、再生方向、再生の向き、及び／または、上述されたように、他の複数の視覚化パラメータを含んでもよい。ブロック７１２において、コンピューティングデバイス１００は、視覚化の再生が現在一時停止されているか否かを判断する。再生が一時停止されている場合、コンピューティングデバイス１００は、ブロック７１４において、視覚化がプログラム実行の再生を終了したか否かを判断する。換言すると、コンピューティングデバイス１００は、記録された実行の間に実行された最後の命令に対する複数の視覚的特徴３３８が表示されているか否かを判断する。最後の命令が表示されている場合、ブロック７１６において、コンピューティングデバイス１００は、シミュレーションされたクロック値及び最後のクロック値をリセットする。シミュレーションされたクロック値は、視覚化のクロック時全体、すなわち、再生開始からの経過時間のトラックを保持する。最後のクロック値は、実行ストリーミングにおいて、現在表示されているポイントのクロック値、例えば、元のシミュレーション中に命令が実行されたクロック時のトラックを保持する。トラックを保持し、複数の視聴者の入力に応じてこれらのクロック値を調節することは、コンピューティングデバイス１００が呼び出された回数に関わらず、システム１２４が視聴者にプログラム実行中に経過した時間の正確な知覚を与えることを可能とする。再生実行の終了に達した場合、ブロック７１８において、最後の視覚化要求（例えば、最後の視聴者の入力）からの経過時間が算出される。ブロック７２０において、コンピューティングデバイス１００は、要求が、前へまたは逆方向への再生のいずれに対するものであるかを判断する。ブロック７２２および７２４において、コンピューティングデバイス１００は、シミュレーションされたクロックを適切に調節（例えば、クロック時を増減）する。シミュレーションされたクロックは、最後の視覚化要求から経過した時間の量及びクロックレートに基づいて調節される。クロックレートは、シミュレーションのスピードに対応し、上述されたように、視聴者によって調節可能である。例えば、いくつかの実施形態において、クロックレートは、１０倍（現在のクロックレートの１０倍）のような大きさのオーダで増減可能である。前述によれば、コンピューティングデバイス１００は、視覚化の間に、視覚化が一時停止、前進または後退しているか、選択された再生レートまたは倍率に関わらず、クロック時の正確な図を表示することを目的とする。
【００２８】
ここで図８を参照すると、方法８００が示されるが、これは、例えば、複数の実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして実装されてもよく、コンピューティングデバイス１００、例えば、グラフィカルモデラー３１４及び／またはリアルタイムコントローラ３１０によって実行されてもよい。ブロック８１０において、コンピューティングデバイス１００は、グラフィックレンダリング処理が既に初期化されているか否かを判断する。されていない場合は、視覚化全体のサイズ（例えば、記録されたプログラム実行全体のグラフィカル表現１３４）が正規化され、ブロック８１２において、個々の命令に対して多角形のサイズが決定される。視覚化サイズの正規化は、記録されたソフトウェアプログラム１２６の合計実行時間に関わらず、システム１２４が、視覚化を表示することを可能にする。すなわち、視覚化ルーチンは、複数の視覚的特徴３３８の合計サイズ（例えば、複数の長方形の長さ）を算出し、それを合計実行時間にわたって均等に割って、プログラム実行の長短に関わらず、要求された場合には、システム１２４が視覚化全体を常に表示できるようにする。これらの値は、いくつかの実施形態において、グラフィカル表現１３４に、またはその一部として格納されてもよい。ブロック８１４において、コンピューティングデバイス１００は、各スレッドの表示動作、例えば、個別のスレッドに割り当てられた色で、ディスプレイ１２０上に適用可能な多角形の描画を実行する。このために、コンピューティングデバイス１００は、ブロック８１６において、各チャンクと関連して表示するためにクロック値を算出し、ブロック８１８において、チャンクの全てまたはその一部を表示するために、クロック値がシミュレーションされたクロック時より小さいか否かを判断する。換言すると、コンピューティングデバイス１００は、ブロック８２０において、それが現在のチャンクの全てまたはその一部を表示可能か否かを判断する。不可能な場合、チャンクは、表示されない。しかしながら、その場合、ブロック８２０において、コンピューティングデバイス１００は、上述された複数の視覚化パラメータに従って、適用可能なクロック時を前提に、チャンクの全てまたは表示可能な一部を表示する。例えば、現在のチャンクの複数の命令の全てが現在のシミュレーションされたクロック時より小さいクロック値を有する場合、チャンク全体に対する複数の視覚的特徴３３８が表示される。しかしながら、このようなクロック時がシミュレーションされたクロック時より大きい場合、コンピューティングデバイス１００は、シミュレーションされたクロック時に達するまで、１つの命令に対する複数の視覚的特徴３３８を一度に表示する。ブロック８２２において、コンピューティングデバイス１００は、必要に応じて、シミュレーションされたクロックをオーバーフローまたはアンダーフローのために再調整する。前への再生実行が実行における最後の命令を超えた場合、オーバーフローに達し、後ろへの再生実行が実行における第１の命令を超えた場合に、アンダーフローに達する。
【００２９】
ここで図９−１１を参照すると、例えば、ディスプレイ１２０に表示され得るマルチスレッドソフトウェアプログラムの記録された実行の例示的な視覚化が、示される。視覚化９００は、テキスト命令シミュレーション９１０を示し、これは、上述された人間が読み取り可能なバージョンの命令情報を含む。テキスト命令シミュレーション９１０において、命令ライン９１８は、強調表示される（例えば、残りのテキストと異なる色で示される）ことにより、それがシミュレーション中で現在実行されている命令であることを示す。視覚的特徴９１２、９１４および９１６は、一連の矩形グラフィックとして具現化され、ここで、特徴９１２、９１４、９１６の各々の色は、複数の命令が実行されたスレッドを示す。例えば、特徴９１２は、緑色に示されることにより、スレッド＃１との関連を示してもよく、特徴９１４は、青色で示されることにより、スレッド＃２との関連を示してもよく、特徴９１６は、黄色で示されることにより、スレッド＃３との関連を示してもよい。いくつかの実施形態において、特徴９１２、９１４、９１６の各々の垂直高さは、対応するスレッドによって実行された命令の数によって定義される。そこで、例えば、垂直方向により高い特徴９１２、９１４、９１６は、垂直方向により低い視覚的特徴９１２、９１４、９１６より大きい数の命令を表現してもよい。複数の他の実施形態において、特徴９１２、９１４、９１６の垂直高さは、他の複数の要因に基づいて可変であってもよく、または一定のままであってもよい。特徴９１２、９１４、９１６の各々の水平長さは、個別のスレッドによって実行された複数の命令の合計実行時間を表す。各特徴９１２、９１４、９１６内におけるソリッド領域の存在は、複数の命令が、コンフリクトする依存関係を有するインタリービングメモリアクセスが一切なく実行されたことを示す。よって、視覚的特徴９１２、９１４、９１６の各々の内部における複数のソリッド領域の各々のサイズは、一切の同期またはコヒーレンシのコンフリクト問題なしで実行された複数の命令の複数のチャンクを示す。複数のソリッド領域のより大きい複数のブロック自体は、一切の共有メモリ通信なしで動作したプログラム実行の一部であり、そこで、より大きい効率性を示す。特徴９１２、９１４、９１６における複数のソリッド領域の多くの交互のより小さいブロックの領域は、複数のスレッド間の共有メモリ通信を示し、これらの領域における最適化の必要を示し得る。例えば、特徴９１４および９１６の比較は、表示された時間中における、これら２つのスレッド間の多数の共有依存関係を示す。従って、視覚化９００は、これらの命令によって呼び出される実際の機能（例えば、根本的なアルゴリズム）の最適化を試みることにフォーカスするのではなく、プログラマは、これらのスレッド間における複数の共有メモリ通信を低減する複数の態様を特定する、または、素な共有メモリアクセスを形成する（例えば、所与の時点には、複数のスレッドに共有メモリの別の複数の領域に強制的にアクセスさせる）複数の態様を見出す試みを行わなければならないことを示唆する。換言すると、同じ状況にある全てのスレッドに対する特徴９１２、９１４、９１６を（例えば、元のプログラム実行中にこれらが生じた同じ時点で）表示することによって、視覚化９００は、複数の同期コンテンション問題を明らかにし、これらは、プログラム１２６の実行性能を改善するように対処され得る。
【００３０】
図１０は、図９の視覚化が「ズームアウト」された図１０００の例を示し、これは、システム１２４が、視聴者が一歩下がってプログラム全体の実行を俯瞰し、自身の注意をフォーカスする複数の関心領域を探すことを可能とする態様を示す。図１０において、視覚的特徴１０１０、１０１２および１０１４は、複数の異なるスレッドの実行にそれぞれ対応し、いくつかの実施形態において、複数の異なる色を用いて表示される。ボックス１０１６は、ユーザインタフェース制御を示し、これは、より詳細な研究のために、フォーカスまたはズームインするべき図１０００の領域を選択するために、視聴者によって図１０００中を移動可能である。図１０００は、上述されたように、共有メモリの依存関係及び同期コンテンションを含む、性能及び正確性の特徴を特定するために、有用たり得る。図１１は、図１０の視覚化のボックス１０１６の「ズームイン」または拡大された図１１００の例を示す。図１１００は、複数の共有メモリコンテンションの複数の領域（例えば、領域１１１２、１１１４）を、１つの色で表示された複数のボックスで強調表示し、複数の共有メモリコンテンションの相対的に自由な複数の領域（例えば、領域１１１０、１１１６、１１１８）を、異なる色で表示される複数のボックスで強調表示する。このように、システム１２４は、視聴者がさらなる研究のために、視覚化の複数の具体的な領域を迅速に参照及び選択する助けとなり得る。例えば、視聴者は、ボックス１１１０、１１１６、１１１８を無視し、ボックス１１１２、１１１４をズームインすることを選択してもよい。プログラマによるプログラム１２６の正確性分析を支援するために、システム１２４は、プログラム全体の実行の視覚化（例えば、図１０００）または実行の具体的なセグメント部分の視覚化（例えば、図１１００）をプログラマに与えることができる。いずれの場合も、プログラマは、上述されたように、視覚化を用いることにより、複数のスレッド間の共有メモリアクセスを特定することができる。プログラマが、プログラムの特定のセグメント中に、多数のチャンクが存在することに気付いた場合、プログラマは、例えば、上述された命令ポインタ情報及び／またはプログラム実行に関連付けられた複数のデバッグ記号を用いて、これらのチャンクに関連付けられたプログラムコードの一部を検証することができる。プログラマは、次に、これらのチャンクが複数のスレッドの複数の故意のインタリービングを表すか否か、または、当該セグメント（シリアル化は、より大きいシリアル化された複数のチャンクを生じさせ得る）において、プログラムが具体的なシリアル化を欠いているか否かを判断する。換言すると、システム１２４は、共有メモリ依存コンフリクト及び同期コンテンションのような複数の性能特徴を特定することに加え、プログラマが、意図的な複数のインタリービングまたはそれらの欠如が正確に実装されているか否か、または、このような複数のプログラミング技術が不注意により省略されたか否かを判断することを助けることができる。
【００３１】
［実施例］
本明細書に開示された複数の技術の複数の例示的な例が、後述される。複数の技術の実施形態は、後述される複数の例の任意の１つまたは複数、及び任意の組み合わせを含んでもよい。
【００３２】
例１は、視覚化システムを含み、これにより、コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに表示する。視覚化システムは、視覚化のためのマルチスレッドソフトウェアプログラムの実行中に記録されるプログラム実行データを準備する構文解析モジュールと、プログラム実行データのアニメーション化されたグラフィカル表示を表示するグラフィカルモデラーとを含み、アニメーション化されたグラフィカル表示は、性能及び正確性の特徴のうち１つまたは複数を強調表示する。視覚化システムは、ディスプレイにおけるアニメーション化されたグラフィカル表示の表示をインタラクティブに制御するコントローラモジュールをさらに含む。
【００３３】
例２は、例１の主題を含み、構文解析モジュールは、実行中にマルチスレッドソフトウェアプログラムによって実行された複数の命令と、複数の命令が実行された複数のスレッドとに関するデータを備える複数の命令トレースを準備する。
【００３４】
例３は、例１または例２の主題を含み、構文解析モジュールは、マルチスレッドソフトウェアプログラムの実行中にチャンクベースのメモリ競合記録システムによって生成された複数のログファイルから、プログラム実行データを読み出す。
【００３５】
例４は、例１−３のいずれかの主題を含み、構文解析モジュールは、複数のチャンクに従ってデータを構成し、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行された複数の命令を表す。
【００３６】
例５は、例４の主題を含み、グラフィカルモデラーは、複数の視覚的特徴を表示し、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む。
【００３７】
例６は、例５の主題を含み、各チャンクの各命令は、実行時間を有し、各視覚的特徴は、チャンクの複数の命令の複数の実行時間によって定義されたサイズを有する形状を含む。
【００３８】
例７は、例６の主題を含み、形状のサイズは、チャンクにおける命令の数によってさらに定義される。
【００３９】
例８は、例１−７のいずれかの主題を含み、グラフィカルモデラーは、プログラムの合計実行時間に基づいて、アニメーション化されたグラフィカル表示のサイズを正規化する。
【００４０】
例９は、例１−８のいずれかの主題を含み、アニメーション化されたグラフィカル表示は、マルチスレッドソフトウェアプログラムの実行中に生じた共有メモリ依存コンフリクトを強調表示する。
【００４１】
例１０は、例１−９のいずれかの主題を含み、グラフィカルモデラーは、アニメーション化されたグラフィカル表示のオフライン再生のために、アニメーション化されたグラフィカル表示に関するデータを格納する。
【００４２】
例１１は、例１０の主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示のオフライン再生を制御する。
【００４３】
例１２は、例１−１１のいずれかの主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の視聴者からの入力を受信し、アニメーション化されたグラフィカル表示の表示中の入力に応じて、アニメーション化されたグラフィカル表示の表示を調節する。
【００４４】
例１３は、例１２の主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の表示中の視聴者の入力に応じて、アニメーション化されたグラフィカル表示が表示されるスピードを増減させる。
【００４５】
例１４は、例１２または例１３の主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の表示中の視聴者の入力に応じて、アニメーション化されたグラフィカル表示の表示の倍率を変更する。
【００４６】
例１５は、例１２−１４のいずれかの主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の表示中の視聴者の入力に応じて、アニメーション化されたグラフィカル表示の表示を回転させる。
【００４７】
例１６は、コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに視覚化する方法を含む。方法は、マルチスレッドソフトウェアプログラムの実行中にチャンクベースのメモリ競合記録システムによって記録されたプログラム実行データを読み出す段階と、グラフィカルな視覚化のためにプログラム実行データを準備する段階と、プログラム実行データのアニメーション化されたグラフィカル表示を表示する段階であって、アニメーション化されたグラフィカル表示が性能及び正確性の特徴のうち１つまたは複数を強調表示する段階と、１つまたは複数の視覚化パラメータに応じてアニメーション化されたグラフィカル表示の表示を制御する段階とを含む。
【００４８】
例１７は、例１６の主題を含み、チャンクに従ってデータを構成する段階を含み、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく、同じスレッドによって実行される複数の命令を表す。
【００４９】
例１８は、例１７の主題を含み、複数のチャンクに関する複数の視覚的特徴を表示する段階を含み、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む。
【００５０】
例１９は、例１８の主題を含み、各チャンクの各命令は、実行時間を有し、各チャンクは、命令の数に関連付けられ、方法は、チャンクの複数の命令の複数の実行時間によって定義されるサイズを有する形状を含むように各視覚的特徴を定義する段階を含む。
【００５１】
例２０は、例１６−１９のいずれかの主題を含み、プログラム実行のサイズに基づいて、アニメーション化されたグラフィカル表示のサイズを構成する段階を含む。
【００５２】
例２１は、例１６−２０のいずれかの主題を含み、アニメーション化されたグラフィカル表示において、マルチスレッドソフトウェアプログラムの実行中に生じた共有メモリ依存コンフリクトを強調表示する段階を含む。
【００５３】
例２２は、例１６−２１のいずれかの主題を含み、アニメーション化されたグラフィカル表示の視聴者からの入力を受信する段階と、アニメーション化されたグラフィカル表示の表示中の入力に応じてアニメーション化されたグラフィカル表示の表示を調節する段階とを含む。
【００５４】
例２３は、コンピューティングデバイスを含み、これは、プロセッサと、プロセッサによって実行された場合にコンピューティングデバイスに例１６−２２のいずれかに記載の方法を実行させる複数の命令を格納するメモリとを含む。
【００５５】
例２４は、格納された複数の命令を含む１つまたは複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応じて、コンピューティングデバイスに例１６−２２のいずれかに記載の方法を実行させる。
【００５６】
例２５は、コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに視覚化するシステムを含む。システムは、マルチスレッドソフトウェアプログラムの実行中にチャンクベースのメモリ競合記録システムによって記録されたプログラム実行データを読み出す手段と、グラフィカルな視覚化のためのプログラム実行データを準備する手段と、プログラム実行データのアニメーション化されたグラフィカル表示を表示する手段であって、アニメーション化されたグラフィカル表示は、性能及び正確性の特徴のうち１つまたは複数を強調表示する、手段と、１つまたは複数の視覚化パラメータに応じて、アニメーション化されたグラフィカル表示の表示を制御する手段とを含む。
【００５７】
例２６は、マルチスレッドソフトウェアプログラムの元の実行をグラフィカルに視覚化する視覚化システムのための動的再生モジュールを含む。動的再生モジュールは、マルチスレッドソフトウェアプログラムの元の実行中に記録されたプログラム実行データのグラフィカル表現の表示を制御する。動的再生モジュールは、マルチスレッドソフトウェアプログラムの元の実行のスピードをシミュレーションするために、複数の視覚化パラメータに従って、ディスプレイ上におけるプログラム実行データに関連付けられた複数の視覚的特徴を表示するグラフィカルモデラーを含む。複数の視覚的特徴は、複数の色を含み、各色は、マルチスレッドソフトウェアプログラムの複数の命令が元の実行中に実行された異なるスレッドに関連付けられる。動的再生モジュールは、コントローラモジュールをさらに含み、これは、複数の視覚的特徴の表示中に、視覚化パラメータに対して要求された変更を表示の視聴者から受信し、要求された変更に応じて、変更に係る視覚化パラメータを更新し、グラフィカルモデラーを通信を行うことにより、更新された視覚化パラメータに係る複数の視覚的特徴の表示を更新する。
【００５８】
例２７は、例２６の主題を含み、複数の視覚的特徴は、複数のチャンクに関連付けられ、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す。
【００５９】
例２８は、例２７の主題を含み、各チャンクの各命令は、実行時間を有し、各視覚的特徴は、チャンクの複数の命令の複数の実行時間によって定義されるサイズを有する形状を含む。
【００６０】
例２９は、例２８の主題を含み、形状のサイズは、チャンクにおける命令の数によってさらに定義される。
【００６１】
例３０は、例２６−２９のいずれかの主題を含み、複数の視覚的特徴は、マルチスレッドソフトウェアプログラムの元の実行中に生じた共有メモリ依存コンフリクトを示す。
【００６２】
例３１は、例２６−３０のいずれかの主題を含み、コントローラモジュールは、要求された変更に応じて、複数の視覚的特徴が表示されるスピードを増減させる。
【００６３】
例３２は、例３１の主題を含み、コントローラモジュールは、要求された変更応じて、複数の視覚的特徴の表示の倍率を変化させる。
【００６４】
例３３は、マルチスレッドソフトウェアプログラムの元の実行中に記録されたプログラム実行データのグラフィカル表現の表示を制御する方法を含む。方法は、ソフトウェアプログラムの元の実行のスピードをシミュレーションするために、複数の視覚化パラメータに従って、ディスプレイ上におけるプログラム実行データの複数の視覚的特徴を表示する段階を含み、複数の視覚的特徴は、複数の色を含み、各色は、マルチスレッドソフトウェアプログラムの複数の命令が元の実行中に実行された異なるスレッドに関連付けられる。方法は、複数の視覚的特徴の表示中に、視覚化パラメータに対して要求された変更を受信する段階と、要求された変更に応じて、変更に係る視覚化パラメータを更新する段階と、更新された視覚化パラメータに係る複数の視覚的特徴の表示を更新する段階とをさらに含む。
【００６５】
例３４は、例３３の主題を含み、各視覚的特徴をチャンクに関連付ける段階と含み、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す。
【００６６】
例３５は、例３４の主題を含み、各チャンクの各命令は、実行時間を有し、各視覚的特徴は、形状を備え、方法は、チャンクの複数の命令の複数の実行時間に基づいて形状のサイズを定義する段階を含む。
【００６７】
例３６は、例３５の主題を含み、チャンクにおける命令の数に基づいて形状のサイズを定義する段階を含む。
【００６８】
例３７は、請求項３３−３６のいずれかの主題を含み、要求された変更に応じて、複数の視覚的特徴が表示されるスピードを増減させる段階を含む。
【００６９】
例３８は、請求項３３−３７のいずれかの主題を含み、要求された変更に応じて、複数の視覚的特徴の表示の倍率を変更する段階を含む。
【００７０】
例３９は、コンピューティングデバイスを含み、これは、プロセッサと、プロセッサによって実行された場合に、コンピューティングデバイスに例３３−３８のいずれかに記載の方法を実行させる複数の命令を格納するメモリとを含む。
【００７１】
例４０は、格納された複数の命令を含む１つまたは複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応じて、コンピューティングデバイスに、例３３−３８のいずれかに記載の方法を実行させる。
【００７２】
例４１は、マルチスレッドソフトウェアプログラムの元の実行中に記録されたプログラム実行データのグラフィカル表現の表示を制御するシステムを含む。システムは、ソフトウェアプログラムの元の実行のスピードをシミュレーションするために、複数の視覚化パラメータに従って、ディスプレイ上にプログラム実行データの複数の視覚的特徴を表示する手段を含み、複数の視覚的特徴は、複数の色を含み、各色は、マルチスレッドソフトウェアプログラムの複数の命令が元の実行中に実行された異なるスレッドに関連付けられる。システムは、複数の視覚的特徴の表示中に視覚化パラメータに対して要求された変更を受信する手段と、要求された変更に応じて視覚化パラメータを更新する手段と、更新された視覚化パラメータに係る複数の視覚的特徴の表示を更新する手段とさらに含む。
【図１】
2016514318.tif 000003
【図２】
2016514318.tif 000004
【図３】
2016514318.tif 000005
【図４】
2016514318.tif 000006
【図５】
2016514318.tif 000007
【図６】
2016514318.tif 000008
【図７】
2016514318.tif 000009
【図８】
2016514318.tif 000010
【図９】
2016514318.tif 000011
【図１０】
2016514318.tif 000012
【図１１】
2016514318.tif 000013
【国際調査報告】
2016514318.tif 000014
2016514318.tif 000015