JP5118744B2 - ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置 - Google Patents

ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置 Download PDF

Info

Publication number
JP5118744B2
JP5118744B2 JP2010286087A JP2010286087A JP5118744B2 JP 5118744 B2 JP5118744 B2 JP 5118744B2 JP 2010286087 A JP2010286087 A JP 2010286087A JP 2010286087 A JP2010286087 A JP 2010286087A JP 5118744 B2 JP5118744 B2 JP 5118744B2
Authority
JP
Japan
Prior art keywords
thread
helper
counter
main
main thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010286087A
Other languages
English (en)
Other versions
JP2011090705A (ja
Inventor
ワン、ホン
ワン、ペリー
ギルカール、ミランダ
秀樹 齋藤
ラベリー、ダニエル
ホフレーナー、ゲロルフ
ティエン、ジンミン
シェン、ジョン
リャオ、シー−ウェイ
キム、ドンクン
ハーブ、グラント
シャー、サンジブ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2011090705A publication Critical patent/JP2011090705A/ja
Application granted granted Critical
Publication of JP5118744B2 publication Critical patent/JP5118744B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Description

この開示は、複数のヘルパースレッドに関し、より詳しくは、ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置に関する。
コンシューマはより高速なコンピュータを要求し続けている。同時マルチスレッディング(SMT)のようなマルチスレッディング技術は、1つのプロセッサダイ領域に対する限られたインパクトで、スループットパフォーマンスを増大させる1つの効果的な方法である。SMTは、複数のプロセッシングスレッドをパラレルに実行することによって、プロセッサのスループットを増加させる。しかしながら、多くのソフトウェアアプリケーションはシングルスレッドであって、それゆえマルチスレッディング技術を利用しないので、SMTの恩恵を受けない。
さらに、プロセッサ速度とメモリ速度との間のギャップは、プロセッサ速度がメモリ速度を超えて広がり続けている。その結果、コンピュータ性能は、次第にプロセッサキャッシュ層の効率によって決定されようになっている。複数の命令がシステムメモリからキャッシュメモリに転送される処理であるプリフェッチングは、キャッシュ層の効率を向上させるための良く知られた効果的な技術である。しかしながら、プリフェッチングだけでは、ソフトウェアアプリケーションがキャッシュメモリのスピードから恩恵を受けることが可能となることを保証し得ない。さらに、プリフェッチされた変数をソフトウェアアプリケーションが使用することができるようになる前にプリフェッチされた変数がキャッシュから削除されることを防ぐためには、いくつかの努力が必要である。
開示されたシステムのための使用環境を示すコンピュータシステムの一例のブロック図である。
開示されたシステムのための使用環境を示すコンピュータシステムの他の例のブロック図である。
ソフトウェアアプリケーションにおけるメモリ待ち時間を低減する方法の一例を実装すべく1つのデバイスによって実行され得る機械可読命令の例を代表するフローチャートである。
1つのヘルパースレッドに対して1つのメインスレッドの実行を管理する方法の一例を実装すべく1つのデバイスによって実行され得る機械可読命令の例を代表するフローチャートである。
1つのメインレッドに対して1つのヘルパースレッドの実行を管理する方法の一例を実装すべく1つのデバイスによって実行され得る機械可読命令の例を代表するフローチャートである。
全般的に、開示されたシステムは、メモリ待ち時間を低減することを目的として、ソフトウェアアプリケーションのメインスレッド内の複数の変数及び/又は複数の命令をプリフェッチする複数のヘルパースレッドを使用する。ソフトウェアアプリケーションは、キャッシュミス及び長いメモリ待ち時間のために解析され、ヘルパースレッドを生成してヘルパースレッド及びメインスレッドを管理すべく、コンパイラランタイム命令がソフトウェアアプリケーションに加えられる。ヘルパースレッドは、複数の変数及び/又は複数の命令をプリフェッチすべくメインスレッドから生成され、プリフェッチされた複数の変数及び/又は複数の命令をメインスレッドがアクセスするためにキャッシュする。キャッシュされた複数の変数及び/又は複数の命令が、メインスレッドがキャッシュにアクセス可能になる前にキャッシュから削除されることを防ぐべく、メインスレッド及びヘルパースレッドの実行を調整するカウンティングメカニズムがメインスレッド及びヘルパースレッドに加えられる。
図1は、開示されたシステムのための使用環境を示すコンピュータシステムの一例のブロック図を示す。コンピュータシステム100は、パーソナルコンピュータ(PC)又は他の任意のコンピューティングデバイスであってよい。図示された例では、コンピュータシステム100は、電源104によって給電されるメインプロセッシングユニット102を備える。メインプロセッシングユニット102は、システム相互接続108によってメインメモリデバイス110、フラッシュメモリデバイス112、及び1以上のインタフェース回路114に電気的に結合された1つのプロセッサ106を含んでよい。一例では、システム相互接続108は、アドレス/データバスである。無論、当業者は、プロセッサ106を他の複数のデバイス110、112、及び114に接続すべくバス以外の複数の相互接続が使用され得ることを容易に理解するだろう。例えば、1以上の専用線及び/又はクロスバが、プロセッサ106を他の複数のデバイス110、112、及び114に接続すべく使用されてよい。
プロセッサ106は、Intel Pentium(登録商標)ファミリのマイクロプロセッサ、Intel Itanium(登録商標)ファミリのマイクロプロセッサ、Intel Centrino(登録商標)ファミリのマイクロプロセッサ、及び/又はIntel XScale(登録商標)ファミリのマイクロプロセッサからのプロセッサのような、よく知られた任意のタイプのプロセッサを含む。さらに、プロセッサ106は、スタティックランダムアクセスメモリ(SRAM)のような、よく知られた任意のタイプのキャッシュメモリを有してよい。メインメモリデバイス110は、ダイナミックランダムアクセスメモリ(DRAM)及び/又は任意の他の形式のランダムアクセスメモリを有してよい。例えば、メインメモリデバイス110は、ダブルデータレートランダムアクセスメモリ(DDRAM)を有してよい。メインメモリデバイス110は、不揮発性メモリを有してもよい。一例では、メインメモリデバイス110は、よく知られた方法でプロセッサ106によって実行されるソフトウェアプログラムを記憶する。フラッシュメモリデバイス112は、任意のタイプのフラッシュメモリデバイスであってよい。フラッシュメモリデバイス112は、コンピュータシステム100をブートするために使用されるファームウェアを記憶してよい。
(複数の)インタフェース回路114は、イーサネット(登録商標)インタフェース及び/又はユニバーサルシリアルバス(USB)インタフェースのような、よく知られた任意のタイプのインタフェース規格を用いて実装されてよい。1以上の入力デバイス116が、データ及びコマンドをメインプロセッシングユニット102に入力すべく複数のインタフェース回路114に接続されてよい。例えば、入力デバイス116は、キーボード、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント、及び/又は音声認識システムであってよい。
1以上のディスプレイ、プリンタ、スピーカ、及び/又は他の出力デバイス118が、1以上のインタフェース回路114を介してメインプロセッシングユニット102に接続されてもよい。ディスプレイ118は、陰極線管(CRT)、液晶表示装置(LCD)、又は任意の他のタイプのディスプレイであってよい。ディプレイ118は、メインプロセッシングユニット102の動作中に生成されたデータの視覚的な指示を生成する。その視覚的な指示は、人間オペレータの入力用のプロンプト、計算された値、検出されたデータ等を含む。
コンピュータシステム100は、1以上の記憶デバイス120を備える。例えば、コンピュータシステム100は、1以上のハードドライブ、コンパクトディスク(CD)ドライブ、デジタル多目的ディスクドライブ(DVD)、及び/又は他の複数のコンピュータメディア入出力(I/O)デバイスを備える。
コンピュータシステム100は、ネットワーク124への接続を介して、他の複数のデバイス122とデータを交換してもよい。ネットワーク接続は、イーサネット(登録商標)接続、デジタル加入者線(DSL)、電話線、同軸ケーブル等のような、任意のタイプのネットワーク接続であってよい。ネットワーク124は、インターネット、電話ネットワーク、ケーブルネットワーク、及び/又は無線ネットワークのような、任意のタイプのネットワークであってよい。ネットワークデバイス122は、任意のタイプのネットワークデバイス122であってよい。例えば、ネットワークデバイス122は、クライアント、サーバ、ハードドライブ等であってよい。
コンピュータシステム100は、複数のソフトウェアアプリケーションを実行すべく使用されてよい。ワードプロセッサ、コンピュータゲーム、及び/又は技術開発ツールのような種々のタイプのソフトウェアアプリケーションが、コンピュータシステム100上で使用され得る。さらに、ソフトウェアプロファイラ及び/又はソフトウェアパフォーマンス解析が、ソフトウェアアプリケーションがいかに適切に実行されているかを判断すべくコンピュータシステム100によって実行され得る。コンピュータシステム100は、コンピュータシステム100上において向上されたパフォーマンスを得るために最適化された複数のソフトウェアアプリケーションを実行してもよい。
図2は、開示されたシステムのための使用環境を示すコンピュータシステムの他の例のブロック図を示す。この例では、コンピュータシステム200は、1つのプロセッサ202、1つのコンパイラ204、1つのメインメモリ206、1つのパフォーマンス解析ツール208、及び1つのソフトウェアアプリケーション210を備える。
繰り返すと、プロセッサ202は、Intel Pentium(登録商標)ファミリのマイクロプロセッサ、Intel Itanium(登録商標)ファミリのマイクロプロセッサ、Intel Centrino(登録商標)ファミリのマイクロプロセッサ、及び/又はIntel XScale(登録商標)ファミリのマイクロプロセッサからのプロセッサのような、よく知られた任意のタイプのプロセッサを含む。メインメモリデバイス206は、ダイナミックランダムアクセスメモリ(DRAM)及び/又は任意の他の形式のランダムアクセスメモリを有してよい。メインメモリデバイス206はまた、キャッシュ層のためのメモリを有してよい。キャッシュ層は、1つのキャッシュを有してよいし、異なるサイズ及び/又はアクセス速度を持ついくつかのレベルのキャッシュであってもよい。例えば、キャッシュ層は、3レベルのオンボードキャッシュメモリを有してよい。第1レベルのキャッシュは、最速のアクセス時間を持つ、最小のキャッシュであってよい。追加のレベルのキャッシュは、サイズ及びアクセス時間が劇的に増大している。
典型的には、コンパイラ204は、C、C++、Java(登録商標)、又はBasicのような任意のタイプのプログラミング言語を解釈する、任意のタイプのコンパイラであってよい。コンパイラ204は、ソフトウェアアプリケーションのコードリストを読んで、プロセッサ202及び/又はコンピュータシステム200が解釈して実行することができる複数の命令を生成することによって、ソフトウェアアプリケーションのコードリストからソフトウェアアプリケーション210を生成する。
パフォーマンス解析ツール208は、ソフトウェアアプリケーションのランタイムパフォーマンスに関するフィードバックを提供する装置である。パフォーマンス解析ツール208は、プロセッサ202及び/又はコンピュータシステム200がソフトウェアアプリケーション210を実行している間におけるコンピュータシステムの使用量(例えば、プロセッサ使用量、メモリ使用量、タイマ、データバス等)をモニタする。パフォーマンス解析ツール208は、ソフトウェアアプリケーションのパフォーマンスのボトルネック及び/又はリソース使用量に関するフィードバックを提供する。例えば、フィードバックは、ソフトウェアアプリケーション210のそれぞれのセクションにおけるキャッシュヒット率、キャッシュミス率、プロセッサ使用量、メモリ待ち時間、メモリ使用量、及び消費時間を含んでよい。
図3は、ソフトウェアアプリケーションにおけるメモリ待ち時間を低減する方法の一例を実装すべく1つのデバイスによって実行され得る機械可読命令の代表的な一フローチャートを示す。好ましくは、図示されたプロセス300は、1以上のメモリ(例えば、フラッシュメモリ112及び/又はハードディスク120)に記憶されて1以上のプロセッサ(例えば、プロセッサ106及び/又は202)によってよく知られた方法で実行される、1以上のソフトウェアプログラムで実施されてよい。一方で、プロセス300のいくつか又は全てのブロックは、手動及び/又はいくつかの他のデバイスによって実行されてよい。プロセス300が図3に示されたフローチャートを参照して説明されるが、当業者は、プロセス300を実行する多くの他の方法を使用し得ることを容易に理解できるだろう。例えば、多くのブロックの順番が変更され、1以上のブロックのオペレーションが変えられ、複数のブロックが結合され、及び/又は複数のブロックが削除されてよい。
全般的に、プロセス例300は、メモリアクセス時間及び/又はキャッシュミスによりパフォーマンスボトルネックを持つソフトウェアアプリケーション210のエリアを特定する、パフォーマンス解析ツール208を使用する。このパフォーマンス情報を用いて、コンパイラ204は、複数のコンパイラランタイム命令を生成して、当該複数の命令をソフトウェアアプリケーション210に挿入する。複数のコンパイラランタイム命令は、ボトルネックをもたらしているとパフォーマンス解析ツール208により特定された複数の変数をプリフェッチすることによってパフォーマンスボトルネックを緩和するヘルパースレッドを生成する。コンパイラ204は、ヘルパースレッドの実行ポイントがメインスレッドの実行ポイントの前に進みすぎたり後に遅れすぎたりすることを防ぐことを目的として、ヘルパースレッド内にカウンティングメカニズムの一部を挿入し、かつ、メインスレッド内にカウンティングメカニズムの一部を挿入する。
プロセス例300は、ソフトウェアアプリケーション210を解析することによって開始する(ブロック302)。パフォーマンス解析ツール208は、キャッシュミス及び/又はメモリ待ち時間によりパフォーマンスボトルネックが発生するソフトウェアアプリケーション210のエリアを特定する。パフォーマンス解析ツール208の一例は、Vtune(登録商標)パフォーマンス・アナライザツールである。Vtune(登録商標)パフォーマンス・アナライザツールは、ソフトウェアの複数のエリアでどれだけ時間が費やされたか、ソフトウェアアプリケーション210内のソフトウェアファンクション間の結びつき、リソース使用量(例えば、ソフトウェアアプリケーション210がどれだけRAMを使用しているか、又はソフトウェアアプリケーション210が使用しているCPU時間のパーセンテージ)、及び巨大なマルチスレッドアプリケーションにおける個々のスレッドのパフォーマンスについての情報をユーザに提供する。
パフォーマンス解析ツール208がソフトウェアアプリケーション210の解析を終了した後、プロファイリング情報がコンパイラ204(ブロック304)に送られる。コンパイラ204は、パフォーマンス解析ツール208からのプロファイリング情報を処理して、パフォーマンスボトルネックを緩和するためにコンパイラ204がソフトウェアアプリケーション210のいずれの複数のエリアを修正するかを決定する。一実装例では、コンパイラ204は、キャッシュミス及び/又はメモリ待ち時間によりパフォーマンスボトルネックになっているソフトウェアアプリケーションの複数のエリアを特定するリストを受け取ってよい。コンパイラ204は、それから、最も高いキャッシュミス率及び/又は最大のメモリアクセス時間を持つ複数のコードエリアを特定して、ソフトウェアアプリケーション210のこれらのエリアを変更する。
コンパイラ204は、パフォーマンス解析ツール208によって特定されたソフトウェアアプリケーション210のエリア内の複数の変数をプリフェッチするためにヘルパースレッドを生成して管理すべく、複数のコンパイラランタイム命令を生成して当該命令をメインスレッドに挿入することによって、パフォーマンスボトルネックを緩和することを試みる(ブロック306)。ヘルパースレッドの生成を実装する方法の一例は、1つの命令_ssp_beginを生成して、メインスレッド内にその命令を挿入することである。この命令は、初期にはメインスレッドのみが存在する、1つのスレッドチーム(例えば、スレッド及びそのスレッドによって生まれたヘルパースレッド)を生成する。コンピュータシステム200によって維持されるスレッドプールからヘルパースレッドを生むべく、1つの第2コンパイラランタイム命令_ssp_spawn_helperも生成されてメインスレッドに挿入される。1つの第3コンパイラランタイム命令_ssp_endが、メインスレッドに関連する全てのヘルパースレッドを終了すべくソフトウェアアプリケーション210内で生成される。
コンパイラがコンパイラランタイム命令を生成して、ヘルパースレッドを生むべくメインスレッド内に命令を挿入した後、そのヘルパースレッドコード(例えば、ヘルパースレッドを構成する複数のソフトウェア命令)が生成される。ヘルパースレッドコードを生成する方法の一例は、パフォーマンス解析ツール208から受け取ったプロファイリング情報をコンパイラ204に使用させ、キャッシュミスをひき起こすソフトウェアアプリケーションの複数のエリア内の複数の変数を特定することである。キャッシュミスを招く複数の変数が特定された後、コンパイラは、複数の変数にアクセスして(例えば、変数をレジスタにアサインして)複数の変数をキャッシュすべく、ヘルパースレッドのボディー内で複数の命令を生成する。
ヘルパースレッドコードを生成する方法の他の例は、ヘルパースレッドコードを生成して、ヘルパースレッド及びメインスレッドを管理する(例えば、新しい複数のスレッドを生成したり、メインスレッド及び/又はヘルパースレッドの実行を制御したりする等)複数のプラグマステートメントを使用することをソフトウェア開発者に許容することである。1つのスレッドグラフが、ヘルパースレッドコードを生成することをソフトウェア開発者に可能にするメソッドと、ヘルパースレッドコードを生成することをコンパイラに可能にするメソッドとの間でのコードの再利用を可能にするために使用されてよい。スレッドグラフは、1つの命令シーケンス又は1つのコード領域を表現したものであり、1つのスレッドと1つのヘルパースレッドとの間のスレッドスポーニングを示す。ユーザによって挿入されたプラグマステートメント及びコンパイラによって生成された複数のコンパイラランタイム命令はスレッドグラフを共有して、ヘルパースレッドコード生成モジュールが共有されることを可能にする。
コンパイラ204はまた、ヘルパースレッド及びメインスレッドにカウンティングメカニズムを挿入する(ブロック308)。カウンティングメカニズムは、ヘルパースレッド及びメインスレッドのパラレルな実行が、1つのスレッドの実行が他方のスレッドの実行の前に進みすぎたり後に遅れすぎたりすることを防ぐように調整されることを可能にする。メインスレッド及び複数のヘルパースレッドの相対的な同期化は、変数が、ヘルパースレッドによってプリフェッチされてキャッシュされ、メインスレッドが当該変数にアクセスする機会を得る前にキャッシュから削除されることを防ぐのに役立つ。その結果、メインスレッド及び複数のヘルパースレッドの相対的な同期化は、ヘルパースレッドが防ぐべく生成したキャッシュミスにメインスレッドが直面する機会を低減する。
プロセス例300の結果、コンピュータシステム100で実行され得る最適化されたソフトウェアアプリケーションが生成される。最適化されたソフトウェアアプリケーションは、マルチスレッディング技術を利用すべく最適化され、複数の変数をプリフェッチするヘルパースレッドを生成する複数の命令及びヘルパースレッド及びメインスレッドの実行を調整するカウンティングメカニズムを含む。
図4及び5は、複数のソフトウェアカウンタ及当該複数のカウンタの値に応答してヘルパースレッド及びメインスレッドの実行を制御する複数のコンパイラランタイム命令を用いて、カウンティングメカニズムをヘルパースレッド及びメインスレッド内に実装する方法の一例を示す。当業者は、カウンティングメカニズムを実装する他の多くの方法が使用し得ることを容易に理解するだろう。例えば、カウンタの数は変更可能であり、ヘルパースレッド及びメインスレッドの実行を調整すべくメールボックスシステムが使用され得る。カウンティングメカニズムを実装する方法例では、カウンティングメカニズムはパラレルに動作する2つの部分を含む。カウンティングメカニズムの第1部分は、メインスレッドの実行を制御すべく使用され(例えば、プロセス400)、図4に示される。カウンティングメカニズムの第2部分は、ヘルパースレッドの実行を制御すべく使用され(例えば、プロセス500)、図5に示される。
全般的に、カウンティングメカニズムは、メインスレッド及びヘルパースレッドの相対的な実行を制御することを試みる。カウンタのペアは、変数がプリフェッチされるために十分な量の時間を可能にすべく、メインスレッドの実行ポイントをヘルパースレッドの実行ポイントの後にいくらかの間隔で保つことを目的として、メインスレッドによって使用される。カウンタの第2ペアは、メインスレッドがプリフェッチングの恩恵を受けることを可能にすべく、ヘルパースレッドの実行ポイントをメインスレッドの実行ポイントから予め定められた間隔で保つことを目的として、ヘルパースレッドによって使用される。
図4は、メインスレッドの実行を制御すべくメインスレッドに実装される、カウンティングメカニズム400の第1部分を示す。まず、ランアヘッド値(例えば、X)が決定される(ブロック402)。ランアヘッド値は、メイン及びヘルパースレッドが実行において互いにどれだけ進んで又は遅れて動作してよいかを指示する、予め定められた閾値である。ランアヘッド値は、プロファイリング情報の解析を通じて経験的に決定されてよいし、コンパイラ204内のオプションにより設定されてよい。2つのカウンタ(例えば、mc及びM)がメインスレッドに挿入されて、初期化(例えば、mc=X及びM=1)される(ブロック404)。
メインスレッドは、典型的には、ループ内でパフォーマンスボトルネックをひき起こす複数の変数を含む、いくつかのデータ処理(例えば、計算、変数の操作、ソーティング等)を実行するループを含んでいる。メインスレッドは、処理されるべき残りのデータが存在するか否かを確認する(ブロック406)。残りのデータがない場合、メインスレッドは、メインスレッドに関連する他の複数のヘルパースレッドを終了させる1つのコンパイラランタイム命令を呼び出す(ブロック408)。
残りのデータがある場合(ブロック406)、メインスレッドはデータ処理を実行して(ブロック410)、それからカウンタmcをインクリメントする(ブロック412)。カウンタmcは、ランアヘッド閾値によってスケールされたカウンタM(例えば、M*X)と比較され、スケールされたカウンタMよりカウンタmcが大きいか判断する(例えば、mc>M*X)(ブロック414)。
カウンタmcがM*Xより大きい場合、それはメインスレッドの実行がヘルパースレッドの実行の前に進みすぎていることを意味する。その場合、カウンタMはインクリメントされ(ブロック416)、ヘルパースレッドをアクティベートすべく1つのコンパイラランタイム命令が呼び出される(ブロック418)。メインスレッドは、次のデータ要素を取得し(ブロック420)、データ処理ループ(ブロック406、408、410、412、414,416、418、及び420)にわたって繰り返して実行を続ける。
カウンタmcがM*X以下である場合、それはメインスレッドの実行が予め定められたランアヘッド閾値の内であることを意味する。メインスレッドは次のデータ要素を取得(ブロック420)ことによって継続し、データ処理ループ(ブロック406、408、410、412、414,416、418、及び420)にわたって繰り返しを続ける。
図5は、ヘルパースレッドの実行を制御すべくヘルパースレッドに実装されるカウンティングメカニズム500の第2部分を示す。カウンティングメカニズム500の第2部分の最初において、2つのカウンタ(hc及びH)が初期化され(hc=0及びH=1)(ブロック502)、その後ヘルパースレッドは、プリフェッチされるべき残りのデータがあるかを確認する(ブロック504)。残りのデータがない場合、ヘルパースレッドは終了する。
プリフェッチされるべき残りのデータがある場合(ブロック504)、ヘルパースレッドは、データをプリフェッチする(例えば、変数を読み込んで変数の値をキャッシュにプットする命令が実行される)(ブロック506)。カウンタhcの値がインクリメントされ、メインスレッドのカウンタmcの値が取得される(ブロック508)。
カウンタhcは、ランアヘッド値XによってスケールされたカウンタHと比較され(例えば、hc>H*X)、カウンタhcはカウンタmcの値と比較される(hc>mc)(ブロック510)。両方の条件が満たされた場合、ヘルパースレッドはメインスレッドの前に進み過ぎている。ヘルパースレッドは、カウンタHをインクリメントして(ブロック512)継続し、ウェイトしてメインスレッドが追いつくことを可能にする1つのコンパイラランタイム命令を実行する(例えば、_ssp_wait)(ブロック514)。その後、ヘルパースレッドは、次のデータ要素を取得してプリフェッチし(ブロック516)、ループにわたって繰り返しを続ける。
両方の条件(hc>H*Xかつhc>mc)が満たされない場合(ブロック510)、ヘルパースレッドは、カウンタhcをカウンタmcと比較する(例えば、hc<=mc)(ブロック518)。hcがmcより小さい場合、ヘルパースレッドはメインスレッドより遅れている。その場合、ヘルパースレッドは、1つのコンパイラランタイム命令を実行して、ヘルパースレッドが追いつくのを可能にする(例えば、_ssp_catchup)(ブロック520)。キャッチアップ命令を実装する1つの方法は、カウンタhc、カウンタH、及びプリフェッチされるデータの値を、それぞれカウンタmc、カウンタM、及びメインスレッドで処理されているデータに一致するようキャッチアップ命令にセットさせることである。そのように複数のカウンタ値を変更することによって、ヘルパースレッドは、メインスレッドによって既にフェッチされた複数の変数をプリフェッチすることをスキップする。その後、次のデータ要素が取得されて(ブロック516)、ヘルパースレッドは、ループにわたって繰り返しを続ける(ブロック504、506、508、510、512、514、及び516)。
上記は、特にハードウェア上で実行されるソフトウェアを含むシステムの例を開示しているが、そのようなシステムは単に実例に過ぎず、限定するものとして見なされるべきではない。例えば、開示されたハードウェア及びソフトウェアコンポーネントのいくつか又は全ては、専用ハードウェアのみ、ソフトウェアのみ、ファームウェアのみ、或いはハードウェア、ファームウェア、及び/又はソフトウェアのある組み合わせで実施可能であること考えられる。
さらに、ある方法、装置、及び製品がここで記載されているが、本特許の有効範囲はそれに限定されない。対照的に、本特許は、文言上又は均等主義のもとに、添付のクレームの範囲内に適正に属する全ての装置、方法、及び製品をカバーする。

Claims (16)

  1. スレッドの同期を管理するためにコンピュータが実行する方法であって、
    メインスレッドとヘルパースレッドとの間で実行を同期するためのランアヘッド値を決定する段階と、
    前記メインスレッドに対応づけられた第1カウンタを、第1の値に初期化する段階と、
    前記メインスレッドに対応づけられた、前記ランアヘッド値によってスケールされる第2カウンタを初期化する段階と、
    前記メインスレッドでの第1データのデータ処理に応じて、前記第1カウンタをインクリメントして第2の値にする段階と、
    前記メインスレッドと前記ヘルパースレッドとの間の実行の同期を管理すべく前記ヘルパースレッドをアクティベートする段階と
    を備え、
    前記第1カウンタおよび前記第2カウンタは前記メインスレッドと前記ヘルパースレッドとの間の実行の隔たりを示し、前記ヘルパースレッドをアクティベートする段階は、前記ランアヘッド値によって前記スケールされた第1のスケール化値よりも前記第1カウンタが大きい場合に、前記ヘルパースレッドをアクティベートする
    方法。
  2. 前記メインスレッドで第2のデータ要素を取得する段階
    をさらに備える請求項1に記載の方法。
  3. 前記メインスレッドで処理すべきデータがない場合に、前記ヘルパースレッドを終了させる段階
    をさらに備える請求項1または2に記載の方法。
  4. 前記第1カウンタが前記第1のスケール化値よりも大きい場合に、前記第2カウンタをインクリメントする段階
    をさらに備える請求項1から3のいずれか一項に記載の方法。
  5. 前記第1カウンタが前記第1のスケール化値以下である場合に、前記ヘルパースレッドをアクティベートすることを避ける段階
    をさらに備える請求項1から4のいずれか一項に記載の方法。
  6. 前記メインスレッドからの前記隔たりの大きさが前記ヘルパースレッドで定められる
    請求項1から5のいずれか一項に記載の方法。
  7. 前記ヘルパースレッドが前記メインスレッドに対して閾値の分だけ前に進んで実行されている場合に、前記ヘルパースレッドでウェイト命令を実行する段階
    をさらに備える請求項6に記載の方法。
  8. 前記ヘルパースレッドが前記メインスレッドに対して閾値の分だけ遅れて実行されている場合に、前記ヘルパースレッドでキャッチアップ命令を実行する段階
    をさらに備える請求項6または7に記載の方法。
  9. スレッドの同期を管理するためのプログラムであって、コンピュータに、
    メインスレッドとヘルパースレッドとの間で実行を同期するためのランアヘッド値を決定する手順と、
    前記メインスレッドに対応づけられた第1カウンタを、第1の値に初期化する手順と、
    前記メインスレッドに対応づけられた、前記ランアヘッド値によってスケールされる第2カウンタを、初期化する手順と、
    前記メインスレッドでの第1データのデータ処理に応じて、前記第1カウンタをインクリメントして第2の値にする手順と、
    前記メインスレッドと前記ヘルパースレッドとの間の実行の同期を管理すべく前記ヘルパースレッドをアクティベートする手順と
    を実行させ、
    前記第1カウンタおよび前記第2カウンタは前記メインスレッドと前記ヘルパースレッドとの間の実行の隔たりを示し、前記ヘルパースレッドをアクティベートする手順は、前記第1カウンタが、前記ランアヘッド値によって前記スケールされた第1のスケール化値よりも大きい場合に、前記ヘルパースレッドをアクティベートする
    プログラム。
  10. 前記コンピュータに、
    前記メインスレッドで第2のデータ要素を取得する手順
    をさらに実行させる請求項9に記載のプログラム。
  11. 前記コンピュータに、
    前記メインスレッドで処理すべきデータがない場合に、前記ヘルパースレッドを終了させる手順
    をさらに実行させる請求項9または10に記載のプログラム。
  12. 前記コンピュータに、
    前記第1カウンタが前記第1のスケール化値よりも大きい場合に、前記第2カウンタをインクリメントする手順
    をさらに実行させる請求項9から11のいずれか一項に記載のプログラム。
  13. 前記コンピュータに、
    前記第1カウンタが前記第1のスケール化値以下である場合に、前記ヘルパースレッドをアクティベートすることを避ける手順
    をさらに実行させる請求項9から12のいずれか一項に記載のプログラム。
  14. 前記コンピュータに、
    前記メインスレッドからの前記隔たりの大きさを定める手順
    をさらに実行させる請求項9から13のいずれか一項に記載のプログラム。
  15. 前記コンピュータに、
    前記ヘルパースレッドが前記メインスレッドに対して閾値の分だけ前に進んで実行されている場合に、前記ヘルパースレッドでウェイト命令を実行する手順
    をさらに実行させる請求項14に記載のプログラム。
  16. 前記コンピュータに、
    前記ヘルパースレッドが前記メインスレッドに対して閾値の分だけ遅れて実行されている場合に、前記ヘルパースレッドでキャッチアップ命令を実行する手順
    をさらに実行させる請求項14または15に記載のプログラム。
JP2010286087A 2003-10-02 2010-12-22 ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置 Expired - Fee Related JP5118744B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/677,414 2003-10-02
US10/677,414 US7328433B2 (en) 2003-10-02 2003-10-02 Methods and apparatus for reducing memory latency in a software application

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2006534105A Division JP4783291B2 (ja) 2003-10-02 2004-09-29 ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置

Publications (2)

Publication Number Publication Date
JP2011090705A JP2011090705A (ja) 2011-05-06
JP5118744B2 true JP5118744B2 (ja) 2013-01-16

Family

ID=34422137

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2006534105A Expired - Fee Related JP4783291B2 (ja) 2003-10-02 2004-09-29 ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置
JP2010286087A Expired - Fee Related JP5118744B2 (ja) 2003-10-02 2010-12-22 ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2006534105A Expired - Fee Related JP4783291B2 (ja) 2003-10-02 2004-09-29 ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置

Country Status (5)

Country Link
US (1) US7328433B2 (ja)
EP (1) EP1678610A2 (ja)
JP (2) JP4783291B2 (ja)
CN (1) CN1890635B (ja)
WO (1) WO2005033926A2 (ja)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040128489A1 (en) * 2002-12-31 2004-07-01 Hong Wang Transformation of single-threaded code to speculative precomputation enabled code
US20040243767A1 (en) * 2003-06-02 2004-12-02 Cierniak Michal J. Method and apparatus for prefetching based upon type identifier tags
US7707554B1 (en) * 2004-04-21 2010-04-27 Oracle America, Inc. Associating data source information with runtime events
US7506325B2 (en) * 2004-10-07 2009-03-17 International Business Machines Corporation Partitioning processor resources based on memory usage
US20060080661A1 (en) * 2004-10-07 2006-04-13 International Business Machines Corporation System and method for hiding memory latency
US7752016B2 (en) * 2005-01-11 2010-07-06 Hewlett-Packard Development Company, L.P. System and method for data analysis
US7809991B2 (en) * 2005-01-11 2010-10-05 Hewlett-Packard Development Company, L.P. System and method to qualify data capture
US7950012B2 (en) * 2005-03-16 2011-05-24 Oracle America, Inc. Facilitating communication and synchronization between main and scout threads
US7849453B2 (en) * 2005-03-16 2010-12-07 Oracle America, Inc. Method and apparatus for software scouting regions of a program
US7472256B1 (en) 2005-04-12 2008-12-30 Sun Microsystems, Inc. Software value prediction using pendency records of predicted prefetch values
US20070130114A1 (en) * 2005-06-20 2007-06-07 Xiao-Feng Li Methods and apparatus to optimize processing throughput of data structures in programs
US7784040B2 (en) * 2005-11-15 2010-08-24 International Business Machines Corporation Profiling of performance behaviour of executed loops
US7856622B2 (en) * 2006-03-28 2010-12-21 Inventec Corporation Computer program runtime bottleneck diagnostic method and system
US7383401B2 (en) * 2006-06-05 2008-06-03 Sun Microsystems, Inc. Method and system for identifying multi-block indirect memory access chains
US7383402B2 (en) * 2006-06-05 2008-06-03 Sun Microsystems, Inc. Method and system for generating prefetch information for multi-block indirect memory access chains
US7596668B2 (en) * 2007-02-20 2009-09-29 International Business Machines Corporation Method, system and program product for associating threads within non-related processes based on memory paging behaviors
JP4821907B2 (ja) * 2007-03-06 2011-11-24 日本電気株式会社 メモリアクセス制御システム、メモリアクセス制御方法およびそのプログラム
US8886887B2 (en) * 2007-03-15 2014-11-11 International Business Machines Corporation Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization
US8271963B2 (en) * 2007-11-19 2012-09-18 Microsoft Corporation Mimicking of functionality exposed through an abstraction
CN101482831B (zh) * 2008-01-08 2013-05-15 国际商业机器公司 对工作线程与辅助线程进行相伴调度的方法和设备
US8359589B2 (en) * 2008-02-01 2013-01-22 International Business Machines Corporation Helper thread for pre-fetching data
CN101639799B (zh) * 2008-07-31 2013-02-13 英赛特半导体有限公司 集成电路表征系统及方法
US8312442B2 (en) * 2008-12-10 2012-11-13 Oracle America, Inc. Method and system for interprocedural prefetching
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
US8327325B2 (en) * 2009-01-14 2012-12-04 International Business Machines Corporation Programmable framework for automatic tuning of software applications
CA2680597C (en) * 2009-10-16 2011-06-07 Ibm Canada Limited - Ibm Canada Limitee Managing speculative assist threads
US8572337B1 (en) * 2009-12-14 2013-10-29 Symantec Corporation Systems and methods for performing live backups
JP5541491B2 (ja) * 2010-01-07 2014-07-09 日本電気株式会社 マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法
CN101807144B (zh) * 2010-03-17 2014-05-14 上海大学 一种前瞻多线程并行执行优化方法
US8423750B2 (en) 2010-05-12 2013-04-16 International Business Machines Corporation Hardware assist thread for increasing code parallelism
US8468531B2 (en) 2010-05-26 2013-06-18 International Business Machines Corporation Method and apparatus for efficient inter-thread synchronization for helper threads
US8612730B2 (en) 2010-06-08 2013-12-17 International Business Machines Corporation Hardware assist thread for dynamic performance profiling
US20120005457A1 (en) * 2010-07-01 2012-01-05 International Business Machines Corporation Using software-controlled smt priority to optimize data prefetch with assist thread
FR2962567B1 (fr) * 2010-07-12 2013-04-26 Bull Sas Procede d'optimisation d'acces memoire, lors de la reprise d'execution d'une application, dans un microprocesseur comprenant plusieurs coeurs logiques et programme d'ordinateur mettant en oeuvre un tel procede
US8683129B2 (en) * 2010-10-21 2014-03-25 Oracle International Corporation Using speculative cache requests to reduce cache miss delays
US20130086564A1 (en) * 2011-08-26 2013-04-04 Cognitive Electronics, Inc. Methods and systems for optimizing execution of a program in an environment having simultaneously parallel and serial processing capability
US9021152B2 (en) * 2013-09-30 2015-04-28 Google Inc. Methods and systems for determining memory usage ratings for a process configured to run on a device
KR102525295B1 (ko) 2016-01-06 2023-04-25 삼성전자주식회사 데이터 관리 방법 및 장치
JP6845657B2 (ja) * 2016-10-12 2021-03-24 株式会社日立製作所 管理サーバ、管理方法及びそのプログラム
CN106776047B (zh) * 2017-01-19 2019-08-02 郑州轻工业学院 面向非规则数据密集应用的群组式线程预取方法
US20180260255A1 (en) * 2017-03-10 2018-09-13 Futurewei Technologies, Inc. Lock-free reference counting
US11816500B2 (en) * 2019-03-15 2023-11-14 Intel Corporation Systems and methods for synchronization of multi-thread lanes
US11132268B2 (en) 2019-10-21 2021-09-28 The Boeing Company System and method for synchronizing communications between a plurality of processors

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5590293A (en) * 1988-07-20 1996-12-31 Digital Equipment Corporation Dynamic microbranching with programmable hold on condition, to programmable dynamic microbranching delay minimization
US5835947A (en) * 1996-05-31 1998-11-10 Sun Microsystems, Inc. Central processing unit and method for improving instruction cache miss latencies using an instruction buffer which conditionally stores additional addresses
US5809566A (en) * 1996-08-14 1998-09-15 International Business Machines Corporation Automatic cache prefetch timing with dynamic trigger migration
US6199154B1 (en) * 1997-11-17 2001-03-06 Advanced Micro Devices, Inc. Selecting cache to fetch in multi-level cache system based on fetch address source and pre-fetching additional data to the cache for future access
US6223276B1 (en) * 1998-03-31 2001-04-24 Intel Corporation Pipelined processing of short data streams using data prefetching
US6643766B1 (en) * 2000-05-04 2003-11-04 Hewlett-Packard Development Company, L.P. Speculative pre-fetching additional line on cache miss if no request pending in out-of-order processor

Also Published As

Publication number Publication date
EP1678610A2 (en) 2006-07-12
WO2005033926A2 (en) 2005-04-14
WO2005033926A3 (en) 2005-12-29
JP4783291B2 (ja) 2011-09-28
US7328433B2 (en) 2008-02-05
CN1890635B (zh) 2011-03-09
CN1890635A (zh) 2007-01-03
JP2011090705A (ja) 2011-05-06
US20050086652A1 (en) 2005-04-21
JP2007507807A (ja) 2007-03-29

Similar Documents

Publication Publication Date Title
JP5118744B2 (ja) ソフトウェアアプリケーションにおけるメモリ待ち時間を低減するための方法及び装置
Mittal A survey of recent prefetching techniques for processor caches
US8612949B2 (en) Methods and apparatuses for compiler-creating helper threads for multi-threading
US20100153934A1 (en) Prefetch for systems with heterogeneous architectures
US20070022422A1 (en) Facilitating communication and synchronization between main and scout threads
US20030204840A1 (en) Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs
US20050071572A1 (en) Computer system, compiler apparatus, and operating system
JP2007507048A5 (ja)
AU2011213795A1 (en) Efficient cache reuse through application determined scheduling
JP2005332387A (ja) メモリ命令をグループ化及び管理する方法及びシステム
US10318261B2 (en) Execution of complex recursive algorithms
US20080244080A1 (en) Prefetching Based on Streaming Hints
US20030084433A1 (en) Profile-guided stride prefetching
KR20160065145A (ko) 데이터 처리장치 및 추론 벡터 연산의 수행 제어방법
Rabbah et al. Compiler orchestrated prefetching via speculation and predication
US8495307B2 (en) Target memory hierarchy specification in a multi-core computer processing system
US20070240117A1 (en) Method and system for optimizing performance based on cache analysis
Emma et al. Exploring the limits of prefetching
US9691117B2 (en) External validation of graphics pipelines
Kunkel et al. System optimization for OLTP workloads
US10740074B2 (en) Conditional construct splitting for latency hiding
Wang et al. Opencl optimization and best practices for qualcomm adreno gpus
US7937565B2 (en) Method and system for data speculation on multicore systems
Puzak et al. When prefetching improves/degrades performance
Prisagjanec et al. Reducing competitive cache misses in modern processor architectures

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121002

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121019

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151026

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151026

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees