特許第6132065号(P6132065)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ インテル・コーポレーションの特許一覧

特許6132065性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化
<>
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000002
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000003
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000004
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000005
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000006
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000007
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000008
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000009
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000010
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000011
  • 特許6132065-性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6132065
(24)【登録日】2017年4月28日
(45)【発行日】2017年5月24日
(54)【発明の名称】性能及び正確性のためのマルチスレッドソフトウェアプログラムの記録された実行の視覚化
(51)【国際特許分類】
   G06F 11/32 20060101AFI20170515BHJP
   G06F 11/36 20060101ALI20170515BHJP
【FI】
   G06F11/32 130
   G06F11/36 120
【請求項の数】25
【全頁数】23
(21)【出願番号】特願2016-500033(P2016-500033)
(86)(22)【出願日】2013年3月13日
(65)【公表番号】特表2016-514318(P2016-514318A)
(43)【公表日】2016年5月19日
(86)【国際出願番号】US2013030745
(87)【国際公開番号】WO2014142820
(87)【国際公開日】20140918
【審査請求日】2015年9月25日
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ゴットシュリヒ、ジャスティン イー.
(72)【発明者】
【氏名】ポカム、ギレス エー.
(72)【発明者】
【氏名】ペレイラ、クリスチアーノ エル.
(72)【発明者】
【氏名】ダン、クラウス
(72)【発明者】
【氏名】シリアン、フー
(72)【発明者】
【氏名】カッサ、ロルフ
【審査官】 大塚 俊範
(56)【参考文献】
【文献】 特開平07−219807(JP,A)
【文献】 特開平02−188862(JP,A)
【文献】 特表2008−537222(JP,A)
【文献】 米国特許第06226787(US,B1)
【文献】 特開平04−337843(JP,A)
【文献】 POKAM, Gilles, 他4名,Architecting a Chunk-based Memory Race Recorder in Modern CMPs,Microarchitecture,2009. MICRO-42. 42nd Annual IEEE/ACM International Symposium on,米国,IEEE,2009年12月12日,p.576-585,ISBN:978-1-60558-798-1
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/32
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
複数のスレッドを有するソフトウェアプログラムの、コンピューティングデバイス上における実行の性能及び正確性の特徴をグラフィカルに表示する視覚化システムであって、
視覚化のために前記フトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって記録されるプログラム実行データを構文解析して複数の命令トレースを生成する構文解析モジュールであって、前記プログラム実行データは前記ソフトウェアプログラムの複数のチャンクの実行の順序を示し、前記複数の命令トレースは前記プログラム実行データの少なくとも一部の、人間が読み取り可能な表現を有する、構文解析モジュールと、
少なくとも前記複数の命令トレースに基づいて前記ソフトウェアプログラムの前記実行のアニメーション化されたグラフィカル表示を表示するグラフィカルモデラーであって、前記アニメーション化されたグラフィカル表示は、前記性能及び正確性の特徴のうち1つまたは複数を強調表示して前記ソフトウェアプログラムの前記複数のチャンクの前記実行の順序の表示を提供するとともに、前記複数のスレッドの何れのスレッドが複数の実行時間のうちの各実行時間で実行されたかの表示を提供する、グラフィカルモデラーと、
ディスプレイ上において、前記アニメーション化されたグラフィカル表示の前記表示をインタラクティブに制御するコントローラモジュールと、
を備える、視覚化システム。
【請求項2】
前記構文解析モジュールは、前記フトウェアプログラムによって前記実行中に実行された複数の命令に関するデータと、前記複数の命令が実行された複数のスレッドとを含む複数の命令トレースを生成する、請求項1に記載の視覚化システム。
【請求項3】
前記構文解析モジュールは、前記ソフトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって生成される複数のログファイルからプログラム実行データを読み出す、請求項1または2に記載の視覚化システム。
【請求項4】
前記構文解析モジュールは、複数のチャンクに従って前記データを構成し、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す、請求項に記載の視覚化システム。
【請求項5】
前記グラフィカルモデラーは、複数の視覚的特徴を表示し、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む、請求項に記載の視覚化システム。
【請求項6】
各チャンクの各命令は、実行時間を有し、各視覚的特徴は、前記チャンクにおける前記複数の命令の前記実行時間によって定義されるサイズを有する形状を含む、請求項5に記載の視覚化システム。
【請求項7】
前記形状の前記サイズは、前記チャンクにおける命令の数によってさらに定義される、請求項6に記載の視覚化システム。
【請求項8】
前記グラフィカルモデラーは、前記プログラムの合計実行時間に基づいて、前記アニメーション化されたグラフィカル表示のサイズを正規化する、請求項1から7のいずれか1項に記載の視覚化システム。
【請求項9】
前記アニメーション化されたグラフィカル表示は、前記フトウェアプログラムの前記実行中に生じた共有メモリ依存コンフリクトを強調表示する、請求項1からのいずれか1項に記載の視覚化システム。
【請求項10】
前記グラフィカルモデラーは、前記アニメーション化されたグラフィカル表示のオフライン再生のために、前記アニメーション化されたグラフィカル表示に関するデータを格納する、請求項1から9のいずれか1項に記載の視覚化システム。
【請求項11】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記オフライン再生を制御する、請求項10に記載の視覚化システム。
【請求項12】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の視聴者からの入力を受信し、前記アニメーション化されたグラフィカル表示の前記表示中の前記入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示を調節する、請求項1から11のいずれか1項に記載の視覚化システム。
【請求項13】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記表示中の前記視聴者の入力に応じて、前記アニメーション化されたグラフィカル表示が表示されるスピードを増減させる、請求項12に記載の視覚化システム。
【請求項14】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記表示中の前記視聴者の入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示の倍率を変化させる、請求項12または13に記載の視覚化システム。
【請求項15】
前記コントローラモジュールは、前記アニメーション化されたグラフィカル表示の前記表示中の前記視聴者の入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示を回転させる、請求項12から14のいずれか1項に記載の視覚化システム。
【請求項16】
複数のスレッドを有するソフトウェアプログラムの、コンピューティングデバイスにおける実行の性能及び正確性の特徴をグラフィカルに視覚化する方法であって、
前記フトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって記録されるプログラム実行データを読み出す段階であって、前記プログラム実行データは前記ソフトウェアプログラムの複数のチャンクの実行の順序を示す、段階と、
グラフィカルな視覚化のために前記プログラム実行データを構文解析して複数の命令トレースを生成する段階であって、前記複数の命令トレースは前記プログラム実行データの少なくとも一部の、人間が読み取り可能な表現を有する、段階と、
少なくとも前記複数の命令トレースに基づいて前記ソフトウェアプログラムの前記実行のアニメーション化されたグラフィカル表示を表示する段階であって、前記アニメーション化されたグラフィカル表示は、前記性能及び正確性の特徴のうち1つまたは複数を強調表示して前記ソフトウェアプログラムの前記複数のチャンクの前記実行の順序の表示を提供するとともに、前記複数のスレッドの何れのスレッドが複数の実行時間のうちの各実行時間で実行されたかの表示を提供する、段階と、
1つまたは複数の視覚化パラメータに応じて、前記アニメーション化されたグラフィカル表示の前記表示を制御する段階と、
を備える、方法。
【請求項17】
前記複数の命令トレースを生成する段階は、前記ソフトウェアプログラムによって前記実行中に実行された複数の命令に関するデータを複数のチャンクに従って成する段階を有し、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す、請求項16に記載の方法。
【請求項18】
前記表示する段階は、前記複数のチャンクに関する複数の視覚的特徴を表示する段階を有し、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む、請求項17に記載の方法。
【請求項19】
各チャンクの各命令は、実行時間を有し、各チャンクは、命令の数に関連付けられ、前記表示する段階は、前記チャンクにおける前記複数の命令の前記実行時間によって定義されるサイズを有する形状を含むように、各視覚的特徴を定義する段階を有する、請求項18に記載の方法。
【請求項20】
前記表示する段階は、前記プログラム実行のサイズに基づいて、前記アニメーション化されたグラフィカル表示のサイズを構成する段階を有する、請求項6から19のいずれか1項に記載の方法。
【請求項21】
前記表示する段階は、前記アニメーション化されたグラフィカル表示において、前記ソフトウェアプログラムの前記実行中に生じた共有メモリ依存コンフリクトを強調表示する段階を有する、請求項16から20のいずれか1項に記載の方法。
【請求項22】
前記制御する段階は、前記アニメーション化されたグラフィカル表示の視聴者からの入力を受信する段階と、前記アニメーション化されたグラフィカル表示の前記表示中の前記入力に応じて、前記アニメーション化されたグラフィカル表示の前記表示を調節する段階とを有する、請求項16から21のいずれか1項に記載の方法。
【請求項23】
実行されたことに応じて、コンピューティングデバイスに請求項16から22のいずれか1項に記載の方法を実行させる、プログラム。
【請求項24】
複数のスレッドを有するソフトウェアプログラムの、コンピューティングデバイス上における実行の性能及び正確性の特徴をグラフィカルに視覚化するシステムであって、
前記フトウェアプログラムの前記実行中にチャンクベースのメモリ競合記録システムによって記録されたプログラム実行データを読み出す手段であって、前記プログラム実行データは前記ソフトウェアプログラムの複数のチャンクの実行の順序を示す、手段と、
グラフィカルな視覚化のために前記プログラム実行データを構文解析して複数の命令トレースを生成する手段であって、前記複数の命令トレースは前記プログラム実行データの少なくとも一部の、人間が読み取り可能な表現を有する、手段と、
少なくとも前記複数の命令トレースに基づいて前記ソフトウェアプログラムの前記実行のアニメーション化されたグラフィカル表示を表示する手段であって、前記アニメーション化されたグラフィカル表示は、前記性能及び正確性の特徴のうち1つまたは複数を強調表示して前記ソフトウェアプログラムの前記複数のチャンクの前記実行の順序の表示を提供するとともに、前記複数のスレッドの何れのスレッドが複数の実行時間のうちの各実行時間で実行されたかの表示を提供する、手段と、
1つまたは複数の視覚化パラメータに応じて、前記アニメーション化されたグラフィカル表示の前記表示を制御する手段と、
を備える、システム。
【請求項25】
前記ソフトウェアプログラムによって前記実行中に実行された複数の命令に関するデータを複数のチャンクに従って成する手段を備え、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す、請求項24に記載のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
マルチコアプロセッサ技術の出現により、並列プログラミングが普及した。しかしながら、並列プログラムの非決定的本質により、同一の入力がなされた同じ複数の並列プログラムの複数の実行は、異なる複数の結果を生成することがある。
【0002】
複数のメモリ競合記録(MRR)技術は、記録されるべき複数のマルチスレッドプログラムの実行を可能とし、これにより、複数のメモリアクセスがインタリーブする順番をロギングする。記録は、デバッグ目的のために再生可能である。再生される場合、記録は、元の実行によって取得されたものと同じ複数の結果を生成する。複数のポイントツーポイントMRR技術は、複数のメモリアクセスインタリービングを個々の複数の共有メモリ命令レベルで追跡するが、複数のチャンクベース技術は、アトミックに(例えば、コンフリクトするリモートメモリアクセスをインタリービングすることなく)実行するメモリオペレーションの数を観察することによって、複数のメモリアクセスインタリービングを追跡する。
【図面の簡単な説明】
【0003】
本明細書で説明された複数の概念は、例として示されるものであり、添付の複数の図において限定として示されるものではない。例示の簡略化及び明瞭化のため、複数の図に示される複数の要素は、必ずしも縮尺に従って表されていない。適切とみなされる場合には、複数の参照符号は、複数の対応するまたは類似の要素を示すために、複数の図の間で反復されている。
図1】マルチスレッドソフトウェアプログラムの実行の性能及び/または正確性の特徴を視覚化するシステムの少なくとも1つの実施形態の簡略化されたブロック図である。
図2図1の視覚化システムの少なくとも1つの実施形態の簡略化されたブロック図である。
図3図2の動的再生モジュールの少なくとも1つの実施形態の簡略化されたブロック図である。
図4】マルチスレッドソフトウェアプログラムの実行に関する複数のログファイルの簡略化された図である。
図5】マルチスレッドソフトウェアプログラムもの記録された実行の性能及び/または正確性の特徴を視覚化する方法の少なくとも1つの実施形態の簡略化されたフロー図である。
図6】記録されたソフトウェアプログラム実行データを視覚化のために準備する方法の少なくとも1つの実施形態の簡略化されたフロー図である。
図7】マルチスレッドソフトウェアプログラムの記録された実行の視覚化を制御する方法の少なくとも1つの実施形態の簡略化されたフロー図である。
図8】マルチスレッドソフトウェアプログラムの記録された実行の視覚化をグラフィカルに与える方法の少なくとも1つの実施形態の簡略化されたフロー図である。
図9】マルチスレッドソフトウェアプログラムの記録された実行のグラフィカルな視覚化の少なくとも1つの実施形態の簡略化された図である。
図10図9のグラフィカルな視覚化が「ズームアウト」されたバージョンの簡略化された図である。
図11図9のグラフィカルな視覚化が「ズームイン」されたバージョンの簡略化された図である。
【発明を実施するための形態】
【0004】
本開示の複数の概念は、様々な複数の改良及び複数の代替形式に容易に想到するが、それらの具体的な複数の実施形態は、例として複数の図面において示されており、本明細書において詳細に説明される。
【0005】
しかしながら、本開示の複数の概念を開示された特定の複数の形式に限定する意図はなく、反対に、本開示及び添付された特許請求の範囲に一致する全ての改良、均等物及び代替物を包含することを意図することが理解されるべきである。明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が特定の特徴、構造または特性を含み得るが、各実施形態が当該特定の特徴、構造または特性を含んでもよく、または必ずしも含まないこともあることを示す。さらに、このような複数の表現は、必ずしも同じ実施形態を参照するものではない。さらに、特定の特徴、構造または特性が、ある実施形態と関連して説明される場合、明示的に説明されているか否かに関わらず、このような特徴、構造または特性を他の複数の実施形態と関連してもたらすことは、当業者の知識の範囲内にあるとされる。
【0006】
複数の開示された実施形態は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせで実装されてもよい。複数の開示された実施形態は、1つまたは複数のプロセッサによって読み出し及び実行可能な一時的または非一時的機械可読(例えば、コンピュータ可読)記憶媒体によって伝達され、またはこれに格納される複数の命令としてさらに実装されてもよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、または機械によって可読な形式で情報を格納または送信するための他の物理的構造(例えば、揮発性または不揮発性メモリ、メディアディスクまたは他のメディアデバイス)として具現化されてもよい。
【0007】
複数の図面において、いくつかの構造または方法の特徴は、複数の具体的な構成及び/または複数の順番で示されてもよい。しかしながら、このような複数の具体的な構成及び/または複数の順番が必要とされなくてもよいことが理解されるべきである。むしろ、いくつかの実施形態において、このような特徴は、例示的な複数の図において示されるものとは異なる態様及び/または順番で構成されてもよい。さらに、特定の図において構造または方法の特徴を含むことは、このような特徴が全ての実施形態で必要とされることを示唆することを意味するものではなく、いくつかの実施形態においては、含まれなくてもよく、または、他の複数の特徴と組み合わせられてもよい。
【0008】
ここで図1を参照すると、いくつかの実施形態において、マルチスレッドソフトウェアプログラム126の実行を視覚化するシステム124は、以下にさらに詳細に説明されるように、ソフトウェアプログラム126の実行中にチャンクベースのメモリ競合レコーダ118によって生成された複数のログファイル130に基づいて、複数の命令トレース132を準備し、プログラマまたはソフトウェアアナリストのような視聴者に対して、記録された実行のアニメーション化されたグラフィカル表示134を、ディスプレイ120上に表示する。アニメーション化されたグラフィカル表示134は、複数の形状及び複数の色のような複数の視覚的特徴を含み、これらは、ソフトウェアプログラム126の記録された実行の性能及び正確性の特徴を強調表示するように構成される。本明細書で用いられるように、用語「強調表示」は、視聴者の眼において性能及び正確性の特徴に対する注意を呼び起こすように機能し得る複数の視覚的特徴の任意の構成または組み合わせを意味する。例えば、いくつかの実施形態において、記録された実行の複数のスレッドの複数の視覚的特徴は、全て同じ状況で表示される。使用時において、以下さらに詳細に説明されるように、視覚化システム124は、例えば、1つまたは複数のユーザ制御122による視聴者からの入力に応じて、アニメーション化されたグラフィカル表示134の表示をインタラクティブに調節する。例えば、いくつかの実施形態において、システム124は、視聴者が、倍率を増減させる(例えば、「ズームイン」または「ズームアウト」)、アニメーションのスピードを増減させる(例えば、「早送り」または「巻き戻し」)、またはグラフィカル表現134を回転させることを可能とする複数のインタラクティブ制御を与える。同じ状況において複数のスレッドの全ての同時実行の実行をグラフィカルに示すことによって、視覚化システム124は、実行の単なるテキスト表現からは識別困難または不可能な性能及び/または正確性の特徴をソフトウェア開発者が識別する助けとなり得る態様で、視覚化されるべき複数のスレッド間の複数のインタラクションを可能とする。
【0009】
コンピューティングデバイス100は、アニメーション化されたグラフィカル情報を視聴者に表示し、本明細書で説明される複数の機能を実行する任意のタイプのコンピューティングデバイスとして具現化されてもよい。1つのコンピューティングデバイスが図1に示されるが、複数の他の実施形態においては、システム124は、複数のコンピューティングデバイス100で具現化されてもよいことを理解されたい。例示的なコンピューティングデバイス100は、プロセッサ110、メモリ112、入出力サブシステム114、データストレージデバイス116、メモリ競合レコーダ118、ディスプレイ120、複数のユーザ制御122、視覚化システム124及びソフトウェアプログラム126を含む。勿論、コンピューティングデバイス100は、他の実施形態において、コンピュータにおいて一般的に見られるもの(例えば、様々な複数の入出力デバイス)のような他のまたは追加的な複数のコンポーネントを含んでもよい。さらに、いくつかの実施形態において、例示的な複数のコンポーネントのうち1つまたは複数は、他のコンポーネントに組み込まれ、またはその一部であってもよい。例えば、メモリ112またはそれらの一部は、いくつかの実施形態において、プロセッサ110に組み込まれてもよい。
【0010】
プロセッサ110は、現在知られているまたは将来開発される任意のタイプのプロセッサとして具現化され、本明細書で説明される複数の機能を実行可能であってもよい。例えば、プロセッサは、シングルまたはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラ、または他のプロセッサもしくは処理/制御回路として具現化されてもよい。同様に、メモリ112は、現在知られているまたは将来開発される任意のタイプの揮発性もしくは不揮発性メモリまたはデータストレージとして具現化され、本明細書で説明される複数の機能を実行可能であってもよい。動作時において、メモリ112は、システム124の動作中に用いられる複数のオペレーティングシステム、複数のアプリケーション、複数のプログラム、複数のライブラリならびに複数のドライバのような様々なデータ及びソフトウェアを格納してもよい。メモリ112は、I/Oサブシステム114を介して、プロセッサ110と通信可能に連結されてもよく、これは、コンピューティングデバイス100のプロセッサ110、メモリ112及び複数の他のコンポーネントとの入出力動作を容易にする回路及び/または複数のコンポーネントとして具現化されてもよい。例えば、I/Oサブシステム114は、複数のメモリコントローラハブ、複数の入出力制御ハブ、複数のファームウェアデバイス、複数の通信リンク(すなわち、ポイントツーポイントリンク、バスリンク複数の有線、複数のケーブル、複数の光ガイド、複数のプリント回路基板トレース等)及び/または複数の入出力動作を容易にする複数の他のコンポーネント及びサブシステムとして具現化されてもよく、または、これらを含んでもよい。いくつかの実施形態において、I/Oサブシステム114は、システムオンチップ(SoC)の一部を形成してもよく、プロセッサ110、メモリ112及びコンピューティングデバイス100の複数の他のコンポーネントと共に、単一の集積回路チップに組み込まれてもよい。
【0011】
データストレージ116は、例えば、メモリデバイス及び回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブまたは他の複数のデータストレージデバイスのようなデータの短期間または長期間ストレージのように構成される任意のタイプのデバイスまたは複数のデバイスとして具現化されてもよい。例示的な実施形態において、視覚化システム124及び/またはメモリ競合レコーダ118は、複数のMRRログファイル130、複数の命令トレース132、グラフィカル表現134、それらの一部及び/または他の情報をデータストレージ116に含むプログラム実行データ128を維持してもよい。以下、さらに詳細に説明されるように、複数のログファイル130及び複数の命令トレース132は、グラフィカル表現134を形成するために用いられてもよい。プログラム実行データ128の一部は、ディスプレイ120上における表示を可能にする任意のタイプのデジタルデータとして具現化されてもよい。例えば、プログラム実行データ128の一部は、バイナリコード、機械またはアセンブリレベルのコード、テキスト、グラフィック及び/または他のタイプのコンテンツとして具現化されてもよい。プログラム実行データ128の一部は、複数のデジタルファイル、複数のアレイ、複数のデータベース、複数のテーブル及び/または他の適切な複数のデータ構造に格納されてもよい。
【0012】
メモリ競合レコーダ118は、チャンクベースの態様でマルチスレッドソフトウェアプログラムの実行を記録する任意の適切なタイプのシステムとして具現化されてもよい。例えば、メモリ競合レコーダ118は、ハードウェアまたはソフトウェアシステム、例えば、プロセッサ110のアーキテクチャで実装されるハードウェアシステムとして具現化されてもよい。メモリ競合レコーダ118は、後で決定的な再生を行うために、マルチスレッドソフトウェアプログラム126の実行を記録する。メモリ競合レコーダ118は、記録された実行が再生される場合、それが元の実行中に記録されたときと同様に再現されるように構成される。このために、メモリ競合レコーダ118は、複数のスレッドにわたって、これらのスレッドが再生中に元の実行と同様に再同期され得るように、複数のメモリアクセスインタリービングを記録する。メモリ競合レコーダ118は、複数のメモリアクセスがインタリーブする順番のログを取る。
【0013】
上述されたように、メモリ競合レコーダ118は、コンフリクトする共有メモリの依存関係を介在させることなく実行可能なメモリオペレーションの数を観察することによって、複数のメモリアクセスインタリービングを追跡するために、チャンクベースのアプローチを用いる。「チャンク」は、別々に、すなわち、他のスレッドからの複数のコンフリクトするメモリアクセスとの一切のインタリービングなしに、実行する複数の命令のブロックを表す。換言すると、チャンクは、複数のスレッド間でコンフリクトを生じさせる複数の隣接キャッシュコヒーレンシ要求の間で生じる複数の共有メモリアクセスをキャプチャする。共有メモリは、例えば、複数の異なるプロセッサ、または複数のコアを有するプロセッサにおける複数のプロセッサコアによってアクセス可能なメモリ(例えば、ランダムアクセスメモリまたはRAM)を指す。共有メモリシステムは、多くの場合、キャッシュメモリの利用を含む。キャッシュコヒーレンシは、複数のキャッシュのうちの1つが複数の他のプロセッサまたは複数のコアによって用いられ得る情報によって更新される場合はいつも、全てのプロセッサまたはプロセッサコアによって用いられるキャッシュメモリを更新する必要性を指す。そこで、「コンフリクト」または「依存関係」は、例えば、プロセッサが共有メモリに格納された情報にアクセスする必要があるが、他のプロセッサによって共有メモリに書き込まれたデータによってそのキャッシュが更新されるまで待たなければならない場合に生じ得る。さらに、チャンクベースのメモリ競合記録の説明は、例えば、MICRO '09, Association of Computing Machinery (ACM), December 12−16, 2009に掲載されたPokam et al., Architecting a Chunk−based Memory Race Recorder in Modern CMPsに見られる。
【0014】
コンピューティングデバイス100のディスプレイ120は、任意の1つまたは複数の表示スクリーンとして具現化されてもよく、ここで、視聴者に対して情報が表示されてもよい。ディスプレイは、例えば、インタラクティブディスプレイ(例えば、タッチスクリーン)、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、陰極線管(CRT)ディスプレイ、プラズマディスプレイ及び/または現在知られているまたは将来開発される他の表示技術を含む、任意の適切な表示技術として具現化されてもよく、またはこれらを用いてもよい。単一のディスプレイ120のみが図1に示されるが、コンピューティングデバイス100は、同じまたは異なるコンテンツが同時にまたは互いに連続して表示可能な複数のディスプレイまたは表示スクリーンを含んでもよいことを理解されたい。ユーザ制御122は、視聴者が例えばグラフィカル表現134の表示を調節することによってアクティブ化され得る、任意の1つまたは複数の物理または仮想制御として具現化されてもよい。ユーザ制御122は、例えば、物理または仮想(例えば、タッチスクリーン)キー、キーボードまたはキーパッド、マウス、物理または仮想ボタン、スイッチ、スライド、ダイヤル等を含む、現在知られているまたは将来開発される任意の適切なユーザ制御技術として、また、音声またはジェスチャによってアクティブ化される制御のような非触覚制御として、具現化されてもよい。ソフトウェアプログラム126は、任意のタイプのマルチスレッドまたは「並列」機械実行可能ソフトウェアプログラムとして具現化されてもよく、その実行は、メモリ競合レコーダ118によって記録可能である。用語「マルチスレッド」は、概して、複数のスレッドが独立して、例えば、複数の異なるプロセッサまたはコアで実行することを可能とするプログラミング技術を用いて実装されるソフトウェアプログラムを指し、ここで、「スレッド」は、複数のプログラミング命令の小さいシーケンスを指し、複数の異なるスレッドは、用いられる同期のタイプ(例えば、ロック、トランザクションメモリまたはいくつかの他の同期技術)に関わらず、共有メモリにアクセスすることができる。例えば、視覚化システム124は、用いられる同期のタイプに応じて、複数の共有メモリ依存コンフリクト及び/または複数の同期コンテンションを視覚化することができる。トランザクションメモリを視覚化するシステムの例は、PACT '12, Association of Computing Machinery (ACM), September 19−23, 2012に掲載されたGottschlich, et al., Visualizing Transactional Memoryにおいて説明されている。
【0015】
ここで図2を参照すると、視覚化システム124の実施形態200は、構文解析モジュール210及び動的再生モジュール212を含む。構文解析モジュール210及び動的再生モジュール212は、例えば、複数の機械実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして各々具現化されてもよい。構文解析モジュール210は、複数のMRRログファイル130を読み出し、そこからソフトウェアプログラム126の元の実行、例えば、メモリ競合レコーダ118に記録された実行の情報を抽出する。
【0016】
このような情報は、例えば、全てのスレッドの各チャンクにおけるプログラム命令の数及び複数のチャンクの順番を含んでもよい。図4に示されるように、複数のログファイル130は、共有メモリの順番の複数の依存関係を、ソフトウェアプログラム126の元の実行中にこれらが生じた順番で含んでもよい。例えば、チャンクベースのメモリ競合記録の結果として、ログファイル130は、各スレッドに対して形成されてもよい。各ログファイルは、その対応するスレッドにおいて実行する複数のチャンクの実行順番を示し、ソフトウェアプログラム126の元の記録された実行中に、全てのスレッドにおける全てのチャンクの実際の実行順番を示す複数の命令ポインタを含み、またはこれらを参照する。複数のログファイル130からのチャンク順番情報は、アニメーション化されたグラフィカル表示134が表示される場合に、複数のチャンクの元の実行順番を保持するために用いられる。複数のログファイル130は典型的には複数のバイナリファイルであることから、構文解析モジュール210は、そこから複数の命令トレース132を形成し、これらは、複数のログファイル130から抽出された情報の、本質的に人間が読み取り可能な複数の表現である。
【0017】
複数の命令トレース132は、動的再生モジュール212への入力として用いられる。動的再生モジュール212は、アニメーション化されたグラフィカル表示134を形成し、視聴者に対してこれをインタラクティブに提示するために、ディスプレイ120及びユーザ制御122とのインタフェースを取る。ここで図3を参照すると、動的再生モジュール212は、多数の機械実行可能命令、モジュール、ルーチン、ロジックユニットまたはハードウェアユニットもしくはデバイスとして具現化されてもよく、これは、リアルタイムコントローラモジュール310、命令シミュレーションモジュール312、グラフィカルモデラー314及びユーザ入力コントローラ316を含む。グラフィカルモデラー314は、視聴者からの要求に応じて、最初にグラフィカル表現134を形成し、その後これを(例えば、オフライン)再生する。
【0018】
リアルタイムコントローラ310は、これに関連付けられた視覚化パラメータ340に基づいて、グラフィカル表現134のアニメーション化された表示を制御する。視覚化パラメータ340は、例えば、再生方向、レート、倍率及び/または向きを含んでもよい。すなわち、全てのプログラム実行データを一度に視聴するのではなく、リアルタイムコントローラ310は、記録された実行が元の実行のスピードまたはレートで「リアルタイム」に「再生」されることを可能にする。さらに、リアルタイムコントローラ310は、それが元のプログラム実行を再生する方向(例えば、前または後ろへ)、倍率、向き(例えば、回転)及び/またはレートもしくはスピードを調節することができることにより、視聴者は、例えば、これらの展開に従って生じる複数のイベントを観察し、再生を減速し、複数の関心領域により大きい注意を払い、または無関係なまたは重要性の低い複数の領域をスキップするために再生スピードを上げることが可能となる。リアルタイムコントローラ310自体は、ユーザ入力コントローラ316とのインタフェースを取ることにより、アニメーション化されたグラフィカル表示134の提示の複数の変更に関する視聴者の複数の要求を処理する。
【0019】
リアルタイムコントローラ310は、命令シミュレーションモジュール312とインタフェースを取ることにより、記録された実行の間に実行された複数の命令に対応するテキストの表示を制御し、グラフィカルモデラー314とインタフェースを取ることにより、ユーザ入力コントローラ316によって受信された入力に応じて、グラフィカル表現134の表示を制御する。ユーザ入力コントローラ316は、ユーザ制御122のアクティブ化又は非アクティブ化を検出し、リアルタイムコントローラ310及びグラフィカルモデラー314によって実行され得るこれらのユーザアクションを、必要に応じて複数の命令に変換する。例えば、視聴者がディスプレイ120上で「+」グラフィカル制御をタップしたことをユーザ入力コントローラ316が検出した場合、ユーザ入力コントローラ316は、再生スピードを上昇させるようリアルタイムコントローラ310に命令してもよい。同様に、ユーザが拡大鏡アイコンをタップした、または特定のジェスチャ(例えば、親指及び人差し指を互いから離すように動かす)を行ったことをユーザ入力コントローラ316が検出した場合、ユーザ入力コントローラ316は、グラフィカル表現134の倍率を上昇させるようグラフィカルモデラー314に命令してもよい。
【0020】
グラフィカルモデラー314は、アニメーションロジックモジュール320及びグラフィックレンダリングモジュール322として具現化されてもよい。アニメーションロジックモジュール320は、グラフィカル表現134の複数の視覚的特徴が示されるレート(例えば、更新レート)を制御することにより、グラフィカル表現134のアニメーションを与える。例えば、いくつかの実施形態において、更新レートは、毎秒約50フレームまたは他の適切なレートの範囲にあることにより、元の実行をリアルタイムにシミュレーションする態様でグラフィカル表現134を与えてもよい。グラフィックレンダリングモジュール322は、最初に、命令トレース132によって与えられたテキスト情報に基づいてグラフィカル表現134を展開させ、視覚化パラメータに従って、ユーザ入力コントローラ316によって時々調節または更新され得るように、グラフィカル表現134を表示する。グラフィックレンダリングモジュール322は、例えば、複数の多角形レンダリング技術及び/または複数の他の適切な技術を適用することにより、グラフィカル表現134をディスプレイ120に表示してもよい。
【0021】
マルチスレッドソフトウェアプログラム126の元の記録された実行のグラフィカル表現134は、アレイ、コンテナ、テーブル、ハッシュ、またはそれらの組み合わせもしくは複数のようなデータ構造に格納される。グラフィカル表現134は、元の実行の間に実行された複数のスレッド330、複数のスレッド330の各々によって実行された複数のチャンク332、及びこれらが実行された順番、複数のチャンク332の各々に関連付けられた複数の機械実行可能命令334、複数の命令334の各々に関連付けられた複数の実行時間336(絶対値であっても相対値であってもよい)、複数のスレッド330、複数のチャンク332及び複数の命令334の各々に関連付けられた複数の視覚的特徴338、及びグラフィカル表現134に関連付けられた複数の視覚化パラメータ340に関するデータを含む。視覚的特徴338は、例えば、複数の異なるスレッド330に関連付けられた複数の異なる色を含んでもよい。視覚的特徴338は、例えば、各チャンク332に関連付けられた複数の形状のような複数のグラフィックをさらに含んでもよい。例えば、所与のチャンク332に対して、視覚的特徴338は、チャンク332における命令334の数及び/またはチャンク332における全ての命令334の合計実行時間によって定義されてもよい。図9−11の複数の例示的な視覚化において、例えば、複数の視覚的特徴338は、複数の矩形のバーを含み、各バーの垂直高さは(例えば、複数のバーが視点または倍率に関わらず視認可能となるように)一定である。複数の他の実施形態において、複数のバーの垂直高さは、可変である。例えば、垂直高さは、チャンク332における命令の数によって、または、プログラム実行のいくつかの他の動的署名に基づいて、定義されてもよい。各バーの水平長さは、チャンク332における複数の命令334の合計実行時間によって定義される。また、図9−11において、複数の異なるスレッドに関連付けられた複数のチャンクは、複数の異なる色で表示され、同じスレッドに関連付けられた全てのチャンクは、同じ色で表示される。複数の視覚化パラメータ340は、グラフィカル表現134の再生レート及びクロック時、(視覚化のサイズを正規化するために使用可能な)記録されたプログラム実行の合計サイズ、及び/または上述されたような複数のユーザ定義パラメータに関するデータを含んでもよい。
【0022】
ここで図5を参照すると、複数の実行可能命令、複数のモジュールまたは複数のルーチンとして実装され、コンピューティングデバイス100、例えば、視覚化システム124によって実行され得る方法500が示される。予めブロック510において、マルチスレッドソフトウェアプログラム126は、メモリ競合レコーダ118と関連して実行されることにより、複数のログファイル130を生成する。ブロック510において複数の破線で示されるように、いくつかの実施形態において、この処理は、視覚化システム124の外部で実行可能である。命令トレース132は、ブロック512において、複数のログファイル130を構文解析することによって形成される。ブロック514において、ソフトウェアプログラム実行のグラフィカルな視覚化(例えば、グラフィカル表現134)は、複数の命令トレース132に基づいて形成される。ブロック516において、コンピューティングデバイス100は、視覚化を再生する要求が(例えば、ユーザ入力コントローラ316によって)受信されたか否かを判断する。受信されなかった場合、コンピューティングデバイス100は、終了する、またはこのような要求を待つ。要求が受信された場合、コンピューティングデバイス100は、ブロック518に進み、ここで、視覚化パラメータ340は、(例えば、グラフィカル表現134にアクセスすることによって、及び/または、ユーザ入力によって)決定され、視覚化は、ディスプレイ120上で再生される。ブロック520において、視覚化をさらに再生する間に、コンピューティングデバイス100は、新たなまたは変更された視覚化パラメータが(例えば、ユーザ入力コントローラ316によって)受信されたか否かを判断する。受信されなかった場合、コンピューティングデバイス100は、現在の複数の視覚化パラメータを用いて視覚化の再生を継続し、新たなまたは変更されたパラメータを待ち続ける。新たなまたは変更された視覚化パラメータが受信された場合、方法は、ブロック522に進み、ここで、コンピューティングデバイス100は、ブロック520で取得された新たなまたは変更された視覚化パラメータに基づいて視覚化の再生を変更し、視覚化の最後に達する、または視聴者が再生を閉じるまたは終了させるまで、新たなまたは変更されたパラメータを用いて視覚化の再生を継続する。
【0023】
ここで図6を参照すると、方法600が示されるが、これは、例えば、複数の実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして実装されてもよく、コンピューティングデバイス100、例えば構文解析モジュール210によって実行されてもよい。ブロック610において、コンピューティングデバイス100は、アクティブなスレッドトラッカを初期化する。アクティブなスレッドトラッカは、例えば、ポインタ、または、アクティブなスレッドの変化に併せてその値が変化する変数として具現化されてもよい。アクティブなスレッドトラッカは、現在のチャンクに関連付けられたスレッドのトラックを保持する。同様に、現在のスレッドトラッカは、現在読み出されている命令に関連付けられたスレッドのトラックを保持する。例えば、コンピューティングデバイス100が、命令トレース132の始めに第1の命令を現在読み出している場合、アクティブなスレッドトラッカ及び現在のスレッドトラッカの値は同じとなる。コンピューティングデバイス100が次に第1の命令と同じスレッドに関連付けられた命令を読み出す場合、アクティブなスレッドトラッカ及び現在のスレッドトラッカの値はさらに同じとなる。しかしながら、第2の命令が第1の命令と異なるスレッドに関連付けられる場合、現在のスレッドトラッカの値は新たなスレッドを反映するように変更する。
【0024】
ブロック612において、コンピューティングデバイス100は、命令トレース132から次の命令を読み出す。ブロック612において読み出される命令ラインは、視覚化システム124が命令のテキストを及びグラフィカルシミュレーションを形成するために必要とする命令に関する情報、例えば、命令型、ニーモニックストリング、複数のメモリ動作及び複数の引数を含む。コンピューティングデバイス100が命令トレース132の最後の命令を読み出した場合(ブロック614)、ブロック616において、コンピューティングデバイス100は、(最後の命令がその一部である)最後のチャンクのための情報をアクティブなスレッドアレイに追加する。アクティブなスレッドアレイは、プログラム実行の視覚化のために必要なチャンクベースの情報を格納する。コンピューティングデバイス100がファイルの最後に到達していない場合、ブロック618において、コンピューティングデバイス100は、現在読み出されている命令ラインが現在アクティブなスレッドまたは新たなスレッドに関連付けられているか否かを確認する。このために、コンピューティングデバイス100は、アクティブなスレッドトラッカの値を現在のスレッドトラッカの値と比較してもよい。現在読み出されている命令ラインが新たなスレッドに関連付けられている場合、ブロック620および622において、コンピューティングデバイス100は、現在のチャンク(例えば、前に読み出された命令が属するチャンク)をアクティブなスレッドアレイに追加し、新たなスレッドのために必要に応じてスレッドコンテナを動的にサイズ変更し、新たなスレッドのためにコンテナを初期化し、アクティブなスレッドトラッカを更新することにより、新たなスレッドがここでアクティブなスレッドとなったことを示す。スレッドコンテナは、実行されたスレッドの全てのデータを保持するデータストアである。スレッドコンテナの動的なサイズ変更は、コンピューティングデバイス100が、予めその情報を知ることなく、任意の数の様々なサイズのスレッドを処理することを可能とする。換言すると、いくつかの実施形態において、コンピューティングデバイス100は、記録されたプログラム実行に含まれるスレッドの数及びそれらのサイズを予め知ることなく、命令トレース132を削減する。結果として、コンピューティングデバイス100は、複数の命令トレース132を一度読み出すことのみを必要とする。
【0025】
現在の命令ラインが新たなスレッドまたは前に読み出された命令ラインと同じスレッドを含む場合、コンピューティングデバイス100は、ブロック618またはブロック622から、場合によってはブロック624に進む。ブロック624において、コンピューティングデバイス100は、視覚化に必要な命令情報を準備する命令を処理する。ブロック626において、コンピューティングデバイス100は、命令型を設定し、その命令型に基づいて、シミュレーションされた命令実行時間を判断する。例えば、複数の「ロード」命令は、複数の「格納」命令の2倍高速である実行時間を有するとして定義されてもよい。他の複数のタイプの複数の命令は、同じまたは同様の実行時間を有してもよい。いくつかの実施形態において、複数の命令の複数の実行時間は、上述されたように、複数の視覚的特徴338の長さを判断するために用いられる。
【0026】
ブロック628において、コンピューティングデバイス100は、命令トレース132から読み出された命令ラインに基づいて、現在の命令の命令ポインタ値を設定する。命令ポインタ値は、いくつかの実施形態において、視聴者が視覚化の間に、命令トレース132の命令ラインに関連付けられた実際の逆アセンブルされたバイナリコード(例えば、ログファイル130において)を再び参照することを可能とするように用いられる。これは、デバッグ目的及び/または他の複数の理由のために有用たり得る。ブロック630において、コンピューティングデバイス100は、命令トレース132に与えられた情報に基づいて、現在の命令に関連付けられたニーモニックストリングを設定する。例えば、ログファイル130は現在の命令のバイナリ表現を含み得るが、ニーモニックは、例えば、アセンブリコードまたはソースコードで使用可能なように、バイナリオペランドを人間が読み取り可能にしたもの(例えば、「ストア」、「ロード」、「ジャンプ」等)に相当する。ニーモニックは、多くの場合、コンピューティングデバイス100にインストールされたオペレーティングシステムに与えられる変換テーブルまたは標準的な逆アセンブラユーティリティを用いて判断可能である。現在の命令に関する前述の情報の全てを用いることにより、コンピューティングデバイス100は、命令情報を現在のチャンクのデータストアまたはコンテナに挿入するように進む。上述されたように、視覚化に必要な前述の情報は、チャンクによって構成され、次に、チャンクベースの情報は、スレッドアレイに格納され、視覚化処理(例えば、動的再生モジュール212)への入力として機能する。いくつかの実施形態において、スレッドアレイは、グラフィカル表現134に格納されてもよく、またはその一部であってもよい。
【0027】
ここで図7を参照すると、方法700が示されるが、これは、例えば、複数の実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして実装されてもよく、コンピューティングデバイス100、例えばリアルタイムコントローラ310によって実行されてもよい。ブロック710において、コンピューティングデバイス100は、マルチスレッドソフトウェアプログラムの前に記録された実行(例えば、グラフィカル表現134)の視覚化を再生する要求を処理する。このような要求は、複数のユーザ制御122のうち1つまたは複数により、視聴者によって開始されてもよく、上述されたように、ユーザ入力コントローラ316によって変換されてもよい。いくつかの実施形態において、要求は、再生レート、再生方向、再生の向き、及び/または、上述されたように、他の複数の視覚化パラメータを含んでもよい。ブロック712において、コンピューティングデバイス100は、視覚化の再生が現在一時停止されているか否かを判断する。再生が一時停止されている場合、コンピューティングデバイス100は、ブロック714において、視覚化がプログラム実行の再生を終了したか否かを判断する。換言すると、コンピューティングデバイス100は、記録された実行の間に実行された最後の命令に対する複数の視覚的特徴338が表示されているか否かを判断する。最後の命令が表示されている場合、ブロック716において、コンピューティングデバイス100は、シミュレーションされたクロック値及び最後のクロック値をリセットする。シミュレーションされたクロック値は、視覚化のクロック時全体、すなわち、再生開始からの経過時間のトラックを保持する。最後のクロック値は、実行ストリーミングにおいて、現在表示されているポイントのクロック値、例えば、元のシミュレーション中に命令が実行されたクロック時のトラックを保持する。トラックを保持し、複数の視聴者の入力に応じてこれらのクロック値を調節することは、コンピューティングデバイス100が呼び出された回数に関わらず、システム124が視聴者にプログラム実行中に経過した時間の正確な知覚を与えることを可能とする。再生実行の終了に達した場合、ブロック718において、最後の視覚化要求(例えば、最後の視聴者の入力)からの経過時間が算出される。ブロック720において、コンピューティングデバイス100は、要求が、前へまたは逆方向への再生のいずれに対するものであるかを判断する。ブロック722および724において、コンピューティングデバイス100は、シミュレーションされたクロックを適切に調節(例えば、クロック時を増減)する。シミュレーションされたクロックは、最後の視覚化要求から経過した時間の量及びクロックレートに基づいて調節される。クロックレートは、シミュレーションのスピードに対応し、上述されたように、視聴者によって調節可能である。例えば、いくつかの実施形態において、クロックレートは、10倍(現在のクロックレートの10倍)のような大きさのオーダで増減可能である。前述によれば、コンピューティングデバイス100は、視覚化の間に、視覚化が一時停止、前進または後退しているか、選択された再生レートまたは倍率に関わらず、クロック時の正確な図を表示することを目的とする。
【0028】
ここで図8を参照すると、方法800が示されるが、これは、例えば、複数の実行可能命令、複数のモジュール、複数のルーチン、複数のロジックユニットまたは複数のハードウェアユニットもしくはデバイスとして実装されてもよく、コンピューティングデバイス100、例えば、グラフィカルモデラー314及び/またはリアルタイムコントローラ310によって実行されてもよい。ブロック810において、コンピューティングデバイス100は、グラフィックレンダリング処理が既に初期化されているか否かを判断する。されていない場合は、視覚化全体のサイズ(例えば、記録されたプログラム実行全体のグラフィカル表現134)が正規化され、ブロック812において、個々の命令に対して多角形のサイズが決定される。視覚化サイズの正規化は、記録されたソフトウェアプログラム126の合計実行時間に関わらず、システム124が、視覚化を表示することを可能にする。すなわち、視覚化ルーチンは、複数の視覚的特徴338の合計サイズ(例えば、複数の長方形の長さ)を算出し、それを合計実行時間にわたって均等に割って、プログラム実行の長短に関わらず、要求された場合には、システム124が視覚化全体を常に表示できるようにする。これらの値は、いくつかの実施形態において、グラフィカル表現134に、またはその一部として格納されてもよい。ブロック814において、コンピューティングデバイス100は、各スレッドの表示動作、例えば、個別のスレッドに割り当てられた色で、ディスプレイ120上に適用可能な多角形の描画を実行する。このために、コンピューティングデバイス100は、ブロック816において、各チャンクと関連して表示するためにクロック値を算出し、ブロック818において、チャンクの全てまたはその一部を表示するために、クロック値がシミュレーションされたクロック時より小さいか否かを判断する。換言すると、コンピューティングデバイス100は、ブロック820において、それが現在のチャンクの全てまたはその一部を表示可能か否かを判断する。不可能な場合、チャンクは、表示されない。しかしながら、その場合、ブロック820において、コンピューティングデバイス100は、上述された複数の視覚化パラメータに従って、適用可能なクロック時を前提に、チャンクの全てまたは表示可能な一部を表示する。例えば、現在のチャンクの複数の命令の全てが現在のシミュレーションされたクロック時より小さいクロック値を有する場合、チャンク全体に対する複数の視覚的特徴338が表示される。しかしながら、このようなクロック時がシミュレーションされたクロック時より大きい場合、コンピューティングデバイス100は、シミュレーションされたクロック時に達するまで、1つの命令に対する複数の視覚的特徴338を一度に表示する。ブロック822において、コンピューティングデバイス100は、必要に応じて、シミュレーションされたクロックをオーバーフローまたはアンダーフローのために再調整する。前への再生実行が実行における最後の命令を超えた場合、オーバーフローに達し、後ろへの再生実行が実行における第1の命令を超えた場合に、アンダーフローに達する。
【0029】
ここで図9−11を参照すると、例えば、ディスプレイ120に表示され得るマルチスレッドソフトウェアプログラムの記録された実行の例示的な視覚化が、示される。視覚化900は、テキスト命令シミュレーション910を示し、これは、上述された人間が読み取り可能なバージョンの命令情報を含む。テキスト命令シミュレーション910において、命令ライン918は、強調表示される(例えば、残りのテキストと異なる色で示される)ことにより、それがシミュレーション中で現在実行されている命令であることを示す。視覚的特徴912、914および916は、一連の矩形グラフィックとして具現化され、ここで、特徴912、914、916の各々の色は、複数の命令が実行されたスレッドを示す。例えば、特徴912は、緑色に示されることにより、スレッド#1との関連を示してもよく、特徴914は、青色で示されることにより、スレッド#2との関連を示してもよく、特徴916は、黄色で示されることにより、スレッド#3との関連を示してもよい。いくつかの実施形態において、特徴912、914、916の各々の垂直高さは、対応するスレッドによって実行された命令の数によって定義される。そこで、例えば、垂直方向により高い特徴912、914、916は、垂直方向により低い視覚的特徴912、914、916より大きい数の命令を表現してもよい。複数の他の実施形態において、特徴912、914、916の垂直高さは、他の複数の要因に基づいて可変であってもよく、または一定のままであってもよい。特徴912、914、916の各々の水平長さは、個別のスレッドによって実行された複数の命令の合計実行時間を表す。各特徴912、914、916内におけるソリッド領域の存在は、複数の命令が、コンフリクトする依存関係を有するインタリービングメモリアクセスが一切なく実行されたことを示す。よって、視覚的特徴912、914、916の各々の内部における複数のソリッド領域の各々のサイズは、一切の同期またはコヒーレンシのコンフリクト問題なしで実行された複数の命令の複数のチャンクを示す。複数のソリッド領域のより大きい複数のブロック自体は、一切の共有メモリ通信なしで動作したプログラム実行の一部であり、そこで、より大きい効率性を示す。特徴912、914、916における複数のソリッド領域の多くの交互のより小さいブロックの領域は、複数のスレッド間の共有メモリ通信を示し、これらの領域における最適化の必要を示し得る。例えば、特徴914および916の比較は、表示された時間中における、これら2つのスレッド間の多数の共有依存関係を示す。従って、視覚化900は、これらの命令によって呼び出される実際の機能(例えば、根本的なアルゴリズム)の最適化を試みることにフォーカスするのではなく、プログラマは、これらのスレッド間における複数の共有メモリ通信を低減する複数の態様を特定する、または、素な共有メモリアクセスを形成する(例えば、所与の時点には、複数のスレッドに共有メモリの別の複数の領域に強制的にアクセスさせる)複数の態様を見出す試みを行わなければならないことを示唆する。換言すると、同じ状況にある全てのスレッドに対する特徴912、914、916を(例えば、元のプログラム実行中にこれらが生じた同じ時点で)表示することによって、視覚化900は、複数の同期コンテンション問題を明らかにし、これらは、プログラム126の実行性能を改善するように対処され得る。
【0030】
図10は、図9の視覚化が「ズームアウト」された図1000の例を示し、これは、システム124が、視聴者が一歩下がってプログラム全体の実行を俯瞰し、自身の注意をフォーカスする複数の関心領域を探すことを可能とする態様を示す。図10において、視覚的特徴1010、1012および1014は、複数の異なるスレッドの実行にそれぞれ対応し、いくつかの実施形態において、複数の異なる色を用いて表示される。ボックス1016は、ユーザインタフェース制御を示し、これは、より詳細な研究のために、フォーカスまたはズームインするべき図1000の領域を選択するために、視聴者によって図1000中を移動可能である。図1000は、上述されたように、共有メモリの依存関係及び同期コンテンションを含む、性能及び正確性の特徴を特定するために、有用たり得る。図11は、図10の視覚化のボックス1016の「ズームイン」または拡大された図1100の例を示す。図1100は、複数の共有メモリコンテンションの複数の領域(例えば、領域1112、1114)を、1つの色で表示された複数のボックスで強調表示し、複数の共有メモリコンテンションの相対的に自由な複数の領域(例えば、領域1110、1116、1118)を、異なる色で表示される複数のボックスで強調表示する。このように、システム124は、視聴者がさらなる研究のために、視覚化の複数の具体的な領域を迅速に参照及び選択する助けとなり得る。例えば、視聴者は、ボックス1110、1116、1118を無視し、ボックス1112、1114をズームインすることを選択してもよい。プログラマによるプログラム126の正確性分析を支援するために、システム124は、プログラム全体の実行の視覚化(例えば、図1000)または実行の具体的なセグメント部分の視覚化(例えば、図1100)をプログラマに与えることができる。いずれの場合も、プログラマは、上述されたように、視覚化を用いることにより、複数のスレッド間の共有メモリアクセスを特定することができる。プログラマが、プログラムの特定のセグメント中に、多数のチャンクが存在することに気付いた場合、プログラマは、例えば、上述された命令ポインタ情報及び/またはプログラム実行に関連付けられた複数のデバッグ記号を用いて、これらのチャンクに関連付けられたプログラムコードの一部を検証することができる。プログラマは、次に、これらのチャンクが複数のスレッドの複数の故意のインタリービングを表すか否か、または、当該セグメント(シリアル化は、より大きいシリアル化された複数のチャンクを生じさせ得る)において、プログラムが具体的なシリアル化を欠いているか否かを判断する。換言すると、システム124は、共有メモリ依存コンフリクト及び同期コンテンションのような複数の性能特徴を特定することに加え、プログラマが、意図的な複数のインタリービングまたはそれらの欠如が正確に実装されているか否か、または、このような複数のプログラミング技術が不注意により省略されたか否かを判断することを助けることができる。
【0031】
[実施例]
本明細書に開示された複数の技術の複数の例示的な例が、後述される。複数の技術の実施形態は、後述される複数の例の任意の1つまたは複数、及び任意の組み合わせを含んでもよい。
【0032】
例1は、視覚化システムを含み、これにより、コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに表示する。視覚化システムは、視覚化のためのマルチスレッドソフトウェアプログラムの実行中に記録されるプログラム実行データを準備する構文解析モジュールと、プログラム実行データのアニメーション化されたグラフィカル表示を表示するグラフィカルモデラーとを含み、アニメーション化されたグラフィカル表示は、性能及び正確性の特徴のうち1つまたは複数を強調表示する。視覚化システムは、ディスプレイにおけるアニメーション化されたグラフィカル表示の表示をインタラクティブに制御するコントローラモジュールをさらに含む。
【0033】
例2は、例1の主題を含み、構文解析モジュールは、実行中にマルチスレッドソフトウェアプログラムによって実行された複数の命令と、複数の命令が実行された複数のスレッドとに関するデータを備える複数の命令トレースを準備する。
【0034】
例3は、例1または例2の主題を含み、構文解析モジュールは、マルチスレッドソフトウェアプログラムの実行中にチャンクベースのメモリ競合記録システムによって生成された複数のログファイルから、プログラム実行データを読み出す。
【0035】
例4は、例1−3のいずれかの主題を含み、構文解析モジュールは、複数のチャンクに従ってデータを構成し、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行された複数の命令を表す。
【0036】
例5は、例4の主題を含み、グラフィカルモデラーは、複数の視覚的特徴を表示し、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む。
【0037】
例6は、例5の主題を含み、各チャンクの各命令は、実行時間を有し、各視覚的特徴は、チャンクの複数の命令の複数の実行時間によって定義されたサイズを有する形状を含む。
【0038】
例7は、例6の主題を含み、形状のサイズは、チャンクにおける命令の数によってさらに定義される。
【0039】
例8は、例1−7のいずれかの主題を含み、グラフィカルモデラーは、プログラムの合計実行時間に基づいて、アニメーション化されたグラフィカル表示のサイズを正規化する。
【0040】
例9は、例1−8のいずれかの主題を含み、アニメーション化されたグラフィカル表示は、マルチスレッドソフトウェアプログラムの実行中に生じた共有メモリ依存コンフリクトを強調表示する。
【0041】
例10は、例1−9のいずれかの主題を含み、グラフィカルモデラーは、アニメーション化されたグラフィカル表示のオフライン再生のために、アニメーション化されたグラフィカル表示に関するデータを格納する。
【0042】
例11は、例10の主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示のオフライン再生を制御する。
【0043】
例12は、例1−11のいずれかの主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の視聴者からの入力を受信し、アニメーション化されたグラフィカル表示の表示中の入力に応じて、アニメーション化されたグラフィカル表示の表示を調節する。
【0044】
例13は、例12の主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の表示中の視聴者の入力に応じて、アニメーション化されたグラフィカル表示が表示されるスピードを増減させる。
【0045】
例14は、例12または例13の主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の表示中の視聴者の入力に応じて、アニメーション化されたグラフィカル表示の表示の倍率を変更する。
【0046】
例15は、例12−14のいずれかの主題を含み、コントローラモジュールは、アニメーション化されたグラフィカル表示の表示中の視聴者の入力に応じて、アニメーション化されたグラフィカル表示の表示を回転させる。
【0047】
例16は、コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに視覚化する方法を含む。方法は、マルチスレッドソフトウェアプログラムの実行中にチャンクベースのメモリ競合記録システムによって記録されたプログラム実行データを読み出す段階と、グラフィカルな視覚化のためにプログラム実行データを準備する段階と、プログラム実行データのアニメーション化されたグラフィカル表示を表示する段階であって、アニメーション化されたグラフィカル表示が性能及び正確性の特徴のうち1つまたは複数を強調表示する段階と、1つまたは複数の視覚化パラメータに応じてアニメーション化されたグラフィカル表示の表示を制御する段階とを含む。
【0048】
例17は、例16の主題を含み、チャンクに従ってデータを構成する段階を含み、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく、同じスレッドによって実行される複数の命令を表す。
【0049】
例18は、例17の主題を含み、複数のチャンクに関する複数の視覚的特徴を表示する段階を含み、各視覚的特徴は、同じスレッドに関連付けられた複数のチャンクが同じ色を用いて表示されるように、各チャンクを表す色を含む。
【0050】
例19は、例18の主題を含み、各チャンクの各命令は、実行時間を有し、各チャンクは、命令の数に関連付けられ、方法は、チャンクの複数の命令の複数の実行時間によって定義されるサイズを有する形状を含むように各視覚的特徴を定義する段階を含む。
【0051】
例20は、例16−19のいずれかの主題を含み、プログラム実行のサイズに基づいて、アニメーション化されたグラフィカル表示のサイズを構成する段階を含む。
【0052】
例21は、例16−20のいずれかの主題を含み、アニメーション化されたグラフィカル表示において、マルチスレッドソフトウェアプログラムの実行中に生じた共有メモリ依存コンフリクトを強調表示する段階を含む。
【0053】
例22は、例16−21のいずれかの主題を含み、アニメーション化されたグラフィカル表示の視聴者からの入力を受信する段階と、アニメーション化されたグラフィカル表示の表示中の入力に応じてアニメーション化されたグラフィカル表示の表示を調節する段階とを含む。
【0054】
例23は、コンピューティングデバイスを含み、これは、プロセッサと、プロセッサによって実行された場合にコンピューティングデバイスに例16−22のいずれかに記載の方法を実行させる複数の命令を格納するメモリとを含む。
【0055】
例24は、格納された複数の命令を含む1つまたは複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応じて、コンピューティングデバイスに例16−22のいずれかに記載の方法を実行させる。
【0056】
例25は、コンピューティングデバイスにおけるマルチスレッドソフトウェアプログラムの実行の性能及び正確性の特徴をグラフィカルに視覚化するシステムを含む。システムは、マルチスレッドソフトウェアプログラムの実行中にチャンクベースのメモリ競合記録システムによって記録されたプログラム実行データを読み出す手段と、グラフィカルな視覚化のためのプログラム実行データを準備する手段と、プログラム実行データのアニメーション化されたグラフィカル表示を表示する手段であって、アニメーション化されたグラフィカル表示は、性能及び正確性の特徴のうち1つまたは複数を強調表示する、手段と、1つまたは複数の視覚化パラメータに応じて、アニメーション化されたグラフィカル表示の表示を制御する手段とを含む。
【0057】
例26は、マルチスレッドソフトウェアプログラムの元の実行をグラフィカルに視覚化する視覚化システムのための動的再生モジュールを含む。動的再生モジュールは、マルチスレッドソフトウェアプログラムの元の実行中に記録されたプログラム実行データのグラフィカル表現の表示を制御する。動的再生モジュールは、マルチスレッドソフトウェアプログラムの元の実行のスピードをシミュレーションするために、複数の視覚化パラメータに従って、ディスプレイ上におけるプログラム実行データに関連付けられた複数の視覚的特徴を表示するグラフィカルモデラーを含む。複数の視覚的特徴は、複数の色を含み、各色は、マルチスレッドソフトウェアプログラムの複数の命令が元の実行中に実行された異なるスレッドに関連付けられる。動的再生モジュールは、コントローラモジュールをさらに含み、これは、複数の視覚的特徴の表示中に、視覚化パラメータに対して要求された変更を表示の視聴者から受信し、要求された変更に応じて、変更に係る視覚化パラメータを更新し、グラフィカルモデラーを通信を行うことにより、更新された視覚化パラメータに係る複数の視覚的特徴の表示を更新する。
【0058】
例27は、例26の主題を含み、複数の視覚的特徴は、複数のチャンクに関連付けられ、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す。
【0059】
例28は、例27の主題を含み、各チャンクの各命令は、実行時間を有し、各視覚的特徴は、チャンクの複数の命令の複数の実行時間によって定義されるサイズを有する形状を含む。
【0060】
例29は、例28の主題を含み、形状のサイズは、チャンクにおける命令の数によってさらに定義される。
【0061】
例30は、例26−29のいずれかの主題を含み、複数の視覚的特徴は、マルチスレッドソフトウェアプログラムの元の実行中に生じた共有メモリ依存コンフリクトを示す。
【0062】
例31は、例26−30のいずれかの主題を含み、コントローラモジュールは、要求された変更に応じて、複数の視覚的特徴が表示されるスピードを増減させる。
【0063】
例32は、例31の主題を含み、コントローラモジュールは、要求された変更応じて、複数の視覚的特徴の表示の倍率を変化させる。
【0064】
例33は、マルチスレッドソフトウェアプログラムの元の実行中に記録されたプログラム実行データのグラフィカル表現の表示を制御する方法を含む。方法は、ソフトウェアプログラムの元の実行のスピードをシミュレーションするために、複数の視覚化パラメータに従って、ディスプレイ上におけるプログラム実行データの複数の視覚的特徴を表示する段階を含み、複数の視覚的特徴は、複数の色を含み、各色は、マルチスレッドソフトウェアプログラムの複数の命令が元の実行中に実行された異なるスレッドに関連付けられる。方法は、複数の視覚的特徴の表示中に、視覚化パラメータに対して要求された変更を受信する段階と、要求された変更に応じて、変更に係る視覚化パラメータを更新する段階と、更新された視覚化パラメータに係る複数の視覚的特徴の表示を更新する段階とをさらに含む。
【0065】
例34は、例33の主題を含み、各視覚的特徴をチャンクに関連付ける段階と含み、各チャンクは、コンフリクトするメモリアクセスをインタリービングすることなく同じスレッドによって実行される複数の命令を表す。
【0066】
例35は、例34の主題を含み、各チャンクの各命令は、実行時間を有し、各視覚的特徴は、形状を備え、方法は、チャンクの複数の命令の複数の実行時間に基づいて形状のサイズを定義する段階を含む。
【0067】
例36は、例35の主題を含み、チャンクにおける命令の数に基づいて形状のサイズを定義する段階を含む。
【0068】
例37は、請求項33−36のいずれかの主題を含み、要求された変更に応じて、複数の視覚的特徴が表示されるスピードを増減させる段階を含む。
【0069】
例38は、請求項33−37のいずれかの主題を含み、要求された変更に応じて、複数の視覚的特徴の表示の倍率を変更する段階を含む。
【0070】
例39は、コンピューティングデバイスを含み、これは、プロセッサと、プロセッサによって実行された場合に、コンピューティングデバイスに例33−38のいずれかに記載の方法を実行させる複数の命令を格納するメモリとを含む。
【0071】
例40は、格納された複数の命令を含む1つまたは複数の機械可読記憶媒体を含み、複数の命令は、実行されたことに応じて、コンピューティングデバイスに、例33−38のいずれかに記載の方法を実行させる。
【0072】
例41は、マルチスレッドソフトウェアプログラムの元の実行中に記録されたプログラム実行データのグラフィカル表現の表示を制御するシステムを含む。システムは、ソフトウェアプログラムの元の実行のスピードをシミュレーションするために、複数の視覚化パラメータに従って、ディスプレイ上にプログラム実行データの複数の視覚的特徴を表示する手段を含み、複数の視覚的特徴は、複数の色を含み、各色は、マルチスレッドソフトウェアプログラムの複数の命令が元の実行中に実行された異なるスレッドに関連付けられる。システムは、複数の視覚的特徴の表示中に視覚化パラメータに対して要求された変更を受信する手段と、要求された変更に応じて視覚化パラメータを更新する手段と、更新された視覚化パラメータに係る複数の視覚的特徴の表示を更新する手段とさらに含む。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11