(57)【特許請求の範囲】
【請求項１】
マルチスレッド処理フレームワーク上で実行されるマルチスレッドアプリケーションのパフォーマンスを解析する方法であって、
１以上のワーカスレッドのそれぞれについてキューされたタスクの実行の頻度が閾値を超えていると判断することによって、前記マルチスレッドアプリケーションのパラレル領域の計算のオーバヘッドが前記閾値を超えていると判断するステップであって、前記マルチスレッドアプリケーションのパラレル領域は、２以上のワーカスレッドによりパラレルに実行される前記マルチスレッドアプリケーションの部分からなり、前記頻度は前記ワーカスレッドにおいて実行されるタスクの個数とモニタリング期間の長さとの間のレシオとして決定され、前記タスクの個数は実行状態からタスク検索状態への状態遷移の発生回数から決定される、判断するステップと、
前記マルチスレッドアプリケーションのパラレル領域の計算のオーバヘッドが前記閾値を超えているという判断に応答して、前記パラレル領域のオーバヘッドの１以上の原因は、各ワーカスレッドが前記キューからタスクを抽出するのに多すぎるライフタイムを費やしていることを含むことを報告するステップと、
を有する方法。
【請求項２】
前記パラレル領域の計算のオーバヘッドの１以上の原因は、
前記モニタリング期間において前記パラレル領域を実行し、
前記モニタリング期間において前記１以上のワーカスレッドのそれぞれについてキューされたタスクの実行の頻度をモニタリングすることによって、
決定される、請求項１記載の方法。
【請求項３】
前記判断するステップは、
ワーカスレッドが前記パラレル領域の１以上のタスクの１つを実行することに応答して、前記ワーカスレッドを前記実行状態にあると特定するステップと、
ワーカスレッドがローカルキューにおいてタスクを検索することに応答して、前記ワーカスレッドをローカルキュールックアップ状態にあると特定するステップであって、前記タスクは前記パラレル領域の１以上のタスクの一部である、前記ローカルキュールックアップ状態にあると特定するステップと、
ワーカスレッドが他のキュー又はグローバルキューにおいて他のタスクを検索することに応答して、前記ワーカスレッドをグローバルタスク検索状態にあると特定するステップであって、前記他のタスクは前記パラレル領域の１以上のタスクの一部である、前記グローバルタスク検索状態にあると特定するステップと、
ワーカスレッドがアイドル状態にあることに応答して、前記ワーカスレッドを待機状態にあると特定するステップと、
を有する、請求項１記載の方法。
【請求項４】
前記判断するステップは、
前記モニタリング期間において各ワーカスレッドにローカルなキューから前記ワーカスレッドにより実行されるタスクの第１の個数を決定するステップと、
前記モニタリング期間において他のワーカスレッドにローカルなキュー及び前記グローバルキューから各ワーカスレッドにより実行されるタスクの第２の個数を決定するステップと、
前記第１の個数と前記第２の個数との間のレシオが第２の閾値を超えているか判断するステップと、
前記レシオが前記第２の閾値を超えているという判断に応答して、前記パラレル領域のオーバヘッドの１以上の原因の１つとして、ワーカスレッドが前記他のローカルキューにおけるタスクを検索するか、又は前記グローバルキューにおけるタスクを検索するのに多すぎる時間を費やしていることを報告するステップと、
を有する、請求項３記載の方法。
【請求項５】
前記判断するステップは、
前記グローバルタスク検索状態から前記待機状態までの全てのワーカスレッドの状態遷移数とモニタリング期間における前記グローバルタスク検索状態の全てのワーカスレッドの繰り返し数との合計を前記モニタリング期間の長さによって除した第１の値を決定するステップと、
前記第１の値が第２の閾値を超えていると判断するステップと、
前記第１の値が前記第２の閾値を超えているという判断に応答して、前記パラレル領域のオーバヘッドの１以上の原因の１つとして、前記パラレル領域の１以上のタスクが前記１以上のワーカスレッド未満であることを報告するステップと、
を有する、請求項３記載の方法。
【請求項６】
前記マルチスレッド処理フレームワークは、Ｏｐｅｎ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇ（ＯｐｅｎＭＰ）、Ｉｎｔｅｌ（登録商標）  Ｔｈｒｅａｄｉｎｇ  Ｂｕｉｌｄｉｎｇ  Ｂｌｏｃｋｓ（ＴＢＢ）、Ｉｎｔｅｌ（登録商標）  Ｃｉｌｋ＋＋、Ｉｎｔｅｌ（登録商標）  Ｃ＋＋  ｆｏｒ  Ｔｈｒｏｕｇｈｐｕｔ  Ｃｏｍｐｕｔｉｎｇ（Ｃｔ）、及びＭｉｃｒｏｓｏｆｔ（登録商標）  Ｐａｒａｌｌｅｌ  Ｐａｔｔｅｒｎｓ  Ｌｉｂｒａｒｙ（ＰＰＬ）の１つに少なくとも部分的に準拠する、請求項１記載の方法。
【請求項７】
マルチスレッドアプリケーションパフォーマンス解析のための装置であって、
マルチスレッドアプリケーションを実行する実行ロジックであって、前記マルチスレッドアプリケーションの実行は、２以上のワーカスレッドによる計算のタスクをパラレルに実行することを含む、実行ロジックと、
パフォーマンス解析ロジックと、
を有し、
前記パフォーマンス解析ロジックは、
各ワーカスレッドがある状態にあると特定されるスレッドライフサイクル状態マシーン解析モデルを生成することであって、ワーカスレッドがパラレル領域の１以上のタスクの１つを実行することに応答して、前記ワーカスレッドが実行状態にあると特定され、ワーカスレッドがローカルキューにおいて前記パラレル領域の１以上のタスクの一部であるタスクを検索することに応答して、前記ワーカスレッドがローカルキュールックアップ状態にあると特定され、ワーカスレッドが他のキュー又はグローバルキューにおいて前記パラレル領域の１以上のタスクの一部である他のタスクを検索することに応答して、前記ワーカスレッドがグローバルタスク検索状態にあると特定され、ワーカスレッドがアイドル状態にあることに応答して、前記ワーカスレッドが待機状態にあると特定される、前記スレッドライフサイクル状態マシーン解析モデルを生成し、
前記実行状態から前記ローカルキュールックアップ状態までのスレッドの遷移数に対する、前記ローカルキュールックアップ状態から前記グローバルタスク検索状態までのスレッドの遷移数と前記グローバルタスク検索状態の繰り返し数との合計のレシオが第１の閾値を超えているという判断を通じて、前記スレッドライフサイクル状態マシーン解析モデルを利用して、前記マルチスレッドアプリケーションがパラレルアルゴリズムを有していると判断し、
前記マルチスレッドアプリケーションがパラレルアルゴリズムを有しているという判断に応答して、前記パラレルアルゴリズムの１以上のパフォーマンス問題の１つとして前記ワーカスレッドが前記他のキュー又は前記グローバルキューにおいてタスクを検索するのに多すぎる時間を費やしていると報告する装置。
【請求項８】
前記スレッドライフサイクル状態マシーン解析モデルを用いた前記パラレルアルゴリズムの１以上のパフォーマンス問題の決定は、
モニタリング期間に前記パラレルアルゴリズムを実行し、
前記実行状態から前記ローカルキュールックアップ状態への遷移の回数と、前記ローカルキュールックアップ状態から前記グローバルタスク検索状態への遷移の回数と、前記グローバルタスク検索状態の繰り返し回数との合計を決定し、
前記合計と前記モニタリング期間の長さとのレシオが第１の閾値を超えていると判断し、
前記パラレルアルゴリズムの１以上のパフォーマンス問題の１つとして、前記パラレルアルゴリズムの粒度が詳細すぎると報告する、
ことを含む、請求項７記載の装置。
【請求項９】
前記パフォーマンス解析ロジックは、
前記グローバルタスク検索状態から前記グローバルタスク検索状態及び前記待機状態への遷移数が第３の閾値を超えているか、又は待機状態のスレッドがアイドル状態にあるか判断し、
前記グローバルタスク検索状態から前記グローバルタスク検索状態及び前記待機状態への遷移数が第３の閾値を超えているという判断に応答して、前記パラレルアルゴリズムの１以上のパフォーマンス問題の１つとして、前記パラレルアルゴリズムの過剰な待機を報告する、
よう１以上のプロセッサにより実行されるよう構成される、請求項７記載の装置。
【請求項１０】
パラレルスレッド処理ライブラリは、Ｏｐｅｎ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇ（ＯｐｅｎＭＰ）、Ｉｎｔｅｌ（登録商標）  Ｔｈｒｅａｄｉｎｇ  Ｂｕｉｌｄｉｎｇ  Ｂｌｏｃｋｓ（ＴＢＢ）、Ｉｎｔｅｌ（登録商標）  Ｃｉｌｋ＋＋、Ｉｎｔｅｌ（登録商標）  Ｃ＋＋  ｆｏｒ  Ｔｈｒｏｕｇｈｐｕｔ  Ｃｏｍｐｕｔｉｎｇ（Ｃｔ）、及びＭｉｃｒｏｓｏｆｔ（登録商標）  Ｐａｒａｌｌｅｌ  Ｐａｔｔｅｒｎｓ  Ｌｉｂｒａｒｙ（ＰＰＬ）の１つに少なくとも部分的に準拠する、請求項７記載の装置。
【請求項１１】
前記パフォーマンス解析ロジックは、前記パラレルスレッド処理ライブラリの一部である、請求項１０記載の装置。
【請求項１２】
マルチスレッドアプリケーションのパラレル領域による１以上の問題を決定する方法であって、
モニタリング期間における前記マルチスレッドアプリケーションのパラレル領域を実行するステップであって、前記マルチスレッドアプリケーションのパラレル領域は、２以上のワーカスレッドによりパラレルに実行される前記マルチスレッドアプリケーションの一部を有する、実行するステップと、
各ワーカスレッドがある状態にあると特定されるスレッドライフサイクル状態マシーン解析モデルを生成するステップであって、ワーカスレッドが前記パラレル領域の１以上のタスクの１つを実行することに応答して、前記ワーカスレッドが実行状態にあると特定され、ワーカスレッドがローカルキューにおいて前記パラレル領域の１以上のタスクの一部であるタスクを検索することに応答して、前記ワーカスレッドがローカルキュールックアップ状態にあると特定され、ワーカスレッドが他のキュー又はグローバルキューにおいて前記パラレル領域の１以上のタスクの一部である他のタスクを検索することに応答して、前記ワーカスレッドがグローバルタスク検索状態にあると特定され、ワーカスレッドがアイドル状態にあることに応答して、前記ワーカスレッドが待機状態にあると特定される、生成するステップと、
前記実行状態から前記ローカルキュールックアップ状態への遷移数と、前記ローカルキュールックアップ状態から前記グローバルタスク検索状態への遷移数と、前記グローバルタスク検索状態の繰り返し数との合計を決定するステップと、
前記合計と前記モニタリング期間の長さとの間のレシオが第１の閾値を超えていると判断するステップと、
パラレルアルゴリズムの粒度が詳細すぎると報告するステップと、
を有する方法。
【請求項１３】
前記合計と前記モニタリング期間の長さとの間のレシオが第１の閾値を超えていると判断するステップは、前記ローカルキュールックアップ状態から前記グローバルタスク検索状態への遷移数と、前記グローバルタスク検索状態の繰り返し数と、前記実行状態から前記ローカルキュールックアップ状態への遷移数との合計のレシオが、第２の閾値を超えていると判断するステップであって、前記実行状態のスレッドが非アクティブな現在状態にある、判断するステップを有し、
前記報告するステップは、前記ワーカスレッドが前記他のキュー又は前記グローバルキューにおいてタスクを検索するのに多すぎる時間を費やしていることを報告するステップを有する、請求項１２記載の方法。
【請求項１４】
各スレッドの複数の状態における遷移数に少なくとも部分的に基づき前記マルチスレッドアプリケーションのパラレル領域による前記１以上の問題を決定するステップは、
前記グローバルタスク検索状態の繰り返し数と、前記グローバルタスク検索状態から前記待機状態への遷移数との合計が第３の閾値を超えているか判断するステップと、
前記マルチスレッドアプリケーションのパラレル領域の過剰な待機がパフォーマンス問題であると報告するステップと、
を有する、請求項１２記載の方法。
【請求項１５】
前記合計と前記モニタリング期間の長さとの間のレシオが第１の閾値を超えていると判断するステップは、前記グローバルタスク検索状態の繰り返し数と、前記グローバルタスク検索状態から待機状態への遷移数との合計が第２の閾値を超えていると判断するステップを有し、
前記報告するステップは、前記マルチスレッドアプリケーションのパラレル領域の過剰な待機を報告するステップを有する、請求項１２記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドアプリケーションに関し、限定することなくより詳細には、マルチスレッド処理フレームワークを利用するマルチスレッドアプリケーションの具体的問題を決定する解析モデルに関する。
【背景技術】
【０００２】
Ｏｐｅｎ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇ（ＯｐｅｎＭＰ）、Ｉｎｔｅｌ（登録商標）  Ｔｈｒｅａｄｉｎｇ  Ｂｕｉｌｄｉｎｇ  Ｂｌｏｃｋｓ（ＴＢＢ）、Ｉｎｔｅｌ（登録商標）  Ｃｉｌｋ＋＋、Ｉｎｔｅｌ（登録商標）  Ｃ＋＋  ｆｏｒ  Ｔｈｒｏｕｇｈｐｕｔ  Ｃｏｍｐｕｔｉｎｇ（Ｃｔ）、及びＭｉｃｒｏｓｏｆｔ（登録商標）  Ｐａｒａｌｌｅｌ  Ｐａｔｔｅｒｎｓ  Ｌｉｂｒａｒｙ（ＰＰＬ）などのマルチスレッド処理フレームワークは、マルチスレッドアプリケーションのパフォーマンスを向上させるためパラレル化を可能にする。マルチスレッドアプリケーションの効果は、マルチスレッドアプリケーションの各スレッドが同時実行のためＣＰＵ／コアの１つを利用するとき、複数の中央処理ユニット（ＣＰＵ）を有するコンピュータシステム、又は複数のコアを有するＣＰＵ上で観察できる。
【０００３】
しかしながら、マルチスレッド化されたフレームワークがマルチスレッドアプリケーションを実行するのに誤って利用された場合、パラレル化の効果は危うくなるかもしれない。図１Ａは、パラレルｆｏｒループの従来のコード１００を示す。ファンクションｆｏｏ（）の粒度は１として設定される。ファンクションｆｏｏ（）が実行するのにかかる時間に依存して、パラレル化の効果は、１の粒度が詳細すぎるため危うくなるかもしれない。
【０００４】
図１Ｂは、ダイナミックスケジューリングによるパラレルｆｏｒループの従来のコード１３０を示す。ファンクションｆｏｏ（）の粒度は、３として設定される。ダイナミックスケジューリングは、分散オーバヘッドを要求し、ファンクションｆｏｏ（）が実行するのにかかる時間に依存して、パラレル化の効果は、３の粒度が詳細すぎるため危うくなるかもしれない。
【０００５】
図１Ｃは、作業タスクが１つのみのスレッドから生じる又は生成される従来のコード１５０を示す。どの程度の大きさ変数Ｎが設定されるかに依存して、従来のコード１５０は、有意なアクティブスチーリングオーバヘッド（ａｃｔｉｖｅ  ｓｔｅａｌｉｎｇ  ｏｖｅｒｈｅａｄ）による線形スポーニング（ｌｉｎｅａｒ  ｓｐａｗｎｉｎｇ）問題を有することが可能である。例えば、変数Ｎが１００より大きく設定されるとき、当該実行は、再帰的なスポーニングによる他の実行よりはるかに悪くスケーリングする。
【０００６】
従来のコード１００，１３０，１５０は、マルチスレッドアプリケーションが不適切に又は非効果的に利用可能である可能なシナリオを示す。
【図面の簡単な説明】
【０００７】
本発明の実施例の特徴及び効果は、主題の以下の詳細な説明から明らかになるであろう。
【図１】図１Ａはパラレルｆｏｒループの従来のコードを示し、図１Ｂはダイナミックスケジューリングによるパラレルｆｏｒループの従来のコードを示し、図１Ｃは１つのみのスレッドから生じる又は生成される作業タスクの従来のコードを示す。
【図２】図２は、本発明の一実施例によるプラットフォームのモジュールを示す。
【図３】図３は、本発明の一実施例によるワーカスレッドライフサイクル状態マシーンに基づく解析モデルを示す。
【図４】図４は、本発明の一実施例によるマルチスレッドアプリケーションのパフォーマンスを解析するためのステップのフローチャートを示す。
【図５Ａ】図５Ａは、本発明の一実施例によるマルチスレッドアプリケーションの各パラレル領域のパラレルオーバヘッドの理由を決定するためのステップのフローチャートを示す。
【図５Ｂ】図５Ｂは、本発明の一実施例によるマルチスレッドアプリケーションの各パラレル領域のパラレルオーバヘッドの理由を決定するためのステップのフローチャートを示す。
【図６】図６は、本発明の一実施例によるここに開示される方法を実現するシステムを示す。
【発明を実施するための形態】
【０００８】
ここに記載される発明の実施例は、単なる具体例として示され、添付した図面に限定されるものでない。説明の簡単化のため、図示された要素は必ずしもスケーリングして示されていない。例えば、一部の要素の大きさは、明確化のため他の要素に対して誇張されてもよい。さらに、適切であると考えられるとき、参照番号は、対応する又は類似する要素を示すため図面間で繰り返されている。本発明の“一実施例”又は“実施例”という明細書の用語は、当該実施例に関して説明される特定の特徴、構成又は特性が本発明の少なくとも１つの実施例に含まれることを意味する。従って、明細書を通じて各所における“一実施例では”というフレーズの出現は、必ずしもすべてが同一の実施例を参照しているとは限らない。
【０００９】
本発明の実施例は、マルチスレッド処理フレームワークを利用するマルチスレッドアプリケーションの具体的な問題を決定するための解析モデルを提供する。本発明の一実施例では、マルチスレッドアプリケーションは、実行用の複数のスレッドを利用し、各スレッドは、各スレッドの現在状態に基づき複数の状態の各状態に割り当てられる。こうすることによって、マルチスレッドアプリケーションの具体的問題は、各スレッドの複数の状態間の遷移の頻度に基づき決定される。本発明の一実施例では、解析モデルは、ワーカスレッド遷移カウンタ又はイベントを利用して、マルチスレッドアプリケーションの各パラレル領域又はアルゴリズムに対して、何れの問題が生じたか、またパラレル領域又はアルゴリズムのスケーラビリティにそれがどの程度影響したかを決定する。
【００１０】
本発明の一実施例では、マルチスレッドアプリケーションを実行するためのマルチスレッド処理フレームワーク又はパラレルスレッド処理ライブラリの利用は、マルチスレッドアプリケーションのパラレル実行からのパフォーマンスの利益がユーザの観点から重要でない又は許容できない場合、非効果的又は問題である。パフォーマンスの利益は、限定することなく、より迅速な実行時間、ＣＰＵチック回数の低減などを含む。例えば、本発明の一実施例では、マルチスレッドアプリケーションを実行するためのマルチスレッド処理フレームワークの利用は、マルチスレッドアプリケーションを実行するためのパラレルオーバヘッドがマルチスレッドアプリケーションのパラレル実行からのパフォーマンス利益と同等又はより大きいときには効果的でない。
【００１１】
図２は、本発明の一実施例によるプラットフォーム２００のモジュールを示す。プラットフォーム又はシステム２００は、複数のプロセッサ及び／又はマルチコアプロセッサを有し、オペレーティングシステム（ＯＳ）２５０は、複数のプロセッサの少なくとも１つ又はマルチコアプロセッサのコアの１つの上で実行される。ＯＳ２５０は、プラットフォーム２００上でマルチスレッドアプリケーション２１０を実行するのに利用可能なネイティブスレッド２５５のプールを有する。
【００１２】
リソースマネージャ２４０は、ネイティブスレッド２５５のプールを管理し、実行用のスレッドの利用性を制御する。タスクスケジューラ２３０は、ネイティブスレッド２５５のプールから利用可能なスレッドによって実行されるべきタスクをスケジューリングする。パラレルスレッド処理ライブラリ２２０は、ネイティブスレッド２５５を用いたパラレル実行のため、マルチスレッドアプリケーション２１０により参照又は利用可能なファンクションを含む。
【００１３】
本発明の一実施例では、マルチスレッドアプリケーション２１０は、限定することなく、Ｏｐｅｎ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇ（ＯｐｅｎＭＰ）、Ｉｎｔｅｌ（登録商標）  Ｔｈｒｅａｄｉｎｇ  Ｂｕｉｌｄｉｎｇ  Ｂｌｏｃｋｓ（ＴＢＢ）、Ｉｎｔｅｌ（登録商標）  Ｃｉｌｋ＋＋、Ｉｎｔｅｌ（登録商標）  Ｃ＋＋  ｆｏｒ  Ｔｈｒｏｕｇｈｐｕｔ  Ｃｏｍｐｕｔｉｎｇ（Ｃｔ）、Ｍｉｃｒｏｓｏｆｔ（登録商標）  Ｐａｒａｌｌｅｌ  Ｐａｔｔｅｒｎｓ  Ｌｉｂｒａｒｙ（ＰＰＬ）及び他の何れかのマルチスレッド処理フレームワークを含むパラレルスレッド処理ライブラリ２２０又はマルチスレッド処理フレームワークを利用する。
【００１４】
本発明の一実施例では、パラレルスレッド処理ライブラリ２２０は、マルチスレッドアプリケーション２１０がサブ最適なパラレルアルゴリズムを有していることを決定し、解析モデルを用いてサブ最適なパラレルアルゴリズムの１以上のパフォーマンス問題を決定するためのロジックを有する。本発明の他の実施例では、当該ロジックは、Ｉｎｔｅｌ（登録商標）  Ｐａｒａｌｌｅｌ  Ａｍｐｌｉｆｉｅｒソフトウェアの一部である。本発明のさらなる他の実施例では、当該ロジックは、プラットフォーム２００の何れかのモジュールの一部とすることができる。
【００１５】
プラットフォーム２００のモジュールは別々のブロックとして示されているが、１つのモジュールの処理は、他のモジュールにより実行されてもよい。例えば、一実施例では、ＯＳ２５０は、リソースマネージャ２４０のファンクションを実行可能である。他の実施例では、パラレルスレッド処理ライブラリ２２０はまた、ＯＳ２５０に統合されてもよい。当業者は、モジュール又はファンクションの異なる組み合わせが本発明の動作に影響を与えることなく実行可能であることを容易に理解するであろう。
【００１６】
図３は、本発明の一実施例によるワーカスレッドライフサイクル状態マシーンに基づく解析モデル３００を示す。マルチスレッドアプリケーションが実行されると、パラレルオーバヘッドが、マルチスレッドアプリケーションのパラレルな実行を実行するため生じる又は必要とされる。パラレルオーバヘッドは、限定することなく、スレッドメンテナンス、ワーカスレッド間のジョブ分散などを含む。本発明の一実施例では、パラレルオーバヘッドは、アクティ及び非アクティブなパラレルオーバヘッドに分類される。
【００１７】
本発明の一実施例では、過剰なアクティブパラレルオーバヘッドがマルチスレッドアプリケーションのパラレル実行に影響を与えうる２つのシナリオがある。アクティブパラレルオーバヘッドの第１シナリオは、１以上のワーカスレッドが自らのローカルキューからジョブユニット又はタスクを取得するライフタイムの多すぎる時間を消費するときに生じる。第１シナリオは、詳細すぎ又は小さすぎなレベルとして設定されるマルチスレッドアプリケーションのパラレル領域の粒度によるものである。アクティブパラレルオーバヘッドの第２シナリオは、１以上のワーカスレッドが他のタスクキュー又はグローバルジョブマネージャキューのタスクを検索するのにライフタイムの多すぎる時間を消費するときに生じ、すなわち、ワーカスレッドは、自らのローカルキュー以外の他のソースからタスクをスチールしている。
【００１８】
同様に、本発明の一実施例では、過剰な非アクティブパラレルオーバヘッドがマルチスレッドアプリケーションのパラレルな実行に影響を与えうる２つのシナリオがある。非アクティブパラレルオーバヘッドの第１シナリオは、１以上のワーカスレッドがアイドル状態になると発生する。これは、それらが自らのタスクを終了したが、依然として自らのタスクを実行しているワーカスレッドの残りを支援することができないためである。１以上のワーカスレッドの過剰な待機は、非アクティブパラレルオーバヘッドを生じさせる。
【００１９】
非アクティブパラレルオーバヘッドの第２シナリオは、利用可能なワーカスレッドのすべてを飽和又は利用するのに十分なジョブ又はタスク生成がないときに生じる。ワーカスレッドは、１つのタスクの実行から他のタスクの検索に連続的に遷移し、利用可能なタスクがなくなると、アイドル状態に入る。新たなタスクが利用可能なとき、利用可能なすべてのスレッドは再びアクティブ状態になる。新たなタスクに割り当てられない利用可能なスレッドは、他のタスクの検索への連続的な遷移を繰り返し、利用可能なタスクがなくなると、アイドル状態に入る。
【００２０】
本発明の一実施例では、アクティブ及び非アクティブパラレルオーバヘッドの４つのシナリオは、解析モデル３００を用いたマルチスレッドアプリケーションのパラレル領域の実行中に特定される。アクティブ及び非アクティブパラレルオーバヘッドの４つのシナリオの１以上が、マルチスレッドアプリケーションのパラレル領域内で発生可能である。解析モデル３００は、ワーカスレッドの現在状態を記述する４つの状態を有するワーカスレッドライフサイクル状態マシーンを有する。各ワーカスレッドは、それのライフタイム中に４つの状態の１つに割り当てられる。
【００２１】
第１状態は、各スレッドがマルチスレッドアプリケーションのパラレル領域の一部を実行するため現在状態にあるとき、各スレッドがユーザコード実行状態３１０に割り当てられるユーザコード実行状態３１０である。スケジューラバイパス３１６が実行されるとき、ワーカスレッドはユーザコード実行状態３１０に留まる。理想的には、各ワーカスレッドは、アクティブ及び非アクティブパラレルオーバヘッドを再訪化するため、ユーザコード実行状態３１０に留まるべきである。
【００２２】
第２状態は、各スレッドがそれのローカルキューのジョブ又はタスクを検索するため現在状態にあるとき、ローカルキュールックアップ状態３２０に割り当てられるローカルキュールックアップ状態３２０である。各スレッドは、それが自らの現在タスクを終了し、それのタスクのローカルキューの新たなタスクを求めた後、ローカルキュールックアップ状態３２０に入る。
【００２３】
第３状態は、各スレッドが他のタスクキュー又はグローバルキューのタスクを検索する現在状態にあるとき、各スレッドがグローバルタスク検索状態３３０に割り当てられるグローバルタスク検索状態３３０である。各スレッドは、ローカルキュールックアップ状態３２０中にそれのローカルキューのタスクを検出することができないとき、グローバルタスク検索状態３３０に入る。
【００２４】
第４状態は、各スレッドが非アクティブ又はアイドル状態の現在状態にあるとき、各スレッドが待機状態３４０に割り当てられる待機状態３４０である。各スレッドは、グローバルタスク検索状態３３０中はタスクを検出することができないため、待機状態３４０に入る。新たなタスクが利用可能になると、待機状態３４０の各スレッドは、新たなタスクを検索するため、グローバルタスク検索状態３３０に戻る。状態遷移パス３１２，３１４，３１６，３２２，３３２，３３４，３３６，３３８は、解析モデル３００の４つの状態間で各スレッドの状態遷移を示す。
【００２５】
本発明の一実施例では、各スレッドの解析モデル３００の４つの状態間の状態遷移の回数は、マルチスレッドアプリケーションのパラレル領域の実行中に測定又は計算される。本発明の一実施例では、マルチスレッドアプリケーション全体が、各スレッドの解析モデル３００の４つの状態の間の状態遷移の回数を決定するため実行される。本発明の他の実施例では、マルチスレッドアプリケーションの一部しか、各スレッドの解析モデル３００の４つの状態間の状態遷移の回数を決定するのに実行されない。実行されるマルチスレッドアプリケーションの一部は、限定することなく、測定期間、マルチスレッドアプリケーションの合計の実行時間のパーセンテージなどに基づく。
【００２６】
本発明の一実施例では、アクティブ及び非アクティブパラレルオーバヘッドの４つのシナリオの何れがマルチスレッドアプリケーションのパラレル領域の実行中に存在するか特定するため、各スレッドの解析モデル３００の４つの状態間の状態遷移の測定された回数が利用される。本発明の他の実施例では、解析モデル３００の４つの状態間の状態遷移の頻度が利用される。例えば、本発明の一実施例では、当該頻度は、測定期間の長さと状態遷移の測定された回数とのレシオから決定される。
【００２７】
本発明の一実施例では、アクティブパラレルオーバヘッドの第１シナリオは、各スレッドのタスク又はジョブの実行の頻度が閾値を超えたときに特定又は決定される。本発明の一実施例では、各ワーカスレッドにより実行されるタスクの個数が決定される。各ワーカスレッドにより実行されるタスクの個数は、それのローカルキューから取得されたタスクの個数と、他のタスクキュー又はグローバルキューから取得されたタスクの個数とを加えることによって決定される。各スレッドのタスク又はジョブ実行の頻度は、各ワーカスレッドにより実行されるタスクの個数と測定期間の長さとのレシオによって決定される。
【００２８】
各スレッドについてそれのローカルキューから取得されたタスクの個数は、解析モデル３００に示されるように、ユーザコード実行状態３１０からローカルキュールックアップ状態３２０への状態遷移パス３１２の生起回数から決定される。各スレッドについて他のタスクキュー又はグローバルキューから取得されるタスクの個数は、ローカルキュールックアップ状態３２０からグローバルタスク検索状態３３０への状態遷移と、グローバルタスク検索状態３３０を繰り返す生起回数から決定される。
【００２９】
アクティブパラレルオーバヘッドの第１シナリオが特定されると、アクティブパラレルオーバヘッドの理由が、各ワーカスレッドがローカルキューからタスクを取得するのにそれのライフタイムの多すぎる時間を費やすことによるものである、すなわち、マルチスレッドアプリケーションのパラレル領域のタスクの粒度が詳細すぎるというレポートがユーザに送信される。
【００３０】
アクティブパラレルオーバヘッドの第２シナリオは、他のタスクキュー又はグローバルキューから取得されるタスクの個数と、各スレッドについてそれのローカルキューから取得されるタスクの個数とのレシオが閾値を超えると特定又は決定される。本発明の一実施例では、当該閾値は１に設定される。すなわち、各スレッドがそれのローカルキューから取得されるタスク以外のタスクからスチールされるより多くのタスクを実行しているとき、第２シナリオが発生する。
【００３１】
アクティブパラレルオーバヘッドの第２シナリオが特定されると、アクティブパラレルオーバヘッドの理由が、各ワーカスレッドが他のキュー又はグローバルキューのタスクを検索するのに多すぎる時間を費やす、すなわち、マルチスレッドアプリケーションのパラレル領域がリニアスポーニング問題を有するというレポートが、ユーザに送信される。
【００３２】
本発明の一実施例では、グローバルタスク検索状態３３０からグローバルタスク検索状態３３０及び待機状態３４０への状態遷移の頻度がある閾値を超えると、非アクティブパラレルオーバヘッドの第２シナリオが特定又は決定される。これは、グローバルタスク検索状態３３０を繰り返す状態遷移パス３３６と、グローバルタスク検索状態３３０から待機状態３４０への状態遷移パス３３２とによって、解析モデル３００において示される。
【００３３】
非アクティブパラレルオーバヘッドの第２シナリオが特定されると、非アクティブパラレルオーバヘッドの理由が、パラレル領域のタスクの個数が利用可能な又はフリーのワーカスレッドの個数より少ないため、すなわち、マルチスレッドアプリケーションのパラレル領域の不十分なジョブ又はタスク生成のためであるというレポートが、ユーザに送信される。
【００３４】
本発明の一実施例では、グローバルタスク検索状態３３０からグローバルタスク検索状態３３０及び待機状態３４０までの状態遷移の頻度が当該閾値を超えず、非アクティブパラレルオーバヘッドが閾値を超えると、非アクティブパラレルオーバヘッドの第１シナリオが特定又は決定される。非アクティブパラレルオーバヘッドの第１シナリオが特定されると、アクティブパラレルオーバヘッドの理由が、１以上のワーカスレッドが自らのタスクを終了したが、ワーカスレッドの残りを支援することができない、すなわち、スレッドの過剰な待機時間のためであるというレポートが、ユーザに送信される。
【００３５】
非アクティブパラレルオーバヘッドの第１シナリオが特定されると、非アクティブパラレルオーバヘッドの理由がパラレル化の粒度が粗すぎたというレポートが、ユーザに送信される。これは、作業が多すぎるチャンクに分割され、生成されるチャンクの個数を制限し、その後にパラレル化を制限することを意味する。
【００３６】
本発明の一実施例では、アクティブ及び非アクティブパラレルオーバヘッドの１以上のシナリオが特定されると、それは、生成された具体的なレポートに基づき、マルチスレッドアプリケーションの特定のパラレル領域の訂正を可能にする。これは、マルチスレッドアプリケーションのパラレルな実行の向上を可能にする。本発明の実施例は、ユーザがレポート又は結論に基づきマルチスレッドアプリケーションにおけるエラーを修正するため、解析モデル３００の結果を解釈することを可能にする。本発明の一実施例では、特定の問題又はシナリオを決定するためのポインタ又は示唆が、各シナリオのレポートに加えて提供される。
【００３７】
解析モデル３００は、タスクでなくワーカスレッドライフサイクル状態に基づく。これは、同様のアプローチを用いてアクティブ及び／又は非アクティブパラレルオーバヘッドの原因を決定するため、タスクベースマルチスレッドフレームワークと非タスクベースマルチスレッドフレームワークとの双方が解析されることを可能にする。本発明の一実施例では、解析モデルは、Ｉｎｔｅｌ（登録商標）  Ｐａｒａｌｌｅｌ  Ａｍｐｌｉｆｉｅｒソフトウェアに一体化できる。
【００３８】
アクティブ及び非アクティブパラレルオーバヘッドの４つのシナリオの説明は、限定的であることは意図されない。当業者は、他のシナリオが本発明の作業に影響を与えることなく特定可能であることを容易に理解するであろう。同様に、解析モデル３００の４つの状態は、限定的であることとは意図されない。当業者は、他の状態が本発明の作業に影響を与えることなく追加可能であることを容易に理解するであろう。
【００３９】
図４は、本発明の一実施例によるマルチスレッドアプリケーションのパフォーマンスを解析するためのステップのフローチャート４００を示す。ステップ４１０において、フローは、マルチスレッドコード又はアプリケーションのパラレル領域を特定する。ステップ４１５において、フロー４００は、パラレル領域が検出されたか確認する。検出された場合、フロー４００はステップ４２０に移行し、特定された各パラレル領域についてアクティブ及び非アクティブパラレルオーバヘッドを決定する。検出されなかった場合、フロー４００は終了する。
【００４０】
ステップ４２５において、フロー４００は、アクティブ及び非アクティブパラレルオーバヘッドが閾値を超えたか確認する。本発明の一実施例では、単一の閾値がアクティブパラレルオーバヘッドと非アクティブパラレルオーバヘッドとの双方と比較される。本発明の他の実施例では、別の閾値がそれぞれアクティブ及び非アクティブパラレルオーバヘッドと比較される。閾値を超えた場合、フロー４００はステップ４３０に移行し、マルチスレッドコード又はアプリケーションの各パラレル領域についてパラレルオーバヘッドの理由を決定する。閾値を超えない場合、フロー４００は終了する。
【００４１】
図５Ａは、本発明の一実施例によるマルチスレッドアプリケーションの各パラレル領域についてパラレルオーバヘッドの理由を決定するためのステップのフローチャート５００を示す。説明の簡単化のため、図５Ａは、図３を参照して説明される。
【００４２】
ステップ５１０において、フローは、モニタリング期間を設定し、すべての状態遷移パスカウンタをリセットする。本発明の一実施例では、状態遷移パス３１２，３１４，３１６，３２２，３３２，３３４，３３６，３３８のそれぞれについてカウンタが維持される。ステップ５１５において、フロー５００は、設定されたモニタリング期間のマルチスレッドアプリケーションの各パラレル領域を実行する。実行中、マルチスレッドアプリケーションの各パラレル領域の各スレッドが解析モデル３００の４つの状態３１０，３２０，３３０，３４０の間で遷移するとき、各状態遷移パスカウンタはインクリメントされる。
【００４３】
ステップ５２０において、フロー５００は、各ワーカスレッドについてタスク又はジョブの実行の頻度を決定する。ステップ５２５において、フロー５００は、各ワークのタスクの実行の頻度が閾値を超えたか判断する。例えば、本発明の一実施例では、マルチスレッドアプリケーションの実行と比較してＴＢＢパラレルオーバヘッドが有意でないものにするため、タスクは、５０００以上のＣＰＵチックである必要があるかもしれない。マルチスレッドアプリケーションが２ギガヘルツ（ＧＨｚ）のクロック速度で実行されるＣＰＵ上で実行されると仮定すると、４００，０００個のタスクが毎秒各スレッドによって実行されるべきである。本発明の一実施例では、この閾値は、毎秒４００，０００タスクに設定される。
【００４４】
ステップ５２５において閾値を超える場合、フロー５００は、ステップ５３０に移行し、パラレル領域と共に特定の問題を報告する。本発明の一実施例では、ステップ５３０は、アクティブパラレルオーバヘッドが、各ワーカスレッドがローカルキューからタスクを取得するのにそれのライフタイムの多すぎる時間を消費するためであることを報告する。ステップ５２５において閾値を超過しない場合、フロー５００はステップ５３５に移行する。
【００４５】
ステップ５３５において、フロー５００は、他のタスクキュー又はグローバルキューから取得されるタスク、すなわち、スチールされたタスクの個数と、各スレッドについてそれのローカルキューから取得されたタスクの個数とのレシオを決定する。ステップ５４０において、フロー５００は、当該レシオが閾値を超えたか判断する。閾値を超えている場合、フロー５００は、ステップ５４５に移行し、パラレル領域と共に特定の問題を報告する。本発明の一実施例では、ステップ５４５は、アクティブパラレルオーバヘッドの理由が、各ワーカスレッドが他のタスクキュー又はグローバルキューのタスクを検出するのに多すぎる時間を費やしたことによるものであることを報告する。閾値を超えていない場合、フロー５００は、図５Ｂにおいてステップ５Ｂに移行する。
【００４６】
図５Ｂは、本発明の一実施例によるマルチスレッドアプリケーションの各パラレル領域のパラレルオーバヘッドの理由を決定するためのステップのフローチャート５５０を示す。フロー５５０は、ステップ５Ｂからステップ５６０に移行する。ステップ５６０において、フロー５５０は、非アクティブパラレルオーバヘッドが閾値を超えたか判断する。閾値を超えていない場合、フロー５５０は終了する。閾値を超えた場合、フロー５５０はステップ５６５に移行し、グローバルタスク検索状態３３０からグローバルタスク検索状態３３０及び待機状態３４０への状態遷移の頻度を決定する。例えば、本発明の一実施例では、フロー５５０は、状態遷移パス３３６，３３２の状態遷移パスカウンタの合計と、設定されたモニタリング期間の長さとのレシオを決定する。当該レシオから、各スレッドについてグローバルタスク検索状態３３０からグローバルタスク検索状態３３０及び待機状態３４０までの状態遷移の頻度が取得される。
【００４７】
ステップ５７０において、フロー５５０は、各ワーカスレッドに対するグローバルタスク検索状態３３０からグローバルタスク検索状態３３０及び待機状態３４０までの状態遷移の頻度が閾値を超えたか判断する。閾値を超えた場合、フロー５５０はステップ５７５に移行し、パラレル領域と共に特定の問題を報告し、フロー５５０は終了する。本発明の一実施例では、ステップ５７５は、非アクティブパラレルオーバヘッドの理由が、パラレル領域のタスクの個数が利用可能な又はフリーのワーカスレッドの個数より少ないためであることを報告する。
【００４８】
閾値を超えない場合、フロー５５０はステップ５８０に移行し、パラレル領域と共に特定の問題を報告し、フロー５５０は終了する。本発明の一実施例では、ステップ５８０は、非アクティブパラレルオーバヘッドの理由が、１以上のワーカスレッドが自らのタスクを終了したが、ワーカスレッドの残りを支援することができないためであることを報告する。
【００４９】
図４、５Ａ及び５Ｂに示されるステップは、限定的であることは意図されない。当業者は、図４、５Ａ及び５Ｂに示されるステップの他のシーケンスが本発明の動作に影響を与えることなく利用可能であることを容易に理解するであろう。例えば、本発明の一実施例では、図４、５Ａ及び５Ｂに示されるステップの一部はパラレルに実行される。本発明の一実施例では、ステップ４２５、５２５、５４０、５６５及び５７５について要求される閾値は、特定のパラレルスレッド処理ライブラリ又はマルチスレッド処理フレームワークの開発者からの推奨に基づき決定可能である。本発明の他の実施例では、ステップ４２５、５２５、５４０、５６５、５７５について要求される閾値は、解析モデル３００の４つの状態３１０、３２０、３３０、３４０のそれぞれを実行するコストに基づき決定される。
【００５０】
図６は、本発明の一実施例によるここに開示される方法を実現するシステムを示す。システム６００は、限定することなく、デスクトップコンピュータ、ラップトップコンピュータ、ノートブック、ノートブックコンピュータ、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、サーバ、ワークステーション、携帯電話、モバイル計算装置、インターネット装置又は他の何れかのタイプの計算装置を含む。他の実施例では、ここに開示される方法を実現するのに用いられるシステム６００は、ＳＯＣ（Ｓｙｓｔｅｍ  Ｏｎ  Ｃｈｉｐ）システムであってもよい。
【００５１】
プロセッサ６１０は、システム６００の命令を実行する処理コア６１２を有する。処理コア６１２は、限定することなく、命令をフェッチするプリフェッチロジック、命令を復号化する復号化ロジック、命令を実行する実行ロジックなどを含む。プロセッサ６１０は、システム６００の命令及び／又はデータをキャッシュするキャッシュメモリ６１６を有する。本発明の他の実施例では、キャッシュメモリ６１６は、限定することなく、レベル１、レベル２及びレベル３キャッシュメモリ又はプロセッサ６１０内のキャッシュメモリの他の何れかの構成を含む。
【００５２】
メモリコントロールハブ（ＭＣＨ）６１４は、プロセッサ６１０が揮発性メモリ６３２及び／又は不揮発性メモリ６３４を含むメモリ６３０にアクセス及び通信することを可能にするファンクションを実行する。揮発性メモリ６３２は、限定することなく、ＳＤＲＡＭ（Ｓｙｎｃｈｒｏｎｏｕｓ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＤＲＡＭ（ＲＡＭＢＵＳ  Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）及び／又は他の何れかのタイプのランダムアクセスメモリ装置を含む。不揮発性メモリ６３４は、限定することなく、ＮＡＮＤフラッシュメモリ、相変化メモリ（ＰＣＭ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）又は他の何れかのタイプの不揮発性メモリ装置を含む。
【００５３】
メモリ６３０は、プロセッサにより実行される命令及び情報を格納する。メモリ６３０はまた、プロセッサ６１０が命令を実行している間、一時的な変数又は他の中間情報を格納してもよい。チップセット６２０は、ポイント・ツー・ポイント（ＰｔＰ）インタフェース６１７，６２２を介しプロセッサ６１０と接続する。チップセット６２０は、プロセッサ６１０がシステム６００の他のモジュールと接続することを可能にする。本発明の一実施例では、インタフェース６１７，６２２は、Ｉｎｔｅｌ（登録商標）  ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）などのＰｔＰ通信プロトコルに従って動作する。
【００５４】
チップセット６２０は、限定することなく、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）ディスプレイ、又は他の何れかの形態のビジュアルディスプレイ装置を含む表示装置６４０に接続する。本発明の一実施例では、プロセッサ６１０とチップセット６２０とはＳＯＣにマージされる。さらに、チップセット６２０は、各種モジュール６７４、６６０、６６２、６６４、６６６を相互接続する１以上のバス６５０，６５５に接続する。バス６５０，６５５は、バススピード又は通信プロトコルにミスマッチがある場合、バスブリッジ６７２を介し相互接続されてもよい。チップセット６２０は、限定することなく、不揮発性メモリ６６０、記憶装置６６２、キーボード／マウス６６４及びネットワークインタフェース６６６に接続する。本発明の一実施例では、ソリッドステートドライブ１０２は記憶装置６６２である。
【００５５】
記憶装置６６２は、限定することなく、ソリッドステートドライブ、ハードディスクドライブ、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリドライブ又は他の携帯のコンピュータデータ記憶媒体を含む。ネットワークインタフェース６６６は、限定することなく、イーサネット（登録商標）インタフェース、ＵＳＢインタフェース、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）  Ｅｘｐｒｅｓｓインタフェース、無線インタフェース及び／又は他の何れか適切なタイプのインタフェースを含む何れかのタイプの周知なネットワークインタフェース規格を用いて実現される。無線インタフェースは、限定することなく、ＩＥＥＥ８０２．１１規格及びそれの関連ファミリに従って動作する。Ｈｏｍｅ  Ｐｌｕｇ  ＡＶ（ＨＰＡＶ）、Ｕｌｔｒａ  Ｗｉｄｅ  Ｂａｎｄ（ＵＷＢ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＷｉＭａｘ又は他の形態の無線通信プロトコルに従って動作する。
【００５６】
図６に示されるモジュールはシステム６００内で別々のブロックとして示されるが、これらのブロックの一部によって実行されるファンクションは、単一の半導体内に一体化されてもよいし、又は２以上の別々の集積回路を用いて実現されてもよい。例えば、キャッシュメモリ６１６はプロセッサ６１０内で別々のブロックとして示されるが、キャッシュメモリ６１６はそれぞれプロセッサコア６１２に搭載可能である。本発明の他の実施例では、システム６００は、複数のプロセッサ／処理コアを含むものであってもよい。
【００５７】
ここに開示される方法は、ハードウェア、ソフトウェア、ファームウェア又はこれらの他の何れかの組み合わせにより実現可能である。開示される主題の実施例の具体例が説明されたが、当業者は、開示された主題を実現する他の多数の方法が代替的に利用されてもよいことを容易に理解するであろう。上述した説明では、開示された主題の各種態様が説明された。説明の目的のため、具体的な数字、システム及び構成が、主題の完全な理解を提供するため与えられた。しかしながら、主題が具体的な詳細なしに実現可能であることは、本開示の利益を有する当業者に明らかであろう。他の例では、開示された主題を不明りょうにしないように、周知の特徴、コンポーネント又はモジュールは、省略、簡単化、合成又は分割された。
【００５８】
ここで用いられる“動作可能である”という用語は、装置、システム、プロトコルなどが動作可能であるか、又は装置又はシステムが電力オフ状態にあるとき、それの所望の機能のため動作するよう構成されることを意味する。開示された主題の各種実施例は、ハードウェア、ファームウェア、ソフトウェア又はこれらの組み合わせにより実現されてもよく、マシーンによりアクセスされると、マシーンがタスクを実行し、抽象的なデータタイプ又は低レベルハードウェアコンテクストを規定し、又は結果を生成する命令、ファンクション、プロシージャ、データ構造、ロジック、アプリケーションプログラム、シミュレーションのための設計表現又はフォーマット、エミュレーション及び設計製造など、プログラムコードを参照して又は関連して説明されてもよい。
【００５９】
図示される技術は、格納されているコード及びデータを用いて実現可能であり、汎用コンピュータ又は計算装置などの１以上の計算装置上で実行可能である。このような計算装置は、マシーン可読記憶媒体（例えば、磁気ディスク、光ディスク、ＲＡＭ、ＲＯＭ、フラッシュメモリ装置、相変化メモリなど）及びマシーン可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号などの電気、光、音響又は他の形態の伝搬信号など）を用いて、コード及びデータを内部的に及びネットワークを介し他の計算装置と）通信及び格納する。
【００６０】
開示された主題は例示的な実施例を参照して説明されたが、本開示は、限定的に解釈されることを意図するものでない。例示的な実施例の各種改良は、開示された主題が属する当業者に明らかな主題の他の実施例と共に、開示された主題の範囲内にあるとみなされる。
【図１】
0005745038.tif 000002
【図２】
0005745038.tif 000003
【図３】
0005745038.tif 000004
【図４】
0005745038.tif 000005
【図５Ａ】
0005745038.tif 000006
【図５Ｂ】
0005745038.tif 000007
【図６】
0005745038.tif 000008