"マルチスレッド処理フレームワーク上で実行されるマルチスレッドアプリケーションのパフォーマンスを解析する方法であって、前記マルチスレッドアプリケーションのパラレル領域のパラレルオーバヘッドが閾値を超えているか判断するステップと、前記マルチスレッドアプリケーションのパラレル領域のパラレルオーバヘッドが閾値を超えているという判断に応答して、前記パラレル領域のパラレルオーバヘッドの1以上の原因を決定するステップと、を有する方法。前記パラレルオーバヘッドは、アクティブパラレルオーバヘッドと非アクティブパラレルオーバヘッドとを有し、前記マルチスレッドアプリケーションのパラレル領域のパラレルオーバヘッドが閾値を超えているか判断するステップは、前記マルチスレッドアプリケーションのパラレル領域の前記アクティブパラレルオーバヘッド及び/又は前記非アクティブパラレルオーバヘッドが前記閾値を超えているか判断することを含む、請求項1記載の方法。前記パラレル領域のパラレルオーバヘッドの1以上の原因を決定するステップは、設定されたモニタリング期間に基づき前記パラレル領域を実行することを含む、請求項2記載の方法。前記パラレル領域の実行は、1以上のワーカスレッドを利用し、前記パラレル領域のパラレルオーバヘッドの1以上の原因を決定するステップはさらに、各スレッドが前記パラレル領域の1以上のタスクの1つを実行することに応答して、前記1以上のワーカスレッドのそれぞれをユーザコード実行状態に割り当てるステップと、各スレッドがローカルキューにおいてタスクを検索することに応答して、前記1以上のワーカスレッドのそれぞれをローカルキュールックアップ状態に割り当てるステップであって、前記タスクは前記パラレル領域の1以上のタスクの一部である、前記ローカルキュールックアップ状態に割り当てるステップと、各スレッドが他のキュー又はグローバルキューにおいて他のタスクを検索することに応答して、前記1以上のワーカスレッドのそれぞれをグローバルタスク検索状態に割り当てるステップであって、前記他のタスクは前記パラレル領域の1以上のタスクの一部である、前記グローバルタスク検索状態に割り当てるステップと、各スレッドがアイドル状態にあることに応答して、前記1以上のワーカスレッドのそれぞれを待機状態に割り当てるステップと、を有する、請求項3記載の方法。前記パラレル領域のパラレルオーバヘッドの1以上の原因を決定するステップはさらに、前記1以上のワーカスレッドのそれぞれについて、前記ローカルキュー、前記他のキュー及び前記グローバルキューにおける前記タスクの実行の頻度が他の閾値を超えているか判断するステップと、前記タスクの実行の頻度が前記他の閾値を超えたという判断に応答して、前記パラレル領域のパラレルオーバヘッドの1以上の原因の1つとして、各ワーカスレッドが前記ローカルキューから前記タスクを取得するのにそれのライフタイムの多すぎる時間を費やしていることを報告するステップと、を有する、請求項4記載の方法。前記パラレル領域のパラレルオーバヘッドの1以上の原因を決定するステップはさらに、前記ローカルキューにおける前記タスクの実行と前記他のキュー及び前記グローバルキューにおける前記タスクの実行とのレシオが他の閾値を超えているか判断するステップと、前記ローカルキューにおける前記タスクの実行と前記他のキュー及び前記グローバルキューにおける前記タスクの実行とのレシオが他の閾値を超えているという判断に応答して、前記パラレル領域のパラレルオーバヘッドの1以上の原因の1つとして、各ワーカスレッドが前記他のローカルキューにおける前記他のタスクを検索するか、又は前記グローバルキューにおける前記他のタスクを検索するのに多すぎる時間を費やしていることを報告するステップと、を有する、請求項4記載の方法。前記パラレル領域のパラレルオーバヘッドの1以上の原因を決定するステップはさらに、前記1以上のワーカスレッドのそれぞれについて、前記グローバルタスク検索状態から前記グローバルタスク検索状態及び前記待機状態への状態遷移の頻度が他の閾値を超えているか判断するステップと、前記1以上のワーカスレッドのそれぞれについて、前記グローバルタスク検索状態から前記グローバルタスク検索状態及び前記待機状態への状態遷移の頻度が他の閾値を超えているという判断と、前記マルチスレッドアプリケーションのパラレル領域の前記非アクティブパラレルオーバヘッドが前記閾値を超えているという判断とに応答して、前記パラレル領域のパラレルオーバヘッドの1以上の原因の1つとして、前記1以上のワーカスレッドの少なくとも1つが自らのタスクを終了したが、前記1以上のワーカスレッドの残りを支援することができないことを報告するステップと、を有する、請求項4記載の方法。前記マルチスレッド処理フレームワークは、OpenMulti-ProcessingOpenMP、Intel登録商標ThreadingBuildingBlocksTBB、Intel登録商標Cilk、Intel登録商標CforThroughputComputingCt、及びMicrosoft登録商標ParallelPatternsLibraryPPLの1つに少なくとも部分的に準拠する、請求項1記載の方法。パラレルスレッド処理ライブラリと、前記パラレルスレッド処理ライブラリを用いてマルチスレッドアプリケーションを実行するオペレーティングシステムと、前記マルチスレッドアプリケーションはサブ最適パラレルアルゴリズムを有すると判断し、スレッドライフサイクル状態マシーンを用いて前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題を決定するロジックと、を有する装置。前記マルチスレッドアプリケーションが前記サブ最適パラレルアルゴリズムを有することを判断するロジックは、前記サブ最適アルゴリズムのパラレルオーバヘッドが前記マルチスレッドアプリケーションのパフォーマンスゲインと同等又はそれ以上であると判断する、請求項9記載の装置。前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題は、サブ最適な粒度、不十分なパラレルスラックネス及び過剰なタスクのスチールの1以上を有する、請求項9記載の装置。前記スレッドライフサイクル状態マシーンは、第1の複数のスレッドを有する実行状態であって、前記第1の複数のスレッドのそれぞれは、前記サブ最適パラレルアルゴリズムの複数のジョブの1つを実行する状態にある、前記実行状態と、第2の複数のスレッドを有するローカルキュールックアップ状態であって、前記第2の複数のスレッドのそれぞれは、ローカルキューにおいて前記サブ最適パラレルアルゴリズムの複数のジョブの一部であるジョブを検索する状態にある、前記ローカルキュールックアップ状態と、第3の複数のスレッドを有するグローバルジョブ検索状態であって、前記第3の複数のスレッドのそれぞれは、他のキュー又はグローバルキューにおいて前記サブ最適パラレルアルゴリズムの複数のジョブの一部である他のジョブを検索する状態にある、前記グローバルジョブ検索状態と、第4の複数のスレッドを有する待機状態であって、前記第4の複数のスレッドのそれぞれは、アイドル状態にある、前記待機状態と、を有する、請求項9記載の装置。前記スレッドライフサイクル状態マシーンを用いて前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題を決定するロジックは、決定された期間に前記サブ最適パラレルアルゴリズムを実行し、前記ローカルキュールックアップ状態への前記実行状態の遷移の回数と、前記グローバルジョブ検索状態に前記ローカルキュールックアップ状態が遷移し、前記グローバルジョブ検索状態を繰り返した回数との和を決定し、前記和と前記決定された期間の長さとのレシオが第1閾値を超えていると判断し、前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題の第1パフォーマンス問題として、前記サブ最適パラレルアルゴリズムの粒度が詳細すぎると特定する、請求項9記載の装置。前記スレッドライフサイクル状態マシーンを用いて前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題を決定するロジックはさらに、前記グローバルジョブ検索状態に前記ローカルキュールックアップ状態が遷移し、前記グローバルジョブ検索状態を繰り返す回数と、前記ローカルキュールックアップ状態への前記実行状態の遷移の回数とのレシオが第2閾値を超えていると判断し、前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題の第2パフォーマンス問題として、前記サブ最適パラレルアルゴリズムのリニアスポーニングを特定する、請求項13記載の装置。前記スレッドライフサイクル状態マシーンを用いて前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題を決定するロジックはさらに、前記グローバルジョブ検索状態及び前記待機状態への前記グローバルジョブ検索状態の遷移の回数が第3閾値を超えているか判断し、前記グローバルジョブ検索状態及び前記待機状態への前記グローバルジョブ検索状態の遷移の回数が第3閾値を超えているという判断に応答して、前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題の第3パフォーマンス問題として、前記サブ最適パラレルアルゴリズムの過剰な待機を特定し、前記グローバルジョブ検索状態及び前記待機状態への前記グローバルジョブ検索状態の遷移の回数が第3閾値を超えているという判断と、前記サブ最適パラレルアルゴリズムの非アクティブパラレルオーバヘッドが第4閾値を超えているという判断とに応答して、前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題の第4パフォーマンス問題として、前記サブ最適パラレルアルゴリズムの不十分なジョブ生成を特定する、請求項14記載の装置。前記パラレルスレッド処理ライブラリは、OpenMulti-ProcessingOpenMP、Intel登録商標ThreadingBuildingBlocksTBB、Intel登録商標Cilk、Intel登録商標CforThroughputComputingCt、及びMicrosoft登録商標ParallelPatternsLibraryPPLの1つに少なくとも部分的に準拠する、請求項9記載の方法。前記ロジックは、前記パラレルスレッド処理ライブラリの一部である、請求項9記載の装置。実行されるとプロセッサに、各スレッドの現在状態に基づき、複数のスレッドのそれぞれを複数の状態の1つに割り当てるステップと、各スレッドの前記複数の状態間の遷移の回数に少なくとも部分的に基づき、マルチスレッドアプリケーションのパラレル領域による1以上の問題を決定するステップと、の方法を実行させる命令を格納したマシーン可読記憶媒体。前記複数の状態は、各スレッドが前記マルチスレッドアプリケーションのパラレル領域の一部を実行する前記現在状態にあることに応答して、各スレッドが割り当てられる実行状態と、各スレッドがローカルキューにおいて前記マルチスレッドアプリケーションのパラレル領域の複数のジョブの一部であるジョブを検索する前記現在状態にあることに応答して、各スレッドが割り当てられるローカルキュールックアップ状態と、各スレッドが他のキュー又はグローバルキューにおいて前記マルチスレッドアプリケーションの前記複数のジョブの一部である他のジョブを検索する前記現在状態にあることに応答して、各スレッドが割り当てられるグローバルジョブ検索状態と、各スレッドが非アクティブの前記現在状態にあることに応答して、各スレッドが割り当てられる待機状態と、を有する、請求項18記載のマシーン可読記憶媒体。前記各スレッドの前記複数の状態間の遷移の回数に少なくとも部分的に基づき、マルチスレッドアプリケーションのパラレル領域による1以上の問題を決定するステップは、決定された期間に前記マルチスレッドアプリケーションのパラレル領域を実行するステップと、前記ローカルキュールックアップ状態への前記実行状態の遷移の回数と、前記グローバルジョブ検索状態へ前記ローカルキュールックアップ状態が遷移し、前記グローバルジョブ検索状態を繰り返す回数との和を決定するステップと、前記和と前記決定された期間の長さとのレシオが第1閾値を超えていると判断するステップと、前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題の第1パフォーマンス問題として、前記サブ最適パラレルアルゴリズムの粒度が詳細すぎると特定するステップと、を有する、請求項18記載のマシーン可読記憶媒体。前記各スレッドの前記複数の状態間の遷移の回数に少なくとも部分的に基づき、マルチスレッドアプリケーションのパラレル領域による1以上の問題を決定するステップは、前記グローバルジョブ検索状態に前記ローカルキュールックアップ状態が遷移し、前記グローバルジョブ検索状態を繰り返す回数と、前記ローカルキュールックアップ状態への前記実行状態の遷移の回数とのレシオが第2閾値を超えていると判断するステップと、前記サブ最適パラレルアルゴリズムの1以上のパフォーマンス問題の第2パフォーマンス問題として、前記サブ最適パラレルアルゴリズムのリニアスポーニングを特定するステップと、を有する、請求項20記載のマシーン可読記憶媒体。前記各スレッドの前記複数の状態間の遷移の回数に少なくとも部分的に基づき、マルチスレッドアプリケーションのパラレル領域による1以上の問題を決定するステップは、前記グローバルジョブ検索状態及び前記待機状態への前記グローバルジョブ検索状態の遷移の回数が第3閾値を超えているか判断するステップと、前記グローバルジョブ検索状態及び前記待機状態への前記グローバルジョブ検索状態の遷移の回数が第3閾値を超えているという判断に応答して、前記マルチスレッドアプリケーションのパラレル領域の1以上のパフォーマンス問題の第3パフォーマンス問題として、前記マルチスレッドアプリケーションのパラレル領域の過剰な待機を特定するステップと、を有する、請求項21記載のマシーン可読記憶媒体。前記各スレッドの前記複数の状態間の遷移の回数に少なくとも部分的に基づき、マルチスレッドアプリケーションのパラレル領域による1以上の問題を決定するステップは、前記1以上のワーカスレッドのそれぞれについて前記グローバルタスク検索状態及び前記待機状態への前記グローバルタスク検索状態の遷移の回数が他の閾値を超えているか判断するステップと、前記グローバルタスク検索状態及び前記待機状態への前記グローバルタスク検索状態の遷移の回数が前記第3閾値を超えているという判断に応答して、前記マルチスレッドアプリケーションのパラレル領域の1以上のパフォーマンス問題の第3パフォーマンス問題として、前記マルチスレッドアプリケーションのパラレル領域の過剰な待機を特定するステップと、前記グローバルタスク検索状態及び前記待機状態への前記グローバルタスク検索状態の遷移の回数が前記第3閾値を超えていないという判断と、前記マルチスレッドアプリケーションのパラレル領域の非アクティブパラレルオーバヘッドが第5閾値を超えているという判断とに応答して、前記マルチスレッドアプリケーションのパラレル領域の1以上のパフォーマンス問題の第4パフォーマンス問題として、前記マルチスレッドアプリケーションのパラレル領域の不十分なジョブ生成を特定するステップと、を有する、請求項22記載のマシーン可読記憶媒体。ここに記載される発明の実施例は、単なる具体例として示され、添付した図面に限定されるものでない。説明の簡単化のため、図示された要素は必ずしもスケーリングして示されていない。例えば、一部の要素の大きさは、明確化のため他の要素に対して誇張されてもよい。さらに、適切であると考えられるとき、参照番号は、対応する又は類似する要素を示すため図面間で繰り返されている。本発明の一実施例又は実施例という明細書の用語は、当該実施例に関して説明される特定の特徴、構成又は特性が本発明の少なくとも1つの実施例に含まれることを意味する。従って、明細書を通じて各所における一実施例ではというフレーズの出現は、必ずしもすべてが同一の実施例を参照しているとは限らない。本発明の実施例は、マルチスレッド処理フレームワークを利用するマルチスレッドアプリケーションの具体的な問題を決定するための解析モデルを提供する。本発明の一実施例では、マルチスレッドアプリケーションは、実行用の複数のスレッドを利用し、各スレッドは、各スレッドの現在状態に基づき複数の状態の各状態に割り当てられる。こうすることによって、マルチスレッドアプリケーションの具体的問題は、各スレッドの複数の状態間の遷移の頻度に基づき決定される。本発明の一実施例では、解析モデルは、ワーカスレッド遷移カウンタ又はイベントを利用して、マルチスレッドアプリケーションの各パラレル領域又はアルゴリズムに対して、何れの問題が生じたか、またパラレル領域又はアルゴリズムのスケーラビリティにそれがどの程度影響したかを決定する。本発明の一実施例では、マルチスレッドアプリケーションを実行するためのマルチスレッド処理フレームワーク又はパラレルスレッド処理ライブラリの利用は、マルチスレッドアプリケーションのパラレル実行からのパフォーマンスの利益がユーザの観点から重要でない又は許容できない場合、非効果的又は問題である。パフォーマンスの利益は、限定することなく、より迅速な実行時間、CPUチック回数の低減などを含む。例えば、本発明の一実施例では、マルチスレッドアプリケーションを実行するためのマルチスレッド処理フレームワークの利用は、マルチスレッドアプリケーションを実行するためのパラレルオーバヘッドがマルチスレッドアプリケーションのパラレル実行からのパフォーマンス利益と同等又はより大きいときには効果的でない。図2は、本発明の一実施例によるプラットフォーム200のモジュールを示す。プラットフォーム又はシステム200は、複数のプロセッサ及び/又はマルチコアプロセッサを有し、オペレーティングシステムOS250は、複数のプロセッサの少なくとも1つ又はマルチコアプロセッサのコアの1つの上で実行される。OS250は、プラットフォーム200上でマルチスレッドアプリケーション210を実行するのに利用可能なネイティブスレッド255のプールを有する。リソースマネージャ240は、ネイティブスレッド255のプールを管理し、実行用のスレッドの利用性を制御する。タスクスケジューラ230は、ネイティブスレッド255のプールから利用可能なスレッドによって実行されるべきタスクをスケジューリングする。パラレルスレッド処理ライブラリ220は、ネイティブスレッド255を用いたパラレル実行のため、マルチスレッドアプリケーション210により参照又は利用可能なファンクションを含む。本発明の一実施例では、マルチスレッドアプリケーション210は、限定することなく、OpenMulti-ProcessingOpenMP、Intel登録商標ThreadingBuildingBlocksTBB、Intel登録商標Cilk、Intel登録商標CforThroughputComputingCt、Microsoft登録商標ParallelPatternsLibraryPPL及び他の何れかのマルチスレッド処理フレームワークを含むパラレルスレッド処理ライブラリ220又はマルチスレッド処理フレームワークを利用する。本発明の一実施例では、パラレルスレッド処理ライブラリ220は、マルチスレッドアプリケーション210がサブ最適なパラレルアルゴリズムを有していることを決定し、解析モデルを用いてサブ最適なパラレルアルゴリズムの1以上のパフォーマンス問題を決定するためのロジックを有する。本発明の他の実施例では、当該ロジックは、Intel登録商標ParallelAmplifierソフトウェアの一部である。本発明のさらなる他の実施例では、当該ロジックは、プラットフォーム200の何れかのモジュールの一部とすることができる。プラットフォーム200のモジュールは別々のブロックとして示されているが、1つのモジュールの処理は、他のモジュールにより実行されてもよい。例えば、一実施例では、OS250は、リソースマネージャ240のファンクションを実行可能である。他の実施例では、パラレルスレッド処理ライブラリ220はまた、OS250に統合されてもよい。当業者は、モジュール又はファンクションの異なる組み合わせが本発明の動作に影響を与えることなく実行可能であることを容易に理解するであろう。図3は、本発明の一実施例によるワーカスレッドライフサイクル状態マシーンに基づく解析モデル300を示す。マルチスレッドアプリケーションが実行されると、パラレルオーバヘッドが、マルチスレッドアプリケーションのパラレルな実行を実行するため生じる又は必要とされる。パラレルオーバヘッドは、限定することなく、スレッドメンテナンス、ワーカスレッド間のジョブ分散などを含む。本発明の一実施例では、パラレルオーバヘッドは、アクティ及び非アクティブなパラレルオーバヘッドに分類される。本発明の一実施例では、過剰なアクティブパラレルオーバヘッドがマルチスレッドアプリケーションのパラレル実行に影響を与えうる2つのシナリオがある。アクティブパラレルオーバヘッドの第1シナリオは、1以上のワーカスレッドが自らのローカルキューからジョブユニット又はタスクを取得するライフタイムの多すぎる時間を消費するときに生じる。第1シナリオは、詳細すぎ又は小さすぎなレベルとして設定されるマルチスレッドアプリケーションのパラレル領域の粒度によるものである。アクティブパラレルオーバヘッドの第2シナリオは、1以上のワーカスレッドが他のタスクキュー又はグローバルジョブマネージャキューのタスクを検索するのにライフタイムの多すぎる時間を消費するときに生じ、すなわち、ワーカスレッドは、自らのローカルキュー以外の他のソースからタスクをスチールしている。同様に、本発明の一実施例では、過剰な非アクティブパラレルオーバヘッドがマルチスレッドアプリケーションのパラレルな実行に影響を与えうる2つのシナリオがある。非アクティブパラレルオーバヘッドの第1シナリオは、1以上のワーカスレッドがアイドル状態になると発生する。これは、それらが自らのタスクを終了したが、依然として自らのタスクを実行しているワーカスレッドの残りを支援することができないためである。1以上のワーカスレッドの過剰な待機は、非アクティブパラレルオーバヘッドを生じさせる。非アクティブパラレルオーバヘッドの第2シナリオは、利用可能なワーカスレッドのすべてを飽和又は利用するのに十分なジョブ又はタスク生成がないときに生じる。ワーカスレッドは、1つのタスクの実行から他のタスクの検索に連続的に遷移し、利用可能なタスクがなくなると、アイドル状態に入る。新たなタスクが利用可能なとき、利用可能なすべてのスレッドは再びアクティブ状態になる。新たなタスクに割り当てられない利用可能なスレッドは、他のタスクの検索への連続的な遷移を繰り返し、利用可能なタスクがなくなると、アイドル状態に入る。本発明の一実施例では、アクティブ及び非アクティブパラレルオーバヘッドの4つのシナリオは、解析モデル300を用いたマルチスレッドアプリケーションのパラレル領域の実行中に特定される。アクティブ及び非アクティブパラレルオーバヘッドの4つのシナリオの1以上が、マルチスレッドアプリケーションのパラレル領域内で発生可能である。解析モデル300は、ワーカスレッドの現在状態を記述する4つの状態を有するワーカスレッドライフサイクル状態マシーンを有する。各ワーカスレッドは、それのライフタイム中に4つの状態の1つに割り当てられる。第1状態は、各スレッドがマルチスレッドアプリケーションのパラレル領域の一部を実行するため現在状態にあるとき、各スレッドがユーザコード実行状態310に割り当てられるユーザコード実行状態310である。スケジューラバイパス316が実行されるとき、ワーカスレッドはユーザコード実行状態310に留まる。理想的には、各ワーカスレッドは、アクティブ及び非アクティブパラレルオーバヘッドを再訪化するため、ユーザコード実行状態310に留まるべきである。第2状態は、各スレッドがそれのローカルキューのジョブ又はタスクを検索するため現在状態にあるとき、ローカルキュールックアップ状態320に割り当てられるローカルキュールックアップ状態320である。各スレッドは、それが自らの現在タスクを終了し、それのタスクのローカルキューの新たなタスクを求めた後、ローカルキュールックアップ状態320に入る。第3状態は、各スレッドが他のタスクキュー又はグローバルキューのタスクを検索する現在状態にあるとき、各スレッドがグローバルタスク検索状態330に割り当てられるグローバルタスク検索状態330である。各スレッドは、ローカルキュールックアップ状態320中にそれのローカルキューのタスクを検出することができないとき、グローバルタスク検索状態330に入る。第4状態は、各スレッドが非アクティブ又はアイドル状態の現在状態にあるとき、各スレッドが待機状態340に割り当てられる待機状態340である。各スレッドは、グローバルタスク検索状態330中はタスクを検出することができないため、待機状態340に入る。新たなタスクが利用可能になると、待機状態340の各スレッドは、新たなタスクを検索するため、グローバルタスク検索状態330に戻る。状態遷移パス312,314,316,322,332,334,336,338は、解析モデル300の4つの状態間で各スレッドの状態遷移を示す。本発明の一実施例では、各スレッドの解析モデル300の4つの状態間の状態遷移の回数は、マルチスレッドアプリケーションのパラレル領域の実行中に測定又は計算される。本発明の一実施例では、マルチスレッドアプリケーション全体が、各スレッドの解析モデル300の4つの状態の間の状態遷移の回数を決定するため実行される。本発明の他の実施例では、マルチスレッドアプリケーションの一部しか、各スレッドの解析モデル300の4つの状態間の状態遷移の回数を決定するのに実行されない。実行されるマルチスレッドアプリケーションの一部は、限定することなく、測定期間、マルチスレッドアプリケーションの合計の実行時間のパーセンテージなどに基づく。本発明の一実施例では、アクティブ及び非アクティブパラレルオーバヘッドの4つのシナリオの何れがマルチスレッドアプリケーションのパラレル領域の実行中に存在するか特定するため、各スレッドの解析モデル300の4つの状態間の状態遷移の測定された回数が利用される。本発明の他の実施例では、解析モデル300の4つの状態間の状態遷移の頻度が利用される。例えば、本発明の一実施例では、当該頻度は、測定期間の長さと状態遷移の測定された回数とのレシオから決定される。本発明の一実施例では、アクティブパラレルオーバヘッドの第1シナリオは、各スレッドのタスク又はジョブの実行の頻度が閾値を超えたときに特定又は決定される。本発明の一実施例では、各ワーカスレッドにより実行されるタスクの個数が決定される。各ワーカスレッドにより実行されるタスクの個数は、それのローカルキューから取得されたタスクの個数と、他のタスクキュー又はグローバルキューから取得されたタスクの個数とを加えることによって決定される。各スレッドのタスク又はジョブ実行の頻度は、各ワーカスレッドにより実行されるタスクの個数と測定期間の長さとのレシオによって決定される。各スレッドについてそれのローカルキューから取得されたタスクの個数は、解析モデル300に示されるように、ユーザコード実行状態310からローカルキュールックアップ状態320への状態遷移パス312の生起回数から決定される。各スレッドについて他のタスクキュー又はグローバルキューから取得されるタスクの個数は、ローカルキュールックアップ状態320からグローバルタスク検索状態330への状態遷移と、グローバルタスク検索状態330を繰り返す生起回数から決定される。アクティブパラレルオーバヘッドの第1シナリオが特定されると、アクティブパラレルオーバヘッドの理由が、各ワーカスレッドがローカルキューからタスクを取得するのにそれのライフタイムの多すぎる時間を費やすことによるものである、すなわち、マルチスレッドアプリケーションのパラレル領域のタスクの粒度が詳細すぎるというレポートがユーザに送信される。アクティブパラレルオーバヘッドの第2シナリオは、他のタスクキュー又はグローバルキューから取得されるタスクの個数と、各スレッドについてそれのローカルキューから取得されるタスクの個数とのレシオが閾値を超えると特定又は決定される。本発明の一実施例では、当該閾値は1に設定される。すなわち、各スレッドがそれのローカルキューから取得されるタスク以外のタスクからスチールされるより多くのタスクを実行しているとき、第2シナリオが発生する。アクティブパラレルオーバヘッドの第2シナリオが特定されると、アクティブパラレルオーバヘッドの理由が、各ワーカスレッドが他のキュー又はグローバルキューのタスクを検索するのに多すぎる時間を費やす、すなわち、マルチスレッドアプリケーションのパラレル領域がリニアスポーニング問題を有するというレポートが、ユーザに送信される。本発明の一実施例では、グローバルタスク検索状態330からグローバルタスク検索状態330及び待機状態340への状態遷移の頻度がある閾値を超えると、非アクティブパラレルオーバヘッドの第2シナリオが特定又は決定される。これは、グローバルタスク検索状態330を繰り返す状態遷移パス336と、グローバルタスク検索状態330から待機状態340への状態遷移パス332とによって、解析モデル300において示される。非アクティブパラレルオーバヘッドの第2シナリオが特定されると、非アクティブパラレルオーバヘッドの理由が、パラレル領域のタスクの個数が利用可能な又はフリーのワーカスレッドの個数より少ないため、すなわち、マルチスレッドアプリケーションのパラレル領域の不十分なジョブ又はタスク生成のためであるというレポートが、ユーザに送信される。本発明の一実施例では、グローバルタスク検索状態330からグローバルタスク検索状態330及び待機状態340までの状態遷移の頻度が当該閾値を超えず、非アクティブパラレルオーバヘッドが閾値を超えると、非アクティブパラレルオーバヘッドの第1シナリオが特定又は決定される。非アクティブパラレルオーバヘッドの第1シナリオが特定されると、アクティブパラレルオーバヘッドの理由が、1以上のワーカスレッドが自らのタスクを終了したが、ワーカスレッドの残りを支援することができない、すなわち、スレッドの過剰な待機時間のためであるというレポートが、ユーザに送信される。非アクティブパラレルオーバヘッドの第1シナリオが特定されると、非アクティブパラレルオーバヘッドの理由がパラレル化の粒度が粗すぎたというレポートが、ユーザに送信される。これは、作業が多すぎるチャンクに分割され、生成されるチャンクの個数を制限し、その後にパラレル化を制限することを意味する。本発明の一実施例では、アクティブ及び非アクティブパラレルオーバヘッドの1以上のシナリオが特定されると、それは、生成された具体的なレポートに基づき、マルチスレッドアプリケーションの特定のパラレル領域の訂正を可能にする。これは、マルチスレッドアプリケーションのパラレルな実行の向上を可能にする。本発明の実施例は、ユーザがレポート又は結論に基づきマルチスレッドアプリケーションにおけるエラーを修正するため、解析モデル300の結果を解釈することを可能にする。本発明の一実施例では、特定の問題又はシナリオを決定するためのポインタ又は示唆が、各シナリオのレポートに加えて提供される。解析モデル300は、タスクでなくワーカスレッドライフサイクル状態に基づく。これは、同様のアプローチを用いてアクティブ及び/又は非アクティブパラレルオーバヘッドの原因を決定するため、タスクベースマルチスレッドフレームワークと非タスクベースマルチスレッドフレームワークとの双方が解析されることを可能にする。本発明の一実施例では、解析モデルは、Intel登録商標ParallelAmplifierソフトウェアに一体化できる。アクティブ及び非アクティブパラレルオーバヘッドの4つのシナリオの説明は、限定的であることは意図されない。当業者は、他のシナリオが本発明の作業に影響を与えることなく特定可能であることを容易に理解するであろう。同様に、解析モデル300の4つの状態は、限定的であることとは意図されない。当業者は、他の状態が本発明の作業に影響を与えることなく追加可能であることを容易に理解するであろう。図4は、本発明の一実施例によるマルチスレッドアプリケーションのパフォーマンスを解析するためのステップのフローチャート400を示す。ステップ410において、フローは、マルチスレッドコード又はアプリケーションのパラレル領域を特定する。ステップ415において、フロー400は、パラレル領域が検出されたか確認する。検出された場合、フロー400はステップ420に移行し、特定された各パラレル領域についてアクティブ及び非アクティブパラレルオーバヘッドを決定する。検出されなかった場合、フロー400は終了する。ステップ425において、フロー400は、アクティブ及び非アクティブパラレルオーバヘッドが閾値を超えたか確認する。本発明の一実施例では、単一の閾値がアクティブパラレルオーバヘッドと非アクティブパラレルオーバヘッドとの双方と比較される。本発明の他の実施例では、別の閾値がそれぞれアクティブ及び非アクティブパラレルオーバヘッドと比較される。閾値を超えた場合、フロー400はステップ430に移行し、マルチスレッドコード又はアプリケーションの各パラレル領域についてパラレルオーバヘッドの理由を決定する。閾値を超えない場合、フロー400は終了する。図5Aは、本発明の一実施例によるマルチスレッドアプリケーションの各パラレル領域についてパラレルオーバヘッドの理由を決定するためのステップのフローチャート500を示す。説明の簡単化のため、図5Aは、図3を参照して説明される。ステップ510において、フローは、モニタリング期間を設定し、すべての状態遷移パスカウンタをリセットする。本発明の一実施例では、状態遷移パス312,314,316,322,332,334,336,338のそれぞれについてカウンタが維持される。ステップ515において、フロー500は、設定されたモニタリング期間のマルチスレッドアプリケーションの各パラレル領域を実行する。実行中、マルチスレッドアプリケーションの各パラレル領域の各スレッドが解析モデル300の4つの状態310,320,330,340の間で遷移するとき、各状態遷移パスカウンタはインクリメントされる。ステップ520において、フロー500は、各ワーカスレッドについてタスク又はジョブの実行の頻度を決定する。ステップ525において、フロー500は、各ワークのタスクの実行の頻度が閾値を超えたか判断する。例えば、本発明の一実施例では、マルチスレッドアプリケーションの実行と比較してTBBパラレルオーバヘッドが有意でないものにするため、タスクは、5000以上のCPUチックである必要があるかもしれない。マルチスレッドアプリケーションが2ギガヘルツGHzのクロック速度で実行されるCPU上で実行されると仮定すると、400,000個のタスクが毎秒各スレッドによって実行されるべきである。本発明の一実施例では、この閾値は、毎秒400,000タスクに設定される。ステップ525において閾値を超える場合、フロー500は、ステップ530に移行し、パラレル領域と共に特定の問題を報告する。本発明の一実施例では、ステップ530は、アクティブパラレルオーバヘッドが、各ワーカスレッドがローカルキューからタスクを取得するのにそれのライフタイムの多すぎる時間を消費するためであることを報告する。ステップ525において閾値を超過しない場合、フロー500はステップ535に移行する。ステップ535において、フロー500は、他のタスクキュー又はグローバルキューから取得されるタスク、すなわち、スチールされたタスクの個数と、各スレッドについてそれのローカルキューから取得されたタスクの個数とのレシオを決定する。ステップ540において、フロー500は、当該レシオが閾値を超えたか判断する。閾値を超えている場合、フロー500は、ステップ545に移行し、パラレル領域と共に特定の問題を報告する。本発明の一実施例では、ステップ545は、アクティブパラレルオーバヘッドの理由が、各ワーカスレッドが他のタスクキュー又はグローバルキューのタスクを検出するのに多すぎる時間を費やしたことによるものであることを報告する。閾値を超えていない場合、フロー500は、図5Bにおいてステップ5Bに移行する。図5Bは、本発明の一実施例によるマルチスレッドアプリケーションの各パラレル領域のパラレルオーバヘッドの理由を決定するためのステップのフローチャート550を示す。フロー550は、ステップ5Bからステップ560に移行する。ステップ560において、フロー550は、非アクティブパラレルオーバヘッドが閾値を超えたか判断する。閾値を超えていない場合、フロー550は終了する。閾値を超えた場合、フロー550はステップ565に移行し、グローバルタスク検索状態330からグローバルタスク検索状態330及び待機状態340への状態遷移の頻度を決定する。例えば、本発明の一実施例では、フロー550は、状態遷移パス336,332の状態遷移パスカウンタの合計と、設定されたモニタリング期間の長さとのレシオを決定する。当該レシオから、各スレッドについてグローバルタスク検索状態330からグローバルタスク検索状態330及び待機状態340までの状態遷移の頻度が取得される。ステップ570において、フロー550は、各ワーカスレッドに対するグローバルタスク検索状態330からグローバルタスク検索状態330及び待機状態340までの状態遷移の頻度が閾値を超えたか判断する。閾値を超えた場合、フロー550はステップ575に移行し、パラレル領域と共に特定の問題を報告し、フロー550は終了する。本発明の一実施例では、ステップ575は、非アクティブパラレルオーバヘッドの理由が、パラレル領域のタスクの個数が利用可能な又はフリーのワーカスレッドの個数より少ないためであることを報告する。閾値を超えない場合、フロー550はステップ580に移行し、パラレル領域と共に特定の問題を報告し、フロー550は終了する。本発明の一実施例では、ステップ580は、非アクティブパラレルオーバヘッドの理由が、1以上のワーカスレッドが自らのタスクを終了したが、ワーカスレッドの残りを支援することができないためであることを報告する。図4、5A及び5Bに示されるステップは、限定的であることは意図されない。当業者は、図4、5A及び5Bに示されるステップの他のシーケンスが本発明の動作に影響を与えることなく利用可能であることを容易に理解するであろう。例えば、本発明の一実施例では、図4、5A及び5Bに示されるステップの一部はパラレルに実行される。本発明の一実施例では、ステップ425、525、540、565及び575について要求される閾値は、特定のパラレルスレッド処理ライブラリ又はマルチスレッド処理フレームワークの開発者からの推奨に基づき決定可能である。本発明の他の実施例では、ステップ425、525、540、565、575について要求される閾値は、解析モデル300の4つの状態310、320、330、340のそれぞれを実行するコストに基づき決定される。図6は、本発明の一実施例によるここに開示される方法を実現するシステムを示す。システム600は、限定することなく、デスクトップコンピュータ、ラップトップコンピュータ、ノートブック、ノートブックコンピュータ、PDAPersonalDigitalAssistant、サーバ、ワークステーション、携帯電話、モバイル計算装置、インターネット装置又は他の何れかのタイプの計算装置を含む。他の実施例では、ここに開示される方法を実現するのに用いられるシステム600は、SOCSystemOnChipシステムであってもよい。プロセッサ610は、システム600の命令を実行する処理コア612を有する。処理コア612は、限定することなく、命令をフェッチするプリフェッチロジック、命令を復号化する復号化ロジック、命令を実行する実行ロジックなどを含む。プロセッサ610は、システム600の命令及び/又はデータをキャッシュするキャッシュメモリ616を有する。本発明の他の実施例では、キャッシュメモリ616は、限定することなく、レベル1、レベル2及びレベル3キャッシュメモリ又はプロセッサ610内のキャッシュメモリの他の何れかの構成を含む。メモリコントロールハブMCH614は、プロセッサ610が揮発性メモリ632及び/又は不揮発性メモリ634を含むメモリ630にアクセス及び通信することを可能にするファンクションを実行する。揮発性メモリ632は、限定することなく、SDRAMSynchronousDynamicRandomAccessMemory、DRAMDynamicRandomAccessMemory、RDRAMRAMBUSDynamicRandomAccessMemory及び/又は他の何れかのタイプのランダムアクセスメモリ装置を含む。不揮発性メモリ634は、限定することなく、NANDフラッシュメモリ、相変化メモリPCM、ROMReadOnlyMemory、EEPROMElectricallyErasableProgrammableROM又は他の何れかのタイプの不揮発性メモリ装置を含む。メモリ630は、プロセッサにより実行される命令及び情報を格納する。メモリ630はまた、プロセッサ610が命令を実行している間、一時的な変数又は他の中間情報を格納してもよい。チップセット620は、ポイントツーポイントPtPインタフェース617,622を介しプロセッサ610と接続する。チップセット620は、プロセッサ610がシステム600の他のモジュールと接続することを可能にする。本発明の一実施例では、インタフェース617,622は、Intel登録商標QuickPathInterconnectQPIなどのPtP通信プロトコルに従って動作する。チップセット620は、限定することなく、LCDLiquidCrystalDisplay、CRTCathodeRayTubeディスプレイ、又は他の何れかの形態のビジュアルディスプレイ装置を含む表示装置640に接続する。本発明の一実施例では、プロセッサ610とチップセット620とはSOCにマージされる。さらに、チップセット620は、各種モジュール674、660、662、664、666を相互接続する1以上のバス650,655に接続する。バス650,655は、バススピード又は通信プロトコルにミスマッチがある場合、バスブリッジ672を介し相互接続されてもよい。チップセット620は、限定することなく、不揮発性メモリ660、記憶装置662、キーボード/マウス664及びネットワークインタフェース666に接続する。本発明の一実施例では、ソリッドステートドライブ102は記憶装置662である。記憶装置662は、限定することなく、ソリッドステートドライブ、ハードディスクドライブ、USBUniversalSerialBusフラッシュメモリドライブ又は他の携帯のコンピュータデータ記憶媒体を含む。ネットワークインタフェース666は、限定することなく、イーサネット登録商標インタフェース、USBインタフェース、PCIPeripheralCompoentInterconnectExpressインタフェース、無線インタフェース及び/又は他の何れか適切なタイプのインタフェースを含む何れかのタイプの周知なネットワークインタフェース規格を用いて実現される。無線インタフェースは、限定することなく、IEEE802.11規格及びそれの関連ファミリに従って動作する。HomePlugAVHPAV、UltraWideBandUWB、Bluetooth登録商標、WiMax又は他の形態の無線通信プロトコルに従って動作する。図6に示されるモジュールはシステム600内で別々のブロックとして示されるが、これらのブロックの一部によって実行されるファンクションは、単一の半導体内に一体化されてもよいし、又は2以上の別々の集積回路を用いて実現されてもよい。例えば、キャッシュメモリ616はプロセッサ610内で別々のブロックとして示されるが、キャッシュメモリ616はそれぞれプロセッサコア612に搭載可能である。本発明の他の実施例では、システム600は、複数のプロセッサ/処理コアを含むものであってもよい。ここに開示される方法は、ハードウェア、ソフトウェア、ファームウェア又はこれらの他の何れかの組み合わせにより実現可能である。開示される主題の実施例の具体例が説明されたが、当業者は、開示された主題を実現する他の多数の方法が代替的に利用されてもよいことを容易に理解するであろう。上述した説明では、開示された主題の各種態様が説明された。説明の目的のため、具体的な数字、システム及び構成が、主題の完全な理解を提供するため与えられた。しかしながら、主題が具体的な詳細なしに実現可能であることは、本開示の利益を有する当業者に明らかであろう。他の例では、開示された主題を不明りょうにしないように、周知の特徴、コンポーネント又はモジュールは、省略、簡単化、合成又は分割された。ここで用いられる動作可能であるという用語は、装置、システム、プロトコルなどが動作可能であるか、又は装置又はシステムが電力オフ状態にあるとき、それの所望の機能のため動作するよう構成されることを意味する。開示された主題の各種実施例は、ハードウェア、ファームウェア、ソフトウェア又はこれらの組み合わせにより実現されてもよく、マシーンによりアクセスされると、マシーンがタスクを実行し、抽象的なデータタイプ又は低レベルハードウェアコンテクストを規定し、又は結果を生成する命令、ファンクション、プロシージャ、データ構造、ロジック、アプリケーションプログラム、シミュレーションのための設計表現又はフォーマット、エミュレーション及び設計製造など、プログラムコードを参照して又は関連して説明されてもよい。図示される技術は、格納されているコード及びデータを用いて実現可能であり、汎用コンピュータ又は計算装置などの1以上の計算装置上で実行可能である。このような計算装置は、マシーン可読記憶媒体例えば、磁気ディスク、光ディスク、RAM、ROM、フラッシュメモリ装置、相変化メモリなど及びマシーン可読通信媒体例えば、搬送波、赤外線信号、デジタル信号などの電気、光、音響又は他の形態の伝搬信号などを用いて、コード及びデータを内部的に及びネットワークを介し他の計算装置と通信及び格納する。開示された主題は例示的な実施例を参照して説明されたが、本開示は、限定的に解釈されることを意図するものでない。例示的な実施例の各種改良は、開示された主題が属する当業者に明らかな主題の他の実施例と共に、開示された主題の範囲内にあるとみなされる。"