(57)【要約】【課題】本発明は、マルチ・プロセッサ環境でのフォールス・シェアリング（偽共有）を起こしている可能性のあるフィールドの集合を特定することを目的とする。【解決手段】本発明は上記偽共有を起こしている可能性のあるフィールドの集合を特定するための技法であって、上記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象であるデータ構造体中の単一又は複数のフィールドへのマッピングを生成し、マルチ及びシングル・プロセッサ環境夫々で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値を取得し、当該値夫々を、上記マッピングを使用して上記データ構造体のフィールドに関連付けて、パフォーマンス・カウンタ・プロファイルPCCを生成すること、上記データ構造体夫々において、上記PCCを用いて、上記フィールドの集合を特定することを含む。【選択図】図２
2015095199.tif 000002
【特許請求の範囲】
【請求項１】
マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する方法であって、コンピュータが、
前記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象である前記データ構造体中の単一又は複数のフィールドへのマッピングを生成するステップと、
前記マルチ・プロセッサ環境で前記アプリケーションを実行して収集されたパフォーマンス・カウンタの値、並びに、シングル・プロセッサ環境で前記アプリケーションを実行して収集されたパフォーマンス・カウンタの値を取得するステップと、
前記取得したパフォーマンス・カウンタの値それぞれを、前記生成されたマッピングを使用して前記データ構造体のフィールドに関連付けて、パフォーマンス・カウンタ・プロファイルを生成するステップと、
前記データ構造体それぞれにおいて、前記パフォーマンス・カウンタ・プロファイルを用いて、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップと
を実行することを含む、前記方法。
【請求項２】
前記アクセス命令が、メモリ読み込み命令、メモリ書き込み命令、及びメモリ更新命令であり、
前記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
前記パフォーマンス・カウンタ・プロファイルを生成するステップが、前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおいて、各データ構造体のフィールド毎に、
前記メモリ読み込み命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、及び、前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を関連付けるステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
前記パフォーマンス・カウンタ・プロファイルを生成するステップが、前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおいて、同じデータ構造体が有するフィールドの集合をまとめたデータ構造体毎に、
前記メモリ読み込み命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、及び、前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合を合計して、前記アクセス命令の命令カウントの合計割合を算出し、且つ、前記データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を合計して、前記データ・キャッシュ・ミス・サイクルの合計割合を算出するステップと
をさらに含む、請求項２に記載の方法。
【請求項４】
前記パフォーマンス・カウンタ・プロファイルを生成するステップが、
前記マルチ・プロセッサ環境における前記データ・キャッシュ・ミス・サイクルの前記合計割合が多い順に、前記データ構造体を並べ替えるステップ
をさらに含む、請求項３に記載の方法。
【請求項５】
前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップが、
前記マルチ・プロセッサ環境における前記アクセス命令の命令カウントの前記合計割合が前記シングル・プロセッサ環境における前記アクセス命令の命令カウントの前記合計割合と相対的に変わらず、且つ、前記マルチ・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記合計割合が前記シングル・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記合計割合よりも大きいデータ構造体を特定するステップ
をさらに含む、請求項４に記載の方法。
【請求項６】
前記パフォーマンス・カウンタ・プロファイルを生成するステップが、前記特定されたデータ構造体のうちの１つのデータ構造体のフィールド毎に、
前記マルチ・プロセッサ環境における、前記メモリ読み込み命令の命令カウントの前記アプリケーション全体の命令に対する割合、及び、前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令に対する割合と前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令に対する割合との合計割合、並びに、前記データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を関連付けて、前記マルチ・プロセッサ環境におけるパフォーマンス・カウンタ・プロファイルを生成するステップ
をさらに含む、請求項４に記載の方法。
【請求項７】
前記マルチ・プロセッサ環境におけるパフォーマンス・カウンタ・プロファイルを生成するステップが、
前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令に対する割合と前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令に対する割合との合計割合が多い順に、前記フィールドを並べ替え、さらに、前記メモリ読み込み命令の命令カウントの前記アプリケーション全体の命令に対する割合が多い順に、前記フィールドを並べ替えるステップ
をさらに含む、請求項６に記載の方法。
【請求項８】
前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップが、
前記マルチ・プロセッサ環境における前記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、前記メモリ読み込み命令の前記アプリケーション全体の命令に対する割合の累積値が所定の閾値以上になるまでのフィールドの集合を、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定するステップ
をさらに含む、請求項７に記載の方法。
【請求項９】
前記コンピュータが、
前記マルチ・プロセッサ環境における前記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令に対する割合と前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令に対する割合との合計割合の累積値が所定の閾値以上になるまでのフィールドの集合を、前記フォールス・シェアリングを起こす原因であるフィールドの集合として特定するステップ
をさらに実行することを含む、請求項７に記載の方法。
【請求項１０】
前記コンピュータが、
前記マルチ・プロセッサ環境における前記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令に対する割合と前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令に対する割合との合計割合がゼロであるフィールドの集合における前記データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合の累積値を、前記フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分であるとして特定するステップ
をさらに実行することを含む、請求項７に記載の方法。
【請求項１１】
前記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップが、
前記マルチ・プロセッサ環境における前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合が前記シングル・プロセッサ環境における前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合と相対的に変わらず、且つ、前記マルチ・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記命令実行サイクルに対する割合が前記シングル・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記命令実行サイクルに対する割合よりも大きいフィールドの集合を、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定するステップ
をさらに含む、請求項１に記載の方法。
【請求項１２】
前記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
前記パフォーマンス・カウンタ・プロファイルを生成するステップが、前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおいて、データ構造体毎に、
前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を関連付けるステップと、
前記マルチ・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記命令実行サイクルに対する割合が多い順に、前記データ構造体を並べ替えるステップ
をさらに含む、請求項１に記載の方法。
【請求項１３】
前記パフォーマンス・カウンタ・プロファイルを生成するステップが、
前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおける、前記データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合で除した値が所定の閾値以上であるデータ構造体を特定するステップ
をさらに含む、請求項１２に記載の方法。
【請求項１４】
前記フォールス・シェアリングが、リード・オンリー部分において、同じデータ構造体に含まれる書き込み又は更新される別の部分によって起きるキャッシュ・ミスの為に生じるものである、請求項１に記載の方法。
【請求項１５】
マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するコンピュータであって、
前記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象である前記データ構造体中の単一又は複数のフィールドへのマッピングを生成するマッピング手段と、
前記マルチ・プロセッサ環境で前記アプリケーションを実行して収集されたパフォーマンス・カウンタの値、並びに、シングル・プロセッサ環境で前記アプリケーションを実行して収集されたパフォーマンス・カウンタの値を取得する取得手段と、
前記取得したパフォーマンス・カウンタの値それぞれを、前記生成されたマッピングを使用して前記データ構造体のフィールドに関連付けて、パフォーマンス・カウンタ・プロファイルを生成するパフォーマンス・カウンタ・プロファイル生成手段と、
前記データ構造体それぞれにおいて、前記パフォーマンス・カウンタ・プロファイルを用いて、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するフィールド集合特定手段と
を備えている、前記コンピュータ。
【請求項１６】
前記アクセス命令が、メモリ読み込み命令、メモリ書き込み命令、及びメモリ更新命令であり、
前記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
前記パフォーマンス・カウンタ・プロファイル生成手段が、前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおいて、各データ構造体のフィールド毎に、
前記メモリ読み込み命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、前記メモリ書き込み命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、及び、前記メモリ更新命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を関連付けること
をさらに実行する、請求項１５に記載のコンピュータ。
【請求項１７】
前記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
前記フィールド集合特定手段が、
前記マルチ・プロセッサ環境における前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合が前記シングル・プロセッサ環境における前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合と相対的に変わらず、且つ、前記マルチ・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記命令実行サイクルに対する割合が前記シングル・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記命令実行サイクルに対する割合よりも大きいフィールドの集合を、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定すること
をさらに実行する、請求項１５に記載のコンピュータ。
【請求項１８】
前記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
前記パフォーマンス・カウンタ・プロファイル生成手段が、前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおいて、データ構造体毎に、
前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を関連付けること、
前記マルチ・プロセッサ環境における前記データ・キャッシュ・ミスサイクルの前記命令実行サイクルに対する割合が多い順に、前記データ構造体を並べ替えること
をさらに実行する、請求項１５に記載のコンピュータ。
【請求項１９】
前記パフォーマンス・カウンタ・プロファイル生成手段が、
前記マルチ・プロセッサ環境及び前記シングル・プロセッサ環境それぞれにおける、前記データ・キャッシュ・ミス・サイクルの前記アプリケーション全体の命令実行サイクルに対する割合を前記アクセス命令の命令カウントの前記アプリケーション全体の命令カウントに対する割合で除した値が所定の閾値以上であるデータ構造体を特定すること
をさらに実行する、請求項１８に記載のコンピュータ。
【請求項２０】
マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、前記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するためのコンピュータ・プログラムであって、コンピュータに、請求項１〜１４のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチ・プロセッサ環境でのフォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するための技法に関する。
【背景技術】
【０００２】
フォールス・シェアリングは、メモリ共有型の並列処理でしばしば生じる問題であり、異なるコア上のスレッドが同じキャッシュ・ライン上にあるそれぞれ異なる変数にアクセスする際に、一方又は両方のスレッドが、それぞれがアクセスする変数を変更した場合に発生する。１つのコアＡ上のスレッドａが上記キャッシュ・ラインに書き込みを行うと、もう一方のコアＢではそのメモリのキャッシュ・ラインが強制的に無効化される。すなわち、上記もう一方のコアＢは、当該コアＢ上のスレッドｂがアクセスする変数が実際には更新されていなくても、上記スレッドｂが変数にアクセスする際にキャッシュ・ラインを再びロードする必要がある。
【０００３】
キャッシュ・ハードウェア（例えば、コヒーレント・キャッシュ）はデータの一貫性を保証する。しかしながら、フォールス・シェアリングが頻繁に発生する場合には、マルチ・プロセッサ環境において、アプリケーション（例えば、サーバ・アプリケーション）のスケーラビリティが制限される（すなわち、コア数が増えても性能がコア数に比例しない）。
【０００４】
フォールス・シェアリングを減少乃至は除去する為にリファクタリング又はコンパイラ最適化が重要であり、無関係な変数が同じキャッシュ・ライン上に配置されないように、例えば十分離れたアドレスにデータを配置するようにしたり、又は利用しない配列などを挟むようにしたりする。
【０００５】
また、フォールス・シェアリングの発生を見積もるための既存のアプローチとして、アプリケーション中で複数のスレッドが同時に実行するコードをサンプリングで検出し、アプリケーションのコードの制御フローの分析と組み合わせて、フォールス・シェアリングの発生頻度を見積もる方法が知られている。
【０００６】
下記特許文献１は、解決しようとする問題点は、従来の技術では、共有メモリ型並列計算機用の並列プログラムへのコンパイル動作において、キャッシュのフォールスシェアリングを回避することができない点であること（段落００２１）、及び、これら従来技術の課題を解決し、並列プログラムの性能を向上させることが可能な並列化コンパイラにおけるループスケジューリング方法を提供すること（段落００２２）を記載する。
【０００７】
下記特許文献２は並列コンピュータ・システムの性能を改良するための装置であって、複数のプロセッサを備え、各プロセッサは、ローカル・キャッシュを有し、各プロセッサは、データ従属性を含まないソフトウェア・プログラム領域のプログラム・コードを実行し、各プロセッサのローカル・キャッシュは、当該ローカル・キャッシュ内のキャッシュ・ラインを更新するローカル・キャッシュ・コントローラに関連しており、前記プログラム・コードを実行中の第２プロセッサによる第１キャッシュ・ラインの偽共有の発生を検出し且つ前記第２プロセッサによる前記第１キャッシュ・ラインの前記偽共有を許可するための、第１プロセッサの第１ローカル・キャッシュに関連する第１ローカル・キャッシュ・コントローラを備え、前記第１キャッシュ・ラインの前記偽共有は、前記第１ローカル・キャッシュ・コントローラによって前記第１ローカル・キャッシュ内の前記第１キャッシュ・ラインの第１部分を更新し、その後に、第２ローカル・キャッシュ・コントローラによって第２ローカル・キャッシュ内の前記第１キャッシュ・ラインの第２部分を更新するときに発生する、上記装置を記載する（請求項１）。
【０００８】
下記特許文献３は、複数の主記憶とこれらを共有する複数のプロセッサをスイッチ型の主記憶制御装置により接続した構成のマルチ・プロセッサ方式の情報処理装置において、プロセッサが持つキャッシュと各主記憶とのデータの一貫性を維持しながらも、これにより生じるキャッシュのフォールス・シェアリングを緩和する制御装置を記載する（段落０００１）。
【０００９】
下記特許文献４は、マルチ・プロセッサ装置において、同一メモリブロックに複数のデータワードが含まれる場合に、フォールス・シェアリングが発生しても異なるプロセッサが同一メモリブロック内に含まれるデータワードを独立して更新することが可能となることを記載する（段落００８６）。
【００１０】
下記特許文献５は、無効化方式を用いているシステムにおいて、２つのプロセッサが、同一データブロック（キャッシュは主記憶から一度にブロック単位でデータをコピーする）の中のそれぞれ違うデータを利用している場合（これをfalse sharing  と呼ぶ）には、データは両方のプロセッサのキャッシュでＳ状態として保持されているので、プロセッサが書き込みするたびに他方のデータブロックが無効化されることを記載する（段落００１８）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００１−１６００３５号公報
【特許文献２】特開２０１２−１６８９３０号公報
【特許文献３】特開２００２−７３７１号公報
【特許文献４】特開平１１−３１６７１２号公報
【特許文献５】特開２００１−３４５９７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
フォールス・シェアリングの種々の態様のうち典型的であるが問題となりうるケースは、データ構造体のリード・オンリー部分において、同じデータ構造体に含まれる頻繁に更新される別の部分（すなわち、書き込み又は更新される部分）によって起きるキャッシュ・ミスの為に生じるものでありうる。
【００１３】
フォールス・シェアリングを減少乃至は除去する為にリファクタリング又はコンパイラ最適化を行うことも重要である。本発明は、上記リファクタリング又は上記コンパイラ最適化を行うために要する人的コストを低減するために、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合それ自体を特定することを目的とする。
【００１４】
また、本発明は、マルチ・プロセッサ環境でのフォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定し、以てフォールス・シェアリングを起こしている可能性のあるデータ構造体を特定することを目的とする。
【００１５】
さらに、本発明は、マルチ・プロセッサ環境でのフォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定することによって、上記フォールス・シェアリングを解消するために効果的な最適化を可能にし、スケーラビリティを改善することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、当該フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するための技法を提供する。当該技法は、マルチ・プロセッサ環境でのフォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する方法、並びに、マルチ・プロセッサ環境でのフォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
【００１７】
本発明に従う第１の態様において、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する方法であって、コンピュータが、
上記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象である上記データ構造体中の単一又は複数のフィールドへのマッピングを生成するステップと、
上記マルチ・プロセッサ環境で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値、並びに、シングル・プロセッサ環境で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値を取得するステップと、
上記取得したパフォーマンス・カウンタの値それぞれを、上記生成されたマッピングを使用して上記データ構造体のフィールドに関連付けて、パフォーマンス・カウンタ・プロファイルを生成するステップと、
上記データ構造体それぞれにおいて、上記パフォーマンス・カウンタ・プロファイルを用いて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップと
を実行することを含む。
【００１８】
本発明の一つの実施態様において、上記方法は、上記コンピュータが、上記データ構造体中それぞれにおいて、上記フォールス・シェアリングを起こしている可能性のないフィールドの集合を特定するステップをさらに実行することを含みうる。
【００１９】
本発明の一つの実施態様において、上記アクセス命令が、メモリ読み込み命令、メモリ書き込み命令、及びメモリ更新命令であり、
上記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
上記パフォーマンス・カウンタ・プロファイルを生成するステップが、上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおいて、各データ構造体のフィールド毎に、
上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、及び、上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けるステップ
をさらに含みうる。
【００２０】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイルを生成するステップが、上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおいて、同じデータ構造体が有するフィールドの集合をまとめたデータ構造体毎に、
上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、及び、上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合を合計して、上記アクセス命令の命令カウントの合計割合を算出し、且つ、上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を合計して、上記データ・キャッシュ・ミス・サイクルの合計割合を算出するステップ
をさらに含みうる。
【００２１】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイルを生成するステップが、
上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミス・サイクルの上記合計割合が多い順に、上記データ構造体を並べ替えるステップ
をさらに含みうる。
【００２２】
本発明の一つの実施態様において、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップが、
上記マルチ・プロセッサ環境における上記アクセス命令の命令カウントの上記合計割合が上記シングル・プロセッサ環境における上記アクセス命令の命令カウントの上記合計割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記合計割合が上記シングル・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記合計割合よりも大きいデータ構造体を特定するステップ
をさらに含みうる。
【００２３】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイルを生成するステップが、上記特定されたデータ構造体のうちの１つのデータ構造体のフィールド毎に、
上記マルチ・プロセッサ環境における、上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令に対する割合、及び、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合、並びに、上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けて、上記マルチ・プロセッサ環境におけるパフォーマンス・カウンタ・プロファイルを生成するステップ
をさらに含みうる。
【００２４】
本発明の一つの実施態様において、上記マルチ・プロセッサ環境におけるパフォーマンス・カウンタ・プロファイルを生成するステップが、
上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合が多い順に、上記フィールドを並べ替え、さらに、上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令に対する割合が多い順に、上記フィールドを並べ替えるステップ
をさらに含みうる。
【００２５】
本発明の一つの実施態様において、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップが、
上記マルチ・プロセッサ環境における上記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、上記メモリ読み込み命令の上記アプリケーション全体の命令に対する割合の累積値が所定の閾値以上になるまでのフィールドの集合を、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定するステップ
をさらに含みうる。
【００２６】
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
上記マルチ・プロセッサ環境における上記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合の累積値が所定の閾値以上になるまでのフィールドの集合を、上記フォールス・シェアリングを起こす原因であるフィールドの集合として特定するステップ
をさらに実行することを含みうる。
【００２７】
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
上記マルチ・プロセッサ環境における上記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合がゼロであるフィールドの集合における上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合の累積値を、上記フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分であるとして特定するステップ
をさらに実行することを含みうる。
【００２８】
本発明の一つの実施態様において、上記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するステップが、
上記マルチ・プロセッサ環境における上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合が上記シングル・プロセッサ環境における上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記命令実行サイクルに対する割合が上記シングル・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記命令実行サイクルに対する割合よりも大きいフィールドの集合を、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定するステップ
をさらに含みうる。
【００２９】
本発明の一つの実施態様において、上記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
上記パフォーマンス・カウンタ・プロファイルを生成するステップが、上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおいて、データ構造体毎に、
上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けるステップと、
上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記命令実行サイクルに対する割合が多い順に、上記データ構造体を並べ替えるステップ
をさらに含みうる。
【００３０】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイルを生成するステップが、
上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおける、上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合で除した値が所定の閾値以上であるデータ構造体を特定するステップ
をさらに含みうる。
【００３１】
本発明の一つの実施態様において、上記方法は、上記コンピュータが、上記特定されたフィールドの集合を有するデータ構造体を、フォールス・シェアリングを起こしている可能性のあるデータ構造体として特定するステップをさらに実行することを含みうる。
【００３２】
本発明の一つの実施態様において、上記マッピングを生成するステップが、対象アプリケーションのソースコードをコンパイルして生成されたアセンブラ・リスト（assembler listing）を解析して、上記マッピングを生成するステップを含みうる。
【００３３】
本発明の一つの実施態様において、上記フォールス・シェアリングが、リード・オンリー部分において、同じデータ構造体に含まれる書き込み又は更新される別の部分によって起きるキャッシュ・ミスの為に生じるものである。
【００３４】
本発明に従う第２の態様において、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するコンピュータであって、
上記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象である上記データ構造体中の単一又は複数のフィールドへのマッピングを生成するマッピング手段と、
上記マルチ・プロセッサ環境で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値、並びに、シングル・プロセッサ環境で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値を取得する取得手段と、
上記取得したパフォーマンス・カウンタの値それぞれを、上記生成されたマッピングを使用して上記データ構造体のフィールドに関連付けて、パフォーマンス・カウンタ・プロファイルを生成するパフォーマンス・カウンタ・プロファイル生成手段と、
上記データ構造体それぞれにおいて、上記パフォーマンス・カウンタ・プロファイルを用いて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するフィールド集合特定手段と
を備えている。
【００３５】
本発明の一つの実施態様において、上記フィールド集合特定手段が、
上記データ構造体中それぞれにおいて、上記フォールス・シェアリングを起こしている可能性のないフィールドの集合を特定すること
をさらに実行しうる。
【００３６】
本発明の一つの実施態様において、上記アクセス命令が、メモリ読み込み命令、メモリ書き込み命令、及びメモリ更新命令であり、
上記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
上記パフォーマンス・カウンタ・プロファイル生成手段が、上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおいて、各データ構造体のフィールド毎に、
上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、及び、上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けること
をさらに実行しうる。
【００３７】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイル生成手段が、上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおいて、同じデータ構造体が有するフィールドの集合をまとめたデータ構造体毎に、
上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、及び、上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合を合計して、上記アクセス命令の命令カウントの合計割合を算出し、且つ、上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を合計して、上記データ・キャッシュ・ミス・サイクルの合計割合を算出すること
をさらに実行しうる。
【００３８】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイル生成手段が、
上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミス・サイクルの上記合計割合が多い順に、上記データ構造体を並べ替えること
をさらに実行しうる。
【００３９】
本発明の一つの実施態様において、上記フィールド集合特定手段が、
上記マルチ・プロセッサ環境における上記アクセス命令の命令カウントの上記合計割合が上記シングル・プロセッサ環境における上記アクセス命令の命令カウントの上記合計割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記合計割合が上記シングル・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記合計割合よりも大きいデータ構造体を特定すること
をさらに実行しうる。
【００４０】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイル生成手段が、上記特定されたデータ構造体のうちの１つのデータ構造体のフィールド毎に、
上記マルチ・プロセッサ環境における、上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令に対する割合、及び、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合、並びに、上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けて、上記マルチ・プロセッサ環境におけるパフォーマンス・カウンタ・プロファイルを生成すること
をさらに実行しうる。
【００４１】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイル生成手段が、
上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合が多い順に、上記フィールドを並べ替え、さらに、上記メモリ読み込み命令の命令カウントの上記アプリケーション全体の命令に対する割合が多い順に、上記フィールドを並べ替えること
をさらに実行しうる。
【００４２】
本発明の一つの実施態様において、上記フィールド集合特定手段が、
上記マルチ・プロセッサ環境における上記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、上記メモリ読み込み命令の上記アプリケーション全体の命令に対する割合の累積値が所定の閾値以上になるまでのフィールドの集合を、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定すること
をさらに実行しうる。
【００４３】
本発明の一つの実施態様において、上記フィールド集合特定手段が、
上記マルチ・プロセッサ環境における上記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合の累積値が所定の閾値以上になるまでのフィールドの集合を、上記フォールス・シェアリングを起こす原因であるフィールドの集合として特定するステップ
をさらに実行しうる。
【００４４】
本発明の一つの実施態様において、上記フィールド集合特定手段が、
上記マルチ・プロセッサ環境における上記並べ替えられた後のパフォーマンス・カウンタ・プロファイルにおいて、上記メモリ書き込み命令の命令カウントの上記アプリケーション全体の命令に対する割合と上記メモリ更新命令の命令カウントの上記アプリケーション全体の命令に対する割合との合計割合がゼロであるフィールドの集合における上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合の累積値を、上記フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分であるとして特定するステップ
をさらに実行しうる。
【００４５】
本発明の一つの実施態様において、上記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
上記フィールド集合特定手段が、
上記マルチ・プロセッサ環境における上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合が上記シングル・プロセッサ環境における上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記命令実行サイクルに対する割合が上記シングル・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記命令実行サイクルに対する割合よりも大きいフィールドの集合を、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定すること
をさらに実行しうる。
【００４６】
本発明の一つの実施態様において、上記パフォーマンス・カウンタの値が、命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値であり、
上記パフォーマンス・カウンタ・プロファイル生成手段が、上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおいて、データ構造体毎に、
上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合、並びに、データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けるステップと、
上記マルチ・プロセッサ環境における上記データ・キャッシュ・ミスサイクルの上記命令実行サイクルに対する割合が多い順に、上記データ構造体を並べ替えること
をさらに実行しうる。
【００４７】
本発明の一つの実施態様において、上記パフォーマンス・カウンタ・プロファイル生成手段が、
上記マルチ・プロセッサ環境及び上記シングル・プロセッサ環境それぞれにおける、上記データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を上記アクセス命令の命令カウントの上記アプリケーション全体の命令カウントに対する割合で除した値が所定の閾値以上であるデータ構造体を特定すること
をさらに実行しうる。
【００４８】
本発明の一つの実施態様において、上記コンピュータが、
上記特定されたフィールドの集合を有するデータ構造体を、フォールス・シェアリングを起こしている可能性のあるデータ構造体として特定するデータ構造体特定手段をさらに備えうる。
【００４９】
本発明の一つの実施態様において、上記マッピング手段が、
対象アプリケーションのソースコードをコンパイルして生成されたアセンブラ・リストを解析して、上記マッピングを生成すること
をさらに実行しうる。
【００５０】
本発明の一つの実施態様において、上記フォールス・シェアリングが、リード・オンリー部分において、同じデータ構造体に含まれる書き込み又は更新される別の部分によって起きるキャッシュ・ミスの為に生じるものである。
【００５１】
本発明に従う第３の態様において、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、当該フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するためのコンピュータ・プログラム又はコンピュータ・プログラム製品は、コンピュータに、上記第１の態様に記載の方法の各ステップを実行させる。
【００５２】
本発明に従う第４の態様において、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するためのコンピュータであって、
単一又は複数のプロセッサと、
上記単一又は複数のプロセッサに接続されたメモリと、
上記第３の態様に記載のコンピュータ・プログラムを記憶した記憶媒体と
を備えており、
上記プロセッサが、上記コンピュータ・プログラムを上記メモリに読み込んで、当該コンピュータ・プログラムを実行する。
【００５３】
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ、ＢＤ、ハードディスク装置、ＵＳＢに接続可能なメモリ媒体、ＲＯＭ、ＭＲＡＭ、ＲＡＭ等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、上記記録媒体への格納のために、通信回線で接続する他のコンピュータ、例えばサーバ・コンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
【００５４】
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
【００５５】
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【００５６】
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行において、上記コンピュータ・プログラムのインストールされたコンピュータにおける実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明にかかる処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、１．他の言語、コード若しくは表記への変換及び、２．他の媒体への複製、のいずれか一方若しくは双方が行われた後に、本発明の実施態様に従う処理を実行することを可能にするものである。
【発明の効果】
【００５７】
本発明の実施態様に従うと、フォールス・シェアリングを起こしている可能性のあるフィールドの集合それ自体を、アプリケーション中で複数のスレッドが同時に実行しているコードをサンプリングで検出したり、アプリケーションのコードの制御フローの分析をしたりすることなしに特定することが可能になる。
【００５８】
また、本発明の実施態様に従うと、フォールス・シェアリングを起こしている可能性のあるフィールドの集合から、フォールス・シェアリングを起こしている可能性のあるデータ構造体を特定することが可能になる。
【００５９】
また、本発明の実施態様に従うと、フォールス・シェアリングを起こしている可能性のあるフィールドの集合に関連付けられたデータ・キャッシュ・ミス・サイクルを減少させる為の機会を見積もることが可能になる。
【図面の簡単な説明】
【００６０】
【図１】本発明の実施態様において使用されうるコンピュータの一例を示した図である。
【図２】本発明の実施態様に従い、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、当該フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する処理全体のフローチャートを示す。
【図３】本発明の実施態様に従い、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する為に使用されるパフォーマンス・カウンタ・プロファイルを生成し又は変形する処理の為のフローチャートを示す。
【図４Ａ】本発明の実施態様に従い、パフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、及びフォールス・シェアリングを起こす原因であるフィールドの集合を特定し、並びに、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定する処理の為のフローチャートを示す。
【図４Ｂ】本発明の実施態様に従い、パフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるデータ構造体を特定する処理の為のフローチャートを示す。
【図５Ａ】本発明の実施態様に従い、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーション（以下、「対象アプリケーション」ともいう）のソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象であるデータ構造体中の単一又は複数のフィールドへのマッピングを生成する概念図を示す。
【図５Ｂ】本発明の実施態様に従い、シングル・プロセッサ環境で上記対象アプリケーションを実行して収集されたパフォーマンス・カウンタ・プロファイル及びマルチ・プロセッサ環境で上記対象アプリケーションを実行して収集されたパフォーマンス・カウンタ・プロファイルから、アクセス命令のアクセス対象であるデータ構造体中の単一又は複数のフィールドへのマッピングを生成する概念図を示す。
【図５Ｃ】本発明の実施態様に従い、図５Ａ及び図５Ｂに示すマッピングを用いて、シングル・プロセッサ環境及びマルチ・プロセッサ環境の、データ構造体及びフィールドに従うパフォーマンス・カウンタ・プロファイルを生成する概念図を示す。
【図５Ｄ】本発明の実施態様に従い、図５Ｃに示すデータ構造体及びフィールドに従うパフォーマンス・カウンタ・プロファイル中の同じデータ構造体が有するフィールドの集合をまとめて、シングル・プロセッサ環境及びマルチ・プロセッサ環境の、データ構造体に従うパフォーマンス・カウンタ・プロファイルを生成する概念図を示す。
【図５Ｅ】本発明の実施態様に従い、図５Ｄで生成した、シングル・プロセッサ環境及びマルチ・プロセッサ環境の、データ構造体に従うパフォーマンス・カウンタ・プロファイルにおいて、マルチ・プロセッサ環境におけるデータ・キャッシュ・ミス・サイクルの合計割合が多い順に、上記データ構造体を並べ替える処理の概念図を示す。
【図５Ｆ】本発明の実施態様に従い、図５Ｅで並べ替えた後のマルチ・プロセッサ環境におけるパフォーマンス・カウンタ・プロファイル中のデータ構造体のうちから１つのデータ構造体を取り出し、当該取り出したデータ構造体中のマルチ・プロセッサ環境における、メモリ読み込み命令の命令カウントのアプリケーション全体の命令に対する割合、及び、メモリ書き込み命令の命令カウントのアプリケーション全体の命令に対する割合とメモリ更新命令の命令カウントのアプリケーション全体の命令に対する割合との合計割合、並びに、データ・キャッシュ・ミス・サイクルの上記アプリケーション全体の命令実行サイクルに対する割合を関連付けて、マルチ・プロセッサ環境の、特定の１つのデータ構造体のフィールドに従うパフォーマンス・カウンタ・プロファイルを生成する処理の概念図を示す。
【図５Ｇ】本発明の実施態様に従い、図５Ｆで生成したパフォーマンス・カウンタ・プロファイルにおいて、メモリ書き込み命令の命令カウントのアプリケーション全体の命令に対する割合とメモリ更新命令の命令カウントのアプリケーション全体の命令に対する割合との合計割合が多い順に、上記フィールドを並べ替え、さらに、メモリ読み込み命令の命令カウントのアプリケーション全体の命令に対する割合が多い順に、上記フィールドを並べ替える処理の概念図を示す。
【図６】本発明の実施態様に従い、図５Ｇで並べ替えたパフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、及び、フォールス・シェアリングを起こす原因であるフィールドの集合、並びに、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定する処理の概念図を示す。
【図７】本発明の実施態様に従い、図５Ｆで生成したパフォーマンス・カウンタ・プロファイルを用いて、マルチ・プロセッサ環境におけるアクセス命令の命令カウントの合計割合がシングル・プロセッサ環境におけるアクセス命令の命令カウントの合計割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、マルチ・プロセッサ環境におけるデータ・キャッシュ・ミスサイクルの合計割合がシングル・プロセッサ環境におけるデータ・キャッシュ・ミスサイクルの合計割合よりも大きいデータ構造体を特定する処理の概念図を示す。
【図８】本発明の実施態様に従い、図５Ｇで並べ替えた後のパフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、及び、フォールス・シェアリングを起こす原因であるフィールドの集合、並びに、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定した結果を表すグラフを示す。
【図９】本発明の実施態様に従い、フォールス・シェアリングを起こす原因であるフィールドの集合を含むデータ構造体を特定した結果を表す表を示す。
【図１０】図１に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い、Ｄマルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するコンピュータの機能ブロック図の一例を示した図である。
【発明を実施するための形態】
【００６１】
本発明の実施形態を、以下に図面に従って説明する。以下の図を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
【００６２】
本発明の実施態様において使用されうる「コンピュータ」は、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する処理を実行可能なコンピュータであれば特に限定されない。当該コンピュータは例えば、例えば、デスクトップ・コンピュータ、ノート・コンピュータ若しくは一体型パソコン、又は、サーバ・コンピュータでありうる。
【００６３】
本発明の実施態様において、「マルチ・プロセッサ環境」とは、シングル・コアのプロセッサを複数備えているコンピュータ、若しくは、マルチコアのプロセッサを一つ又は複数備えているコンピュータ、又は、これらコンピュータを仮想化により実現した仮想コンピュータをいう。「マルチ・プロセッサ環境」において、複数のコアがキャッシュを共有することによって、フォールス・シェアリングが起きる。
【００６４】
本発明の実施態様において、「シングル・プロセッサ環境」とは、シングル・コアのプロセッサを一つのみ備えているコンピュータ、又は、当該コンピュータを仮想化により実現した仮想コンピュータをいう。
【００６５】
本発明の実施態様において、「フォールス・シェアリングを検出したいアプリケーション」とは、マルチスレッドで実行されることが可能なアプリケーションであり、且つ、マルチ・プロセッサ環境及びシングル・プロセッサ環境のいずれでも同じように動作することが可能なアプリケーションをいう。なお、以下に示す各図の説明において、「対象アプリケーション」という場合には、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションを意味する。
【００６６】
図１は、本発明の実施態様において使用されうるコンピュータの一例を示した図である。
【００６７】
コンピュータ（１０１）は、１つ又は複数のＣＰＵ（１０２）とメイン・メモリ（１０３）とを備えており、これらはバス（１０４）に接続されている。ＣＰＵ（１０２）は好ましくは、３２ビット又は６４ビットのアーキテクチャに基づくものである。当該ＣＰＵ（１０２）は例えば、インテル社のＣｏｒｅ（商標）  ｉシリーズ、Ｃｏｒｅ（商標）  ２シリーズ、Ａｔｏｍ（商標）シリーズ、Ｘｅｏｎ（登録商標）シリーズ、Ｐｅｎｔｉｕｍ（登録商標）シリーズ若しくはＣｅｌｅｒｏｎ（登録商標）シリーズ、ＡＭＤ（Advanced Micro Devices）社のＡシリーズ、Ｐｈｅｎｏｍ（商標）シリーズ、Ａｔｈｌｏｎ（商標）シリーズ、Ｔｕｒｉｏｎ（登録商標）シリーズ若しくはＳｅｍｐｒｏｎ（商標）、又は、インターナショナル・ビジネス・マシーンズ・コーポレーションのＰｏｗｅｒ（商標）シリーズでありうる。
【００６８】
バス（１０４）には、ディスプレイ・コントローラ（１０５）を介して、ディスプレイ（１０６）、例えば液晶ディスプレイ（ＬＣＤ）が接続されうる。また、液晶ディスプレイ（ＬＣＤ）は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであてもよい。ディスプレイ（１０６）は、コンピュータ（１０１）上で動作中のソフトウェア（例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ（１０１）上で動作中の各種コンピュータ・プログラム）が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。また、ディスプレイ（１０６）は例えば、本発明の実施態様に従い特定された、フォールス・シェアリングを起こしている可能性のあるフィールドの集合の一覧、フォールス・シェアリングを起こす原因であるフィールドの集合の一覧、又は、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定した結果を出力しうる。
【００６９】
バス（１０４）には任意的に、例えばＳＡＴＡ又はＩＤＥコントローラ（１０７）を介して、ディスク（１０８）、例えばハードディスク又はソリッド・ステート・ドライブ（ＳＳＤ）が接続されうる。
【００７０】
バス（１０４）には任意的に、例えばＳＡＴＡ又はＩＤＥコントローラ（１０７）を介して、ドライブ（１０９）、例えばＣＤ、ＤＶＤ又はＢＤドライブが接続されうる。
【００７１】
バス（１０４）には、周辺装置コントローラ（１１０）を介して、例えばキーボード・マウス・コントローラ又はＵＳＢバスを介して、任意的に、キーボード（１１１）及びマウス（１１２）が接続されうる。
【００７２】
ディスク（１０８）には、オペレーティング・システム、例えばＷｉｎｄｏｗｓ（登録商標）ＯＳ、ＵＮＩＸ（登録商標）、ＭａｃＯＳ（登録商標）、及びＪ２ＥＥなどのＪａｖａ（登録商標）処理環境、Ｊａｖａ（登録商標）アプリケーション、Ｊａｖａ（登録商標）仮想マシン（ＶＭ）、Ｊａｖａ（登録商標）実行時（ＪＩＴ）コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他のプログラム、並びにデータが、メイン・メモリ（１０３）にロード可能なように記憶されうる。
【００７３】
ディスク（１０８）は、コンピュータ（１０１）内に内蔵されていてもよく、当該コンピュータ（１０１）がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ（１０１）がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
【００７４】
ドライブ（１０９）は、必要に応じて、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ又はＢＤからプログラム、例えばオペレーティング・システム、アプリケーション又は本発明の実施態様に従うコンピュータ・プログラムをディスク（１０８）にインストールするために使用されうる。
【００７５】
通信インタフェース（１１４）は、例えばイーサネット（登録商標）・プロトコルに従う。通信インタフェース（１１４）は、通信コントローラ（１１３）を介してバス（１０４）に接続され、コンピュータ（１０１）を通信回線（１１５）に有線又は無線接続する役割を担い、コンピュータ（１０１）のオペレーティング・システムの通信機能のＴＣＰ／ＩＰ通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線ＬＡＮ接続規格に基づく無線ＬＡＮ環境、ＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎなどのＷｉ−Ｆｉ無線ＬＡＮ環境、又は携帯電話網環境（例えば、３Ｇ又は４Ｇ環境）でありうる。
【００７６】
下記図２、図３及び図４Ａ〜図４Ｂにおいて、本発明の実施態様に従い、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するためのフローチャートを示す。また、下記図５Ａ〜図５Ｇは、上記フローチャートのステップで行われる処理の概念図を示す。さらに、下記図６、図７図８及び図９は、本発明の実施態様に従い、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定した結果を示す。
【００７７】
本発明の実施態様において、「フォールス・シェアリング」は、特には、リード・オンリー部分において、同じデータ構造体に含まれる書き込み又は更新される別の部分によって起きるキャッシュ・ミスの為に生じるものでありうる。
【００７８】
以下において、図２、図３及び図４Ａ〜図４Ｂに示すフローチャートの各ステップを説明の理解を容易にするために、図５Ａ〜図５Ｇ、及び、図６〜図８を参照しながら説明していく。
【００７９】
図２は、本発明の実施態様に従い、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、当該フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する処理全体のフローチャートを示す。
【００８０】
ステップ２０１において、コンピュータ（１０１）は、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する処理を開始する。
【００８１】
ステップ２０２において、コンピュータ（１０１）は、上記対象アプリケーションのソースコード（図５Ａ、５０１）を、例えば当該ソースコード（５０１）を格納した記録媒体（２９１）から読み取る。
【００８２】
ステップ２０３において、コンピュータ（１０１）は、ステップ２０２において上記記録媒体（２９１）から読み取ったソースコード（５０１）をコンパイラ（図５Ａ、５０２）でコンパイルして、ネイティブ・コードを作成する。ネイティブ・コードは、アセンブラ・リスト（図５Ａ、５０３）として概念的に把握されるものである。当該アセンブラ・リスト（５０３）は、上記ソースコード（５０１）をコンパイルして生成された対象プログラムと同一視することができる。当該アセンブラ・リスト（５０３）は、当業者に周知である通り、オフセット（offset）、オペコード（opcode）、及びオペランド（operands）を含む。オペコードは、機械語の１個の命令の部分であり、実行する操作（operation）の種類を指定する部分のこと及びそのコード（符号）のことである。オペランドは、操作される対象となるデータを指定する引数であり、当該オペランドの中に、あるデータ構造体中のフィールドに対応するオフセットが含まれている。
【００８３】
ステップ２０４において、コンピュータ（１０１）は、ステップ２０３で生成したアセンブラ・リスト（５０３）における上記オペランド中の上記情報から、上記対象アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象である上記データ構造体中の単一又は複数のフィールドへの第１のマッピング（５０５）を生成する。上記データ構造体は、上記したとおり、単一又は複数のフィールドを含む。フィールドは、オブジェクト・フィールドとも呼ばれる。
【００８４】
コンピュータ（１０１）は、上記第１のマッピング（５０５）を、アセンブラ・リスト（５０３）とデータ・アクセス（図５Ａ、５０４）とを関連付けて生成しうる。データ・アクセス（５０４）は、対応するアセンブラ・リスト、データ構造体、フィールド、及びアクセスの種類を含む。データは、オペランドの中において使われている。データ・アクセス（５０４）は、アセンブラ・リスト（５０３）と複数対１の関係でありうる。すなわち、複数のデータ・アクセス（５０４）がアセンブラ・リスト（５０３）の１命令に対応する。アセンブラ・リストは、使用する命令の種類と命令のオペランドなどを定義したものである。データ構造体は、連続的なメモリに配置されうる単位であり、フィールドの集合からなる。フィールドは、データ構造体中に含まれるものであり、ソースコードを記述するプログラミング言語における基本型の変数で、メモリに配置されうる単位である。アクセスの種類は、アクセス命令がメモリの読み出し、書き込み、更新のいずれであるかを表す。
【００８５】
また、ステップ２０４において、コンピュータ（１０１）は、ステップ２０４で生成された上記第１のマッピング（５０５）中のデータ・アクセス（５０４）を展開して、シングル・プロセッサ環境（２８１）の、リストに従うパフォーマンス・カウンタ・プロファイル（図５Ｂ、５０６）を生成する。当該生成されたパフォーマンス・カウンタ・プロファイル（５０６）は、生成された時点では、実行サイクル、命令カウント、及びデータ・キャッシュ・ミス・サイクルの各値は空白である。同様に、コンピュータ（１０１）は、ステップ２０４で生成された上記第１のマッピング（５０５）中のデータ・アクセス（５０４）を展開して、マルチ・プロセッサ環境（２８２）の、リストに従うパフォーマンス・カウンタ・プロファイル（図５Ｂ、５０７）を生成する。当該生成されたパフォーマンス・カウンタ・プロファイル（５０７）は、生成された時点では、実行サイクル、命令カウント、及びデータ・キャッシュ・ミス・サイクルの各値は空白である。
【００８６】
パフォーマンス・カウンタ・プロファイル（５０６）及びパフォーマンス・カウンタ・プロファイル（５０７）はそれぞれ、対応するアセンブラ・リスト、命令実行サイクル、命令カウント、データ・キャッシュ・ミス・サイクルを含む。パフォーマンス・カウンタ・プロファイル（５０６）は、アセンブラ・リスト（５０３）と０対１（プロファイルが収集されなかった場合）又は１対１（プロファイルが収集された場合）の関係にある。同様に、パフォーマンス・カウンタ・プロファイル（５０７）は、アセンブラ・リスト（５０３）と０対１（プロファイルが収集されなかった場合）又は１対１（プロファイルが収集された場合）の関係にある。
【００８７】
コンピュータ（１０１）は、アセンブラ・リスト（５０３）、並びに、パフォーマンス・カウンタ・プロファイル（５０６）及びパフォーマンス・カウンタ・プロファイル（５０７）を含む第２のマッピング（図５Ｂ、５０８）を生成する。
【００８８】
なお、ステップ２０４において、コンピュータ（１０１）は、代替的には、ステップ２０２及びステップ２０３を実行することなしに、他のコンピュータによって作成されたアセンブラ・リスト（５０３）を、当該アセンブラ・リスト（５０３）を格納した記録媒体（２９２）から読み取り、当該読み取ったアセンブラ・リスト（５０３）を用いて、上記対象アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象である上記データ構造体中の単一又は複数のフィールドへの上記第１のマッピング（５０５）を生成してもよい。
【００８９】
上記アクセス命令は例えば、メモリ読み込み命令、メモリ書き込み命令、及びメモリ更新命令を含みうる。
【００９０】
ステップ２０５において、コンピュータ（１０１）は、シングル・プロセッサ環境（２８１）で上記対象アプリケーションを実行して収集されたパフォーマンス・カウンタの値を、例えば当該パフォーマンス・カウンタの値を格納した記録媒体（２９３）から取得する。同様に、コンピュータ（１０１）は、マルチ・プロセッサ環境（２８２）で上記対象アプリケーションを実行して収集されたパフォーマンス・カウンタの値を取得する。コンピュータ（１０１）は、上記パフォーマンス・カウンタの値を、例えば当該パフォーマンス・カウンタの値を格納した記録媒体（２９３）から取得する。
【００９１】
シングル・プロセッサ環境（２８１）にあるコンピュータは、シングル・コア上で上記対象アプリケーションを実行して、パフォーマンス・カウンタを使用することによって、当該パフォーマンス・カウンタの各値を収集する。同様に、マルチ・プロセッサ環境（２８２）にあるコンピュータは、シングル・コア上で上記対象アプリケーションを実行して、パフォーマンス・カウンタを使用することによって、当該パフォーマンス・カウンタの各値を収集する。
【００９２】
パフォーマンス・カウンタは種々のイベントの値を取得することが可能である。本発明の実施態様において、パフォーマンス・カウンタによって収集される値は例えば、プロセッサの命令実行サイクルの値、命令カウントの値、及びデータ・キャッシュ・ミス・サイクルの値を含みうる。命令実行サイクルとは、ある命令を実行するのに必要なクロック・サイクルの合計である。命令カウントは、実行した命令の数である。データ・キャッシュ・ミス・サイクルは、命令実行サイクルの中でキャッシュ・ミスが発生した合計時間を命令毎に取ったものである。
【００９３】
なお、コンピュータ（１０１）は、ステップ２０３の後において、先にステップ２０５を実行し、次にステップ２０４を実行してもよい。
【００９４】
ステップ２０６において、コンピュータ（１０１）は、ステップ２０４で生成された上記第１のマッピング（５０５）及び上記第２のマッピング（５０８）、並びに、ステップ２０５で取得した、シングル・プロセッサ環境（２８１）からのパフォーマンス・カウンタの値を用いて、図５Ｃ〜図５Ｇそれぞれに示すパフォーマンス・カウンタ・プロファイル（５０９，５１０，５１１，５１２，及び５１３）を生成し又は変形する。図５Ｃ〜図５Ｇそれぞれに示すパフォーマンス・カウンタ・プロファイル（５０９，５１０，５１１，５１２，及び５１３）の詳細については、下記図３に示すフローチャートの説明において述べる。
【００９５】
ステップ２０７において、コンピュータ（１０１）は、ステップ２０６で生成又は変形されたパフォーマンス・カウンタ・プロファイル（５０９，５１０，５１１，５１２，及び５１３）のうちパフォーマンス・カウンタ・プロファイル（５１３）を用いて、一つ又は複数のデータ構造体中の特定のフィールドの集合を特定する。当該特定されたフィールドの集合が、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、又は、フォールス・シェアリングを起こす原因であるフィールドの集合である。上記一つ又は複数のデータ構造体中の特定のフィールドの集合を特定する態様の詳細については、下記図４Ａに示すフローチャートの説明において述べる。また、コンピュータ（１０１）は、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を含むデータ構造体を、フォールス・シェアリングを起こしている可能性のあるデータ構造体として特定しうる。さらに、コンピュータ（１０１）は、ステップ２０６で生成されたパフォーマンス・カウンタ・プロファイル（５１３）を用いて、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定しうる。
【００９６】
また、ステップ２０７において、コンピュータ（１０１）は、ステップ２０６で生成又は変形されたパフォーマンス・カウンタ・プロファイル（５０９，５１０，５１１，５１２，及び５１３）のうちパフォーマンス・カウンタ・プロファイル（５１１）を用いて、一つ又は複数のデータ構造体を特定しうる。当該特定されたデータ構造体が、フォールス・シェアリングを起こしている可能性のあるデータ構造体である。上記データ構造体を特定する態様の詳細については、下記図４Ｂに示すフローチャートの説明において述べる。
【００９７】
ステップ２０８において、コンピュータ（１０１）は、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する処理を終了する。
【００９８】
図３は、本発明の実施態様に従い、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する為に使用されるパフォーマンス・カウンタ・プロファイルを生成し又は変形する処理の為のフローチャートを示す。
【００９９】
ステップ３０１において、コンピュータ（１０１）は、図２に示すステップ２０６において作成されたリストに従うパフォーマンス・カウンタ・プロファイル（５０６）及びリストに従うパフォーマンス・カウンタ・プロファイル（５０７）を用いて、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する為に使用されるパフォーマンス・カウンタ・プロファイルを生成し又は変形する処理を開始する。
【０１００】
ステップ３０２において、コンピュータ（１０１）は、図２に示すステップ２０６において作成されたパフォーマンス・カウンタ・プロファイル（５０６）及びパフォーマンス・カウンタ・プロファイル（５０７）を用いて、シングル・プロセッサ環境及びマルチ・プロセッサ環境それぞれにおいて、各データ構造体のフィールド毎に%Read、%Write、及び%Update、並びに%D$Msを累積して、当該累積した値を当該フィールドに関連付ける。図５Ｃは、上記関連付けによって生成されたパフォーマンス・カウンタ・プロファイル（５０９）を示す。図５Ｃに示すパフォーマンス・カウンタ・プロファイル（５０９）は、上記関連付けによって生成されたものであり、シングル・プロセッサ環境及びマルチ・プロセッサ環境の、データ構造体及びフィールドに従うパフォーマンス・カウンタ・プロファイルである。
【０１０１】
%Readは、メモリ読み込み命令の命令カウントの上記対象アプリケーション全体の命令カウントに対する割合（すなわち、%Read＝（メモリ読み込み命令の命令カウント／対象アプリケーション全体の命令カウント））である。
【０１０２】
%Writeは、メモリ書き込み命令の命令カウントの上記対象アプリケーション全体の命令カウントに対する割合（すなわち、%Write＝（メモリ書き込み命令の命令カウント／対象アプリケーション全体の命令カウント））である。
【０１０３】
%Updateは、メモリ更新命令の命令カウントの上記対象アプリケーション全体の命令カウントに対する割合（すなわち、%Update＝（メモリ更新命令の命令カウント／対象アプリケーション全体の命令カウント））である。
【０１０４】
%D$Msは、データ・キャッシュ・ミス・サイクルの上記対象アプリケーション全体の命令実行サイクルに対する割合（すなわち、%D$Ms＝（データ・キャッシュ・ミス・サイクル／対象アプリケーション全体の命令実行サイクル））である。
【０１０５】
ステップ３０３において、コンピュータ（１０１）は、ステップ３０２で生成されたパフォーマンス・カウンタ・プロファイル（５０９）について、マルチ・プロセッサ環境及びシングル・プロセッサ環境それぞれにおいて、同じデータ構造体が有するフィールドの集合（例えば、符号５２１で示す単位や符号５２２で示す単位）をまとめた同じデータ構造体毎に、%Accessの合計割合（累積値）（%Total Access）、及び%D$Msの合計割合（累積値）（%Total D$Ms）を関連付ける。図５Ｄは、上記関連付け、及び当該関連付けによって生成されたパフォーマンス・カウンタ・プロファイル（５１０）を示す。パフォーマンス・カウンタ・プロファイル（５１０）は、シングル・プロセッサ環境及びマルチ・プロセッサ環境のデータ構造体の、データ構造体に従うパフォーマンス・カウンタ・プロファイルである。図５Ｄは上記関連付けによって変形されたパフォーマンス・カウンタ・プロファイル（５１０）を示す。図５Ｄに示すパフォーマンス・カウンタ・プロファイル（５１０）は、パフォーマンス・カウンタ・プロファイル（５０９）と異なり、フィールドの項目を有していない。
【０１０６】
%Accessは、アクセス命令の命令カウントの上記対象アプリケーション全体の命令カウントに対する合計割合（累積値）である。%Accessは、アクセス命令がメモリ読み込み命令、メモリ書き込み命令、及びメモリ更新命令である場合には、%Read、%Write及び%Updateを合計したものである。
【０１０７】
ステップ３０４において、コンピュータ（１０１）は、任意的に、パフォーマンス・カウンタ・プロファイル（５１０）において、マルチ・プロセッサ環境における%D$Msの合計割合が多い順に、上記フィールドを並べ替えうる。図５Ｅは、上記並べ替え（点線部分）、及び当該並べ替えによって変形されたパフォーマンス・カウンタ・プロファイル（５１１）を示す。図５Ｅに示すパフォーマンス・カウンタ・プロファイル（５１１）は、上記並べ替えによって変形されたものであり、シングル・プロセッサ環境及びマルチ・プロセッサ環境の、データ構造体及びフィールドに従うパフォーマンス・カウンタ・プロファイル（並べ替え後）である。
【０１０８】
図５Ｅに示すパフォーマンス・カウンタ・プロファイル（５１１）は、下記図４Ｂに示すフローチャート、すなわちパフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるデータ構造体を特定する処理の為に使用されうる。
【０１０９】
また、ステップ３０４において、コンピュータ（１０１）は任意的に、シングル・プロセッサ環境及びマルチ・プロセッサ環境それぞれにおいて、%D$Msの合計割合を%Accessの合計割合で除し、当該除した値が所定の閾値よりも大きいデータ構造体を特定しうる。ステップ３０４は、マルチ・プロセッサ環境におけるアクセス命令の命令カウントの合計割合がシングル・プロセッサ環境におけるアクセス命令の命令カウントの合計割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、マルチ・プロセッサ環境におけるデータ・キャッシュ・ミスサイクルの合計割合がシングル・プロセッサ環境におけるデータ・キャッシュ・ミスサイクルの合計割合よりも大きいデータ構造体を特定するために行われるステップである。
【０１１０】
ステップ３０５において、コンピュータ（１０１）は、任意的に、図５Ｅに示すパフォーマンス・カウンタ・プロファイル（５１１）を用いて、好ましくはマルチ・プロセッサ環境でのアクセス命令の命令カウントの累積値（％）はシングル・プロセッサ環境でのアクセス命令の命令カウントの累積値（％）と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、マルチ・プロセッサ環境でのデータ・キャッシュ・ミスがシングル・プロセッサ環境でのデータ・キャッシュ・ミスに比べて大きい増加を有するデータ構造体（例えば、図７に示す７２１、７２２、７２３、及び７２４である）を特定しうる。当該特定されたデータ構造体（図７に示す７２１、７２２、７２３、及び７２４である）は、フォールス・シェアリングを起こしている可能性のあるデータ構造体であると推定されるために、当該データ構造体中のフィールドにフォールス・シェアリングを起こしている可能性のあるフィールドが存在することが推定される。
【０１１１】
ステップ３０６において、コンピュータ（１０１）は、図５Ｆに示すパフォーマンス・カウンタ・プロファイル（５１１）又は図５Ｅに示すパフォーマンス・カウンタ・プロファイル（５１０）から、マルチ・プロセッサ環境におけるデータ構造体のうちの１つを取り出す。図５Ｆは、パフォーマンス・カウンタ・プロファイル（５１１）から、マルチ・プロセッサ環境におけるデータ構造体のうちの１つを取り出すことを示す。コンピュータ（１０１）は、図５Ｆに示すパフォーマンス・カウンタ・プロファイル（５１１）を用いる場合には、フォールス・シェアリングを起こしている可能性のあるデータ構造体を効率よく特定する為に、データ・キャッシュ・ミス・サイクルの累積値（％）が高いデータ構造体から順に、マルチ・プロセッサ環境におけるデータ構造体を１つずつ取り出しうる。
【０１１２】
ステップ３０７において、コンピュータ（１０１）は、ステップ３０６で取り出された１つのデータ構造体中のフィールド毎に、パフォーマンス・カウンタ・プロファイル（５０６）及びパフォーマンス・カウンタ・プロファイル（５０７）を用いて、当該フィールドの%Read、及び%Write OR %Update（すなわち、メモリ書き込み命令とメモリ更新命令との和）、並びに、%D$Msを関連付ける。図５Ｆは、上記関連付け、及び当該関連付けによって生成されたパフォーマンス・カウンタ・プロファイル（５１２）を示す。図５Ｆに示すパフォーマンス・カウンタ・プロファイル（５１２）は、上記関連付けによって変形されたものであり、マルチ・プロセッサ環境の、特定の１つのデータ構造体のフィールドに従うパフォーマンス・カウンタ・プロファイルである。
【０１１３】
ステップ３０８において、コンピュータ（１０１）は、ステップ３０７で生成されたパフォーマンス・カウンタ・プロファイル（５１２）において、最初に、（１）%Write OR %updateが降順になるように上記フィールドを並べ替え、(１)で順序がつかない場合には、（２）%Readが降順になるように上記フィールドを並べ替える。すなわち、コンピュータ（１０１）は、辞書式順序（辞書編集用配列）を（１）そして（２）の順序で減少させることによって、上記１つのデータ構造体中のフィールドをソートする。図５Ｇは、上記並べ替え、及び当該並べ替えによって変形されたパフォーマンス・カウンタ・プロファイル（５１３）を示す。パフォーマンス・カウンタ・プロファイル（５１３）は、マルチ・プロセッサ環境の、特定の１つのデータ構造体のフィールドに従うパフォーマンス・カウンタ・プロファイルである。
【０１１４】
ステップ３０９において、コンピュータ（１０１）は、ステップ３０６〜３０８の処理が未処理のデータ構造体があるかどうかを判断する。未処理のデータ構造体があることに応じて、コンピュータ（１０１）は、処理をステップ３０６に戻す。一方、未処理のデータ構造体がないことに応じて、コンピュータ（１０１）は、処理を終了ステップ３１０に進める。
【０１１５】
ステップ３１０において、コンピュータ（１０１）は、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する為に使用されるパフォーマンス・カウンタ・プロファイルを生成し又は変形する処理を終了する。
【０１１６】
図４Ａは、本発明の実施態様に従い、図３のステップ３０８で変形されたパフォーマンス・カウンタ・プロファイル（５１３）を用いて、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、及びフォールス・シェアリングを起こす原因であるフィールドの集合を特定し、並びに、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定する処理の為のフローチャートを示す。
【０１１７】
ステップ４０１において、コンピュータ（１０１）は、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、及びフォールス・シェアリングを起こす原因であるフィールドの集合を特定し、並びに、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定する処理を開始する。
【０１１８】
ステップ４０２において、コンピュータ（１０１）は、ステップ３０８で生成された、マルチ・プロセッサ環境の、特定の１つのデータ構造体のフィールドに従うパフォーマンス・カウンタ・プロファイル（５１３）のうちの一つを取り出す。
【０１１９】
ステップ４０３において、コンピュータ（１０１）は、上記取り出されたパフォーマンス・カウンタ・プロファイル（５１３）中の、%Readの累積値が所定の閾値以上になるまでのフィールドの集合を選択し、当該選択されたフィールドの集合を、フォールス・シェアリングを起こしている可能性のあるフィールドの集合として特定する。例えば、図６Ｃに示すパフォーマンス・カウンタ・プロファイル（５１３）中の点線（Ａ）で囲まれた部分（６１１）が当該特定されたフィールドの集合に対応する。図８は、一つのデータ構造体中の各フィールドについて、アクセス命令の命令カウントの対象アプリケーション全体の命令カウントに対する割合の累積値（％）（左軸）と、データ・キャッシュ・ミスサイクルの命令実行サイクルに対する割合の累積値（％）（右軸）とをまとめた結果のグラフである。当該図８において、フィールドＦ１０〜Ｆ３６（８１１）はアクセス・カウントの累積値は大部分がメモリ読み込命令のみによるものであり、従って当該フィールドＦ１０〜Ｆ３６（８１１）がフォールス・シェアリングを起こしている可能性のある特定されたフィールドの集合に対応する。上記フィールドＦ１０〜Ｆ３６（８１１）は、アクセス・カウントの累積値（％）の大部分がメモリ読み込み命令のみによるものであり、従って、フォールス・シェアリングを起こしている可能性のあるフィールドとして、マルチ・プロセッサ環境においてデータ・キャッシュ・ミスの大きな増加を観察するフィールドの部分でもある。
【０１２０】
また、ステップ４０３において、コンピュータ（１０１）は、上記特定されたフィールドの集合を含むデータ構造体を、フォールス・シェアリングを起こしている可能性のあるデータ構造体として特定しうる。
【０１２１】
ステップ４０４において、コンピュータ（１０１）は、上記取り出されたパフォーマンス・カウンタ・プロファイル（５１３）中の、%Writeと%Updateとの合計割合の累積値が所定の閾値以上になるまでのフィールドの集合を選択し、当該選択されたフォールス・シェアリングを起こす原因であるフィールドの集合として特定する。例えば、図６Ｃに示すパフォーマンス・カウンタ・プロファイル（５１３）中の点線（Ｂ）で囲まれた部分（６１２）が当該特定された結果に対応する。また、例えば、図８において、フィールドＦ１〜Ｆ９（８１２）は、アクセス・カウントの累積値（％）の大部分がメモリ書き込み命令又はメモリ更新命令（すなわち、メモリ書き込み命令とメモリ更新命令との和）によるものであり、従って当該フィールド（Ｆ１〜Ｆ９）（８１２）がフォールス・シェアリングを起こす原因であるフィールドの集合に対応する。
【０１２２】
ステップ４０５において、コンピュータ（１０１）は、上記取り出されたパフォーマンス・カウンタ・プロファイル（５１３）中の、%Writeと%Updateとの合計割合がゼロであるフィールドの集合における%D$Msの累積値を、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分であるとして特定する。例えば、図６に示すパフォーマンス・カウンタ・プロファイル（５１３）中の点線（Ｃ）で囲まれた部分（６１３）がフォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分に対応する。また、例えば、図８において、フィールドＦ１０〜Ｆ３６（８１１）上の楕円の点線で囲まれた部分（８１３）がフォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分に対応する。従って、コンピュータ（１０１）は、当該フィールドＦ１０〜Ｆ３６を対象アプリケーションのソースコードにおいて、フィールドＦ１〜Ｆ９と異なるキャッシュ・ラインに配置することによって、データ・キャッシュ・ミス・サイクルの累積値（％）が、２．７％から１．７％にまで下がることを見積もることが可能である。
【０１２３】
ステップ４０６において、コンピュータ（１０１）は、ステップ４０２〜ステップ４０５の処理が未処理のデータ構造体（すなわち、ステップ３０８で生成された、マルチ・プロセッサ環境の、特定の１つのデータ構造体のフィールドに従うパフォーマンス・カウンタ・プロファイル（５１３））があるかどうかを判断する。未処理のデータ構造体があることに応じて、コンピュータ（１０１）は、処理をステップ４０２に戻す。一方、未処理のデータ構造体がないことに応じて、コンピュータ（１０１）は、処理を終了ステップ４０７に進める。
【０１２４】
ステップ４０７おいて、コンピュータ（１０１）は、フォールス・シェアリングを起こしている可能性のあるフィールドの集合、及びフォールス・シェアリングを起こす原因であるフィールドの集合を特定し、並びに、フォールス・シェアリングを解消することにより期待されるデータ・キャッシュ・ミス・サイクルの減少分を特定する処理を終了する。
【０１２５】
なお、コンピュータ（１０１）は、ステップ４０３、４０４及び４０５を、任意の順番で又は同時に実行しうる。
【０１２６】
図４Ｂは、本発明の実施態様に従い、パフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるデータ構造体を特定する処理の為のフローチャートを示す。
【０１２７】
ステップ４１１において、コンピュータ（１０１）は、上記フォールス・シェアリングを起こしている可能性のあるデータ構造体を特定する処理を開始する。
【０１２８】
ステップ４１２において、コンピュータ（１０１）は、ステップ３０４で並べ替えられた、シングル・プロセッサ環境及びマルチ・プロセッサ環境の、データ構造体に従うパフォーマンス・カウンタ・プロファイルを取り出す。
【０１２９】
ステップ４１３において、コンピュータ（１０１）は、マルチ・プロセッサ環境での%D$Msの合計割合が、シングル・プロセッサ環境での%D$Msの合計割合に比べて大きな増加を有するデータ構造体を特定する。例えば、図７は、データ構造体Ｓ１〜Ｓ１５それぞれにおいて、アクセス命令の命令カウントの対象アプリケーション全体の命令カウントに対する割合の累積値（％）（７０１）と、データ・キャッシュ・ミスサイクルの命令実行サイクルに対する割合の累積値（％）（７１１）とをまとめた結果のグラフである。図７に示す当該結果において、データ構造体Ｓ１〜Ｓ１５は、%D$Msの合計割合でデータ構造体が並べ替えられた後のデータ構造体に対応する。データ構造体Ｓ１〜Ｓ４に注目してみると、アクセス命令の命令カウントの累積値（％）は、シングル・プロセッサ環境（１コア）とマルチ・プロセッサ環境（６４コア）との間で相対的に変わらない（言い換えれば、相対的に増えていない）。しかしながら、データ・キャッシュ・ミス・サイクルの累積値（％）は、図７上の楕円点線（７２１、７２２、７２３及び７２４）内に示されているように、シングル・プロセッサ環境（１コア）とマルチ・プロセッサ環境（６４コア）との間で大きな違いがある。従って、図７に示す当該結果において、データ構造体Ｓ１〜Ｓ４は、フォールス・シェアリングを起こしている可能性のあるデータ構造体であると推定される。
【０１３０】
ステップ４１４において、コンピュータ（１０１）は任意的に、シングル・プロセッサ環境及びマルチ・プロセッサ環境それぞれにおいて、%D$Msの合計割合を%Accessの合計割合で除し、当該除した値が、所定の閾値よりも大きいデータ構造体を特定しうる。ステップ４１４は、マルチ・プロセッサ環境におけるアクセス命令の命令カウントの合計割合がシングル・プロセッサ環境におけるアクセス命令の命令カウントの合計割合と相対的に変わらず（言い換えれば、相対的に増えていないが）、且つ、マルチ・プロセッサ環境におけるデータ・キャッシュ・ミスサイクルの合計割合がシングル・プロセッサ環境におけるデータ・キャッシュ・ミスサイクルの合計割合よりも大きいデータ構造体を特定するために行われるステップである。
【０１３１】
ステップ４１５において、コンピュータ（１０１）は、上記フォールス・シェアリングを起こしている可能性のあるデータ構造体を特定する処理を終了する。
【０１３２】
図９は、本発明の実施態様に従い、フォールス・シェアリングを起こす原因であるフィールドの集合を含むデータ構造体を特定した結果を表す表を示す。
【０１３３】
図９において、データ構造体Ｓ１、Ｓ３、Ｓ４、Ｓ７、Ｓ９、Ｓ１２及びＳ１５（図７に示すデータ構造体Ｓ１、Ｓ３、Ｓ４、Ｓ７、Ｓ９、Ｓ１２及びＳ１５と同じである）が本発明の実施態様に従いフォールス・シェアリングを起こしている可能性のあるデータ構造体として特定されており、また、各データ構造体におけるデータ・キャッシュ・ミスサイクルの命令実行サイクルに対する割合の累積値（％）が、メモリ書き込み命令又はメモリ更新命令と、メモリ読み込み命令とでそれぞれ示されている。
【０１３４】
また、図９に示す表は、当該データ構造体Ｓ１、Ｓ３、Ｓ４、Ｓ７、Ｓ９、Ｓ１２及びＳ１５をリファクタリングすることによって、データ・キャッシュ・ミスの累積値（％）を、７．１％取り除くことが可能であるという見積もりを示している。
【０１３５】
図１０は、図１に従うコンピュータ（１０１）のハードウェア構成を好ましくは備えており、本発明の実施態様に従い、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するコンピュータの機能ブロック図の一例を示した図である。
【０１３６】
コンピュータ（１００１）は、本発明の実施態様に従い、マルチ・プロセッサ環境でのフォールス・シェアリングを検出したいアプリケーションにおいて、上記フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定するコンピュータであり、例えば図１に示すコンピュータ（１０１）である。
【０１３７】
コンピュータ（１００１）は、マッピング手段（１０１２）、取得手段（１０１３）、パフォーマンス・カウンタ・プロファイル生成手段（１０１４）、フィールド集合特定手段（１０１５）、及びデータ構造体特定手段（１０１６）、並びに任意的に、コンパイル手段（１０１１）を備えている。
【０１３８】
コンパイル手段（１０１１）は、対象アプリケーションのソースコードを、例えば当該ソースコードを格納した記録媒体（２９１）から読み取り、当該読み取ったソースコードをコンパイルして、アセンブラ・リストを生成する。
【０１３９】
コンパイル手段（１０１１）は、図２に示すステップ２０２〜２０３を実行しうる。
【０１４０】
マッピング手段（１０１２）は、コンパイル手段（１０１１）によって生成されたアセンブラ・リストを用いて、上記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象であるデータ構造体中の単一又は複数のフィールドへのマッピングを生成しうる。代替的には、マッピング手段（１０１２）は、他のコンピュータに備えられたコンパイル手段（１０１１）によって生成されたアセンブラ・リストを、当該アセンブラ・リストを格納した記録媒体（２９２）から読み取り、当該読み取ったアセンブラ・リストを用いて、上記アプリケーションのソースコードにおける単一又は複数のデータ構造体にアクセスする為のアクセス命令から当該アクセス命令のアクセス対象であるデータ構造体中の単一又は複数のフィールドへのマッピングを生成しうる。
【０１４１】
マッピング手段（１０１２）は、図２に示すステップ２０４を実行しうる。
【０１４２】
取得手段（１０１３）は、マルチ・プロセッサ環境で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値、並びに、シングル・プロセッサ環境で上記アプリケーションを実行して収集されたパフォーマンス・カウンタの値を、例えばパフォーマンス・カウンタの値（２９３）を格納した記録媒体から取得する。
【０１４３】
取得手段（１０１３）は、図２に示すステップ２０５を実行しうる。
【０１４４】
パフォーマンス・カウンタ・プロファイル生成手段（１０１４）は、取得手段（１０１３）が取得したパフォーマンス・カウンタの値それぞれを、マッピング手段（１０１２）が生成したマッピングを使用してデータ構造体のフィールドに関連付けて、パフォーマンス・カウンタ・プロファイルを生成する。
【０１４５】
パフォーマンス・カウンタ・プロファイル生成手段（１０１４）は、図２に示すステップ２０６、及び図３に示す全てのステップ３０１〜３１０を実行しうる。
【０１４６】
フィールド集合特定手段（１０１５）は、データ構造体それぞれにおいて、パフォーマンス・カウンタ・プロファイル生成手段（１０１４）が生成したパフォーマンス・カウンタ・プロファイルを用いて、フォールス・シェアリングを起こしている可能性のあるフィールドの集合を特定する。
【０１４７】
フィールド集合特定手段（１０１５）は、図２に示すステップ２０７、及び図４Ａに示す全てのステップ４０１〜４０７を実行しうる。
【０１４８】
データ構造体特定手段（１０１６）は、フィールド集合特定手段（１０１５）が特定したフィールドの集合を有するデータ構造体を、フォールス・シェアリングを起こしている可能性のあるデータ構造体として特定する。
【０１４９】
データ構造体特定手段（１０１６）は、図４Ｂに示す全てのステップ４１１〜４１５を実行しうる。
【図１】
2015095199.tif 000003
【図２】
2015095199.tif 000004
【図３】
2015095199.tif 000005
【図４Ａ】
2015095199.tif 000006
【図４Ｂ】
2015095199.tif 000007
【図５Ａ】
2015095199.tif 000008
【図５Ｂ】
2015095199.tif 000009
【図５Ｃ】
2015095199.tif 000010
【図５Ｄ】
2015095199.tif 000011
【図５Ｅ】
2015095199.tif 000012
【図５Ｆ】
2015095199.tif 000013
【図５Ｇ】
2015095199.tif 000014
【図６】
2015095199.tif 000015
【図９】
2015095199.tif 000016
【図１０】
2015095199.tif 000017
【図７】
2015095199.tif 000018
【図８】
2015095199.tif 000019