JP2022160691A - 複数の計算コア上のデータドリブンスケジューラ - Google Patents

複数の計算コア上のデータドリブンスケジューラ Download PDF

Info

Publication number
JP2022160691A
JP2022160691A JP2022128766A JP2022128766A JP2022160691A JP 2022160691 A JP2022160691 A JP 2022160691A JP 2022128766 A JP2022128766 A JP 2022128766A JP 2022128766 A JP2022128766 A JP 2022128766A JP 2022160691 A JP2022160691 A JP 2022160691A
Authority
JP
Japan
Prior art keywords
threads
correlation
schedule
data
memory
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.)
Pending
Application number
JP2022128766A
Other languages
English (en)
Inventor
ミルザ ジムシェド
Mirza Jimshed
ジウ ユンペン
Yunpeng Zhu
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.)
ATI Technologies ULC
Advanced Micro Devices Inc
Original Assignee
ATI Technologies ULC
Advanced Micro Devices Inc
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 ATI Technologies ULC, Advanced Micro Devices Inc filed Critical ATI Technologies ULC
Publication of JP2022160691A publication Critical patent/JP2022160691A/ja
Pending legal-status Critical Current

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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals

Abstract

【課題】プロセッサの複数の計算コアのデータドリブンスケジューリングのための方法、デバイス及びシステムを提供する。【解決手段】方法は、デフォルトスケジュールに従って、複数のスレッドを複数の計算コア上で実行する。複数のスレッドは、前記実行に基づいて分析され、複数のスレッド間の相関を決定する。方法はさらに、データドリブンスケジュールを、相関に基づいて生成して、データドリブンスケジュールに従って、複数のスレッドを複数の計算コア上で実行する。【選択図】図3

Description

(関連出願の相互参照)
本願は、2015年12月28日に出願された米国特許出願第14/981,257の優先権を主張し、参照により本明細書に完全に記載されているかのように組み込まれる。
開示された実施形態は、概して、処理デバイスに関し、特に、複数の計算ユニットを有するプロセッサにおけるメモリ管理に関する。
現在の多くのマイクロプロセッサは、多数のプロセッサコアを単一のプロセッサに結合してマルチコアプロセッサを形成している。マルチコアプロセッサは、主に並列コンピューティングを実行することによって利益をもたらす。例えば、マルチコアプロセッサは、スレッドレベルの並列性を利用して、プロセッサ内の異なる並列コア上で異なるプログラム、異なるスレッド、スレッドグループ、又は、単一のプログラムのウェーブを実行し得る。
様々なグラフィックス処理タスクが特に並列処理に適しているので、グラフィックス処理ユニット(GPU)は、マルチコアプロセッサとしての実装の恩恵を受けることがある。例えば、3次元(3D)投影は、「完全に並列」又は「高度に並列(embarrassingly parallel)」と呼ばれるタスクのカテゴリに分類され得る。
マルチコアアーキテクチャでは、各コアは、L1キャッシュ等のローカルメモリを有することができる。しかしながら、ダイサイズの縮小等の様々な理由により、マルチコアデバイス内のいくつかの(又は全ての)コアは、共有L2若しくは最終レベル(LLC)キャッシュ、他のタイプのキャッシュ、又は、キャッシュ若しくはメモリ階層内の他のレベル等のメモリを共有し得る。しかしながら、メモリを共有すると、コア間のメモリリソースが競合する可能性がある。
いくつかの実施形態では、プロセッサの複数の計算コアのデータドリブンスケジューリングのための方法を提供する。デフォルトスケジュールに従って、複数のスレッドが複数の計算コア上で実行されてもよい。複数のスレッドは、実行に基づいて分析され、複数のスレッド間の相関を決定してもよい。データドリブンスケジュールは、相関に基づいて生成されてもよい。複数のスレッドは、データドリブンスケジュールに従って、複数の計算コア上で実行されてもよい。
いくつかの実施形態では、データドリブンスケジューリングのために構成されたプロセッサを提供する。プロセッサは、複数の計算コアと、各計算コアによって共有されるメモリと、を備える。プロセッサは、複数のスレッドを、デフォルトのスケジュールに従って複数の計算コア上で実行するためにディスパッチするように構成されたディスパッチ回路を備える。プロセッサは、複数のスレッドを実行に基づいて分析し、複数のスレッド間の相関を決定するように構成された相関回路を備える。プロセッサは、相関に基づいてデータドリブンスケジュールを決定するように構成されたスケジューリング回路を備える。ディスパッチ回路は、複数のスレッドを、データドリブンスケジュールに従って複数の計算コア上で実行するためにディスパッチするように構成されている。
いくつかの実施形態では、マルチコアプロセッサのメモリ管理のためのシステムを提供する。システムは、プロセッサを備える。プロセッサは、複数の計算コアと、各計算コアによって共有されるメモリと、を備える。プロセッサは、複数のスレッドを、デフォルトのスケジュールに従って計算コア上で実行するためにディスパッチするように構成されたディスパッチ回路を備える。プロセッサは、複数のスレッドを実行に基づいて分析し、複数のスレッド間の相関を決定するように構成された相関回路を備える。プロセッサは、相関に基づいてデータドリブンスケジュールを決定するように構成されたスケジューリング回路を備える。ディスパッチ回路は、複数のスレッドを、データドリブンスケジュールに従って複数の計算コア上で実行するためにディスパッチするように構成されている。
添付の図面と併せて例として与えられる以下の説明から、より詳細な理解が得られるであろう。
1つ以上の開示された実施形態を実装することができる例示的なデバイスのブロック図である。 マルチコアプロセッサのいくつかのコア上で実行するためにいくつかのスレッドをスケジューリングする例示的な方法を示すフローチャートである。 マルチコアプロセッサのいくつかのコア上で実行するためにいくつかのスレッドをスケジューリングする別の例示的な方法を示すフローチャートである。 データドリブンスケジューリングを実施する例示的なシステムを示すブロック図である。 相関アレイの状態の一例を示す表である。 データドリブンスケジューリングを実施する別の例示的なシステムを示すブロック図である。 相関アレイの別の状態の一例を示す表である。 データドリブンスケジューリングを実施する別の例示的なシステムを示すブロック図である。 相関アレイの別の状態の一例を示す表である。 データドリブンスケジューリングを実施する別の例示的なシステムを示すブロック図である。 相関アレイの別の状態の一例を示す表である。
図1は、1つ以上の開示された実施形態を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含み得る。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。さらに、デバイス100は、オプションとして、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、図1に示されていない追加のコンポーネントを含んでもよいことが理解されるであろう。
プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含んでもよく、各プロセッサコアは、CPU若しくはGPU、シェーダエンジン(SE)、計算ユニット(CU)、又は、CPU若しくはGPUの単一命令多重データ(SIMD)ユニットであってもよい。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM又はキャッシュ等の揮発性又は不揮発性メモリを含んでもよい。各プロセッサコアは、ローカルL1キャッシュメモリ等のローカルメモリを有してもよく、及び/又は、共有L2キャッシュメモリ等のメモリを1つ以上の他のコアと共有してもよい。
ストレージ106は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク又はフラッシュドライブ等の固定又は取り外し可能なストレージを含んでもよい。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信用の無線ローカルエリアネットワークカード)を含み得る。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信用の無線ローカルエリアネットワークカード)を含み得る。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110から出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114はオプションのコンポーネントであり、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合、同じように動作することに留意されたい。
マルチコアプロセッサでは、キャッシュを共有する2つ(又はそれ以上)のコアが、メモリから相当量の異なる情報にアクセスするスレッド(又は、スレッドグループ、ウェーブ若しくは他のタイプの命令グループ)を並列に(例えば、重複する期間内に同時又は同時期に)実行する場合に、不足が発生し得る。スレッドは、例えば、スレッド間の参照のローカル性が不十分であるため、異なる情報にアクセスし得る。この文脈における参照のローカル性とは、各スレッドによって参照される同一の情報を指してもよい。
このような状況では、一方のスレッドの実行により共有キャッシュにロードされたデータは、他のスレッドの実行により共有キャッシュにロードされたデータによって追い出される可能性がある。これは、各スレッドによって必要とされるメモリアクセス数、及び/又は、各スレッドが他のスレッドによってアクセスされる情報とは異なる情報にアクセスするかどうかに依存し得る。このような追い出しは、スレッドの実行中に行き来を継続する可能性があり、メモリアクセスレイテンシの実質的で望ましくない増加が生じる可能性がある。
したがって、可能であれば、より多くの同じ情報を使用するスレッド、及び/又は、より大きなメモリの再使用を示すスレッドを別個のコア上で並行して実行するマルチコアプロセッサを構成することが望ましい場合がある。この文脈におけるメモリの再使用とは、1つのスレッドによって情報がメモリから取り出されることであって、別のスレッドによっても当該情報が使用されることを意味してもよい。これらのスレッドの1つが1つのコアで実行され、他のスレッドが別のコアで実行されるシナリオでは、2つのコアがキャッシュを共有する場合、情報が両方のスレッドによるアクセスのために共有キャッシュに記憶され得る。したがって、所定の時間内に実行がスケジューリングされているスレッドの場合、他のスレッドを並列に実行するのではなく、より共有された参照局所性を示すスレッドを並列に実行することが好ましい場合がある。これは、共有データキャッシュからの追い出し回数を減らし、したがって、メモリアクセスレイテンシを減らすという利点を有し得る。例えば、多数のピクセルが同じテクスチャデータを使用し、多数の処理ユニットを有するGPUによって処理される場合、共有された参照局所性の利点を得るために、テクスチャデータを共有するピクセルを、直列ではなく並列に処理する方が効率的であり得る。
図2は、マルチコアプロセッサのいくつか(Y個)のコア上で実行するいくつか(X個)のスレッドをスケジューリングするための例示的な方法200を示すフローチャートである。ここで、Y個のコアは、共有L2キャッシュ等の少なくとも1つのメモリを共有する。方法200は、例えば、デバイス100の一部又は全部を使用して実施されてもよい。例えば、プロセッサは、図1に示すプロセッサ102に対応し得る。
ステップ210において、スレッドは、例えば、マルチコアプロセッサの分析モジュールによって分析され、スレッド間のメモリの再使用又は「相関」の量を決定する。例えば、X=4及びY=2の場合には、X個のスレッドを分析して、スレッドの何れのペアがスレッド間で最大の相関を有するかを決定してもよい。X=8及びY=4の別の例では、X個のスレッドを分析して、4つのスレッドの何れのグループがスレッド間で最大の相関を有するかを決定してもよい。これらのスレッドグループの相関は、例えば、分析モジュールによってランク付けされてもよい。分析は、本明細書でさらに説明される実施例を含む任意の適切な方法で行われてもよい。
ステップ220において、スレッドは、例えば、マルチコアプロセッサのスケジューリングモジュールによってスケジューリングされ、ステップ210において最大の相関を有するものとして識別されたY個のスレッドがY個のコア上で並列に実行される。X=2Yの場合には、X個のスレッドのうち残りのスレッドが、Y個のコア上で並列に実行されるようにスケジューリングされてもよい。X>2Yの場合には、残りのスレッドが、スレッド間の最大の相関に基づいて並列に実行されるようにスケジューリングされてもよい。
スレッドの代わりにY個のスレッドの異なるセットが、相関のバランスに基づいて並列実行のためにスケジューリングされるようにスケジューリングされてもよいことに留意されたい。例えば、ステップ210で識別されたY個のスレッドを最大の相関を有するものとして並列に実行する状況では、残りのスレッドが、スレッドの異なる選択よりも不十分な相関で並列に実行され、スレッドのY個のセットの各々が、Y個のスレッドの両方のセットの相関が最大になるように選択され得る。
ステップ230において、X個のスレッドは、ステップ220でスケジューリングされたY個のコア上で実行される。X個のスレッドは、利用可能な最良の相関を有するサブセット内のY個のコア上で実行されるので、共有メモリ(例えば、共有L2キャッシュ)からの追い出しを最小限に抑えることができ、メモリアクセスレイテンシを最小化し、性能を向上させるのに役立つ。
しかしながら、方法200は、Y個のコア上でこれらのスレッドを実行する前に、相関についてX個のスレッドの分析を必要とする場合があることに留意されたい。例えば、X個のスレッドが相関ベースのマルチコアスケジューリングを利用するようにプログラムされていない場合等には、これは不可能となる。したがって、相関を動的に決定することが有利となり得る。
図3は、マルチコアプロセッサのY個のコア上で実行するX個のスレッドをスケジューリングするための別の例示的な方法300を示すフローチャートである。ここで、Y個のコアは、共有L2キャッシュ等の少なくとも1つのメモリを共有する。方法300では、相関が動的に決定される。方法300は、例えば、デバイス100の一部又は全部を使用して実施されてもよい。例えば、プロセッサは、図1に示すプロセッサ102に対応し得る。
ステップ310では、X個のスレッドがY個のコア上での実行のためにスケジューリングされる。このステップでは、X個のスレッド間の相関が不明である。したがって、「ラウンドロビン」パターン等のデフォルトスケジューリングパターンが最初に使用される。したがって、X=4でスレッドがT0、T1、T2及びT3であり、Y=2でコアがCU0及びCU1である場合には、ラウンドロビン方式でのスケジューリングは、T0=C0、T1=C1、T2=C0、T3=C1となる。
ステップ320において、X個のスレッドが、スレッドの現在のスケジューリングに従ってY個のコア上で実行される。したがって、スケジューリングがステップ310のラウンドロビンパターンに続く場合、スレッドT0及びT1がC0及びC1上で並列に実行され、続いて、T2及びT3がC0及びC1上で実行される。
ステップ330において、X個のスレッドは、実行に基づいて相関について分析される。ステップ330の分析は、実際に、実行中にステップ320と組み合わせて行われてもよいし、実行後にステップ320の間に収集されたデータに対して行われてもよい。相関は、任意の適切な技術を使用して決定されてもよく、実施例について本明細書でさらに説明する。
ステップ340において、X個のスレッドは、ステップ330において決定された相関に基づいて、Y個のコア上での実行のためにスケジューリングされる。このステップでは、X個のスレッド間の相関が判明している。したがって、デフォルトスケジューリングパターンが使用されず、スレッドは、既知の相関に従ってスケジューリングされる。X=4でスレッドがT0、T1、T2及びT3であり、Y=2でコアがCU0及びCU1である例では、ステップ330において、様々な可能なスレッドペアの中で最も高い相関がT0とT2との間にあることを判別し得る。相関に基づくスケジューリングは、T0=C0、T2=C1、T1=C0、T3=C1となる。このスケジューリングは、ステップ330の分析によって生成された相関データに基づいているので、かかるスケジューリングをデータドリブンスケジューリングと呼び、このスケジューリングを実施するためのデバイス又はデバイスの組み合わせをデータドリブンスケジューラと呼ぶことができる。
或いは、データドリブンスケジューリングは、全てのスレッドの実行において最大化された相関に基づいてもよい。例えば、T1とT3との間の相関が特に低い場合には、これらのスレッドをスケジュールT0=C0、T2=C1、T1=C0、T3=C1で並列に実行すると、メモリアクセスレイテンシが発生し、T0及びT2を並列に実行することによってもたらされるメモリアクセスレイテンシの低減を相殺又は無効にする。これに対処するために、様々な可能なスレッドペアの中で2番目(又は3番目若しくは4番目等)に高い相関値がデータドリブンスケジューラによって考慮されてもよい。一例では、2番目に高い相関は、T0とT3との間であり得る。実行をスケジューリングするためにこのペアを使用すると、T0=C0、T3=C1、T1=C0、T2=C1が得られる。T1とT3との間の低い相関がT0とT2との間の最も高い相関を相殺する例では、この新しいスケジュールは、X個のスレッド全ての実行におけるメモリアクセスレイテンシを最小化することができる。このスケジューリング自体は、全てのスレッドに亘って最高の平均相関を提供することができず、全ての可能な組み合わせを分析して、全てのスレッドに亘って最良の平均相関及び/又は最小のメモリアクセスレイテンシを決定することができることに留意されたい。しかしながら、このようにして全てのX個のスレッド間の相関を最大にするように構成されたデータドリブンスケジューラは、実装するために追加の回路及び/又は追加の遅延を必要とする場合がある。
ステップ350において、X個のスレッドは、スケジュールに従って、Y個のコア上で実行される。したがって、スケジューリングがT0=C0、T2=C1、T1=C0、T3=C1に続く場合、スレッドT0及びT2がC0及びC1上で並列に実行され、続いてT1及びT3がC0及びC1上で実行される。
フローは、例えば、実行中のスレッドのさらなる分析(例えば、実行中のスレッドのメモリアクセス間の分析)のためにステップ330に戻ってもよい。これにより、実行スケジューリングをさらに動的に制御することが可能になる。例えば、いくつかの実施形態では、スケジューリングは、現在実行中のスレッドをコンテキスト節約し、更新されたスケジュールに基づいて異なるコアにスレッドをスケジューリングし、次にコンテキストを復元することによって、スレッドの実行中にスケジューリングを調整してもよい(例えば、相関値を変更することによって示される場合)。
図4は、データドリブンスケジューリングを実施する例示的なシステム400を示すブロック図である。一実装例では、システム400は、プロセッサ102の機能であってもよい。システム400は、処理ユニット410と、処理ユニット410によって共有されるキャッシュメモリ420と、データドリブンスケジューラ430と、スレッドグループディスパッチャ440と、を含む。システム400の例では、処理ユニット410は、2つのコア(この場合、シェーダエンジンSE0及びSE1)を含む。データドリブンスケジューラ430は、相関アレイ450と決定ユニット460とを含み、スレッドグループレベルのスケジュールを決定する。シェーダエンジン上で並列に実行するためにグループ化されたスレッドのグループは、この文脈においてスレッドグループと呼ばれる場合がある。
シェーダエンジンSE0及びSE1は、例えば、グラフィックスプロセッサ内の処理ユニットのクラスタを含んでもよい。かかるクラスタは、様々なアーキテクチャにおける「シェーダエンジン」以外の用語で呼ばれ得ることに留意されたい。
この例では、キャッシュメモリ420はL2キャッシュであるが、キャッシュメモリ420は、シェーダエンジンSE0及びSE1によって共有される任意の適切なレベルのキャッシュメモリ又は別の共有メモリであってもよいことに留意されたい。キャッシュメモリ420は、シェーダエンジンSE0及びSE1によって共有される。
データドリブンスケジューラ430は、処理ユニット410上での実行のためにスレッドグループをスケジューリングする。相関アレイ450は、スレッドグループ間の相関を計算する。決定ユニット460は、特定の時間に処理ユニット410のうち特定の1つにディスパッチするスレッドグループを決定する。
相関データがスケジューリングに利用可能になる前に、データドリブンスケジューラ430は、デフォルト(例えば、データドリブンではない)スケジューリングパターンを使用して、シェーダエンジンSE0及びSE1上での実行のためにスレッドグループをスケジューリングする。このデフォルトパターンは、ラウンドロビンパターンであってもよい。例示的なシステム400では、4つのスレッドグループの粒度でスケジューリングが行われる。したがって、最初の4つのスレッドグループがTG0、TG1、TG2及びTG3と呼ばれる場合、ラウンドロビン方式での最初の4つのスレッドグループのスケジューリングは、TG0=SE0、TG1=SE1、TG2=SE0、TG3=SE1となる。次に、スレッドグループディスパッチャ440は、デフォルトスケジュールに従って、SE0及びSE1上での実行のためにスレッドグループをディスパッチする。
SE0及び/又はSE1からキャッシュ420への新たなメモリ要求に応じて、キャッシュ420は、メモリ要求に対応するインデックス及びキャッシュタグを相関アレイ450に転送することができる。インデックスは、要求しているスレッドグループの識別情報(例えば、TG ID)に対応してもよく、タグは、要求されたメモリアドレス、データマスク及び/又は補助情報を含んでもよい。したがって、キャッシュ420は、現在実行中のスレッドグループが必要とするメモリアクセスに関する情報を相関アレイ450に提供する。例えば、相関アレイ450が物理アドレス空間に実装されている場合、キャッシュライン粒度(cacheline granularity)にアクセスされている物理メモリのアドレスは、適切な相関情報となり得る。相関アレイ450が仮想アドレス空間に実装されている場合、何らかの形式のプロセスID等の追加情報が必要になることがある。
相関アレイ450は、インデックス及びタグ情報を記憶してもよく、以下にさらに説明するように、この情報を使用してスレッドグループの相関値を計算してもよい。相関アレイ450は、これらの相関値を決定ユニット460に報告してもよい。決定ユニット460は、報告された相関値を使用して、SE0及びSE1上でスレッドグループTG0、TG1、TG2、TG3を実行するためにデータドリブンスケジューリングを決定してもよい。次に、スレッドグループディスパッチャ440は、データドリブンスケジュールに従って、SE0及びSE1上での実行のためにスレッドグループをディスパッチすることができる。
図5は、スレッドグループTG0、TG1、TG2及びTG3の実行中のある時点における相関アレイ450の状態例を示す表500である。例示的なシステム400は、4つのスレッドグループの粒度でスケジューリングを行う。したがって、表500は、スレッドグループTG0、TG1、TG2及びTG3のうち1つにそれぞれ対応する4つのキー510、510’、510’’、510’’’を含む。
各キー510、510’、510’’、510’’’は、対応するタグリスト(図示省略)及び寄与相関値(contributing correlation values)520、520’、520’’、520’’’のセットを含む。寄与相関値520、520’、520’’、520’’’のセットは、スレッドグループTG0、TG1、TG2及びTG3の各ペアの相関を反映する。例えば、キー510は、TG0に対する寄与相関値520のセットを記憶する。寄与相関値520のセットは、TG0とTG1との間の相関に対応する寄与相関値C01と、TG0とTG2との間の相関に対応する寄与相関値C02と、TG0とTG3との間の相関に対応する寄与相関値C03と、を記憶する。他のキー510’、510’’、510’’’の各々は、図5に反映される同様の寄与相関値520’、520’’、520’’’のセットを記憶する。相関情報が相関アレイ450に利用可能になる前には(例えば、方法300のステップ310と同様に)、タグリストは空であってもよく、寄与相関値はゼロであってもよい。
スレッドグループの実行中のSE0又はSE1による新たなメモリ要求では、相関アレイ450は、メモリ要求の対応するインデックス及びタグ情報をキャッシュから受信する。インデックス及びタグ情報が表500内のエントリと一致する場合には、対応する寄与相関値は、増加した相関を反映するようにインクリメント、増加、又は、変更されてもよい。例えば、相関アレイ450が、インデックスTG1及びタグtag3を受信し、TG0のタグリストがtag3も含むように反映する場合には、TG0とTG1との間の相関を反映する寄与相関値C01を増加(例えば、1だけインクリメントされる)してもよい。
受信したインデックスが表500のキーと一致するが、受信したタグがタグリスト内の何れのタグとも一致しない場合には、受信したタグをそのキーのタグリストに挿入してもよい。受信したインデックスが表500のキーと一致しないが、受信したタグがタグリスト内のタグと一致する場合。
TG0、TG1、TG2及びTG3がSE0及びSE1上での実行を終了した後、寄与相関値C01及びC10を合計(又は他の方法で組み合わせる)して、TG0とTG1との間の相関を反映する相関値c01が決定されてもよい。他の一致する寄与相関値を同様に合計して、他のTGペアの相関値を求めてもよい。例えば、c02は、寄与相関値C02及びC20を合計する等によって計算されたTG0及びTG2の相関値であってもよい。これらの相関値c01、c02、c03、c12、c13、c23は、決定ユニット460に報告されてもよい。
TG0、TG1、TG2及びTG3がSE0及びSE1上での実行を終了するまで待つのではなく、一定の期間(例えば、1,000プロセッサクロックサイクル)後に寄与相関値が合計及び/又は報告されてもよいことに留意されたい。したがって、相関値は、実行の完了前、又は、TG0、TG1、TG2及びTG3のいくつかの実行後に計算されてもよい。これにより、動的なスケジューリング、及び/又は、より高い解像度のデータに基づくスケジューリングが可能になる。
図4に戻ると、決定ユニット460は、報告された相関値c01、c02、c03、…に基づいて、次の4つのTG(TG0、TG1、TG2、TG3)の発行順(すなわち、データドリブンスケジュール)を決定してもよい。表1は、決定ユニット460がこの決定を行うための部分的なアルゴリズムの一例を反映する疑似コードを示す。スレッドグループディスパッチャ440は、決定ユニット460からデータドリブンスケジュールを受信し、データドリブンスケジュールに従ってスレッドグループをSE0及びSE1にディスパッチする。いくつかの実装では、スレッドグループディスパッチャ440は、スケジュールが変更されたという決定に基づいて、そのスケジュールを更新するだけでよい。いくつかの実装では、スケジュールが変更されたという条件で、SE0及びSE1上で現在実行中のスレッドグループが一時中断されてもよく、コンテキストが保存されてもよく、更新されたスケジュールがスレッドグループに適用されてもよく(すなわち、スレッドグループが、異なるシェーダエンジン及び/又は実行時間に再度割り当てられてもよい)、コンテキストが復元されてもよく、更新されたスケジュールに従って実行が再開されてもよい。
Figure 2022160691000002
他の例示的なシステムでは、スケジューリングは、スレッドグループ以外に基づいてもよい。例えば、ウェーブレベルに基づくスケジューリングは、システムアーキテクチャに応じて適切となり得る。
図6は、データドリブンスケジューリングを実施する例示的なシステム600を示すブロック図である。一実装例では、システム600は、プロセッサ102の機能であってもよい。システム600は、処理ユニット610と、処理ユニット610によって共有されるキャッシュメモリ620と、データドリブンスケジューラ630と、ウェーブディスパッチャ640と、を含む。システム600の例では、処理ユニット610は、2つのコア(この場合、計算ユニットCU0及びCU1)を含む。データドリブンスケジューラ630は、相関アレイ650と決定ユニット660とを含み、ウェーブレベルのスケジュールを決定する。
計算ユニットCU0及びCU1の各々は、単一命令多重データ(SIMD)コアを含んでもよい。この文脈において、SIMDコア上で並列に実行されるスレッドのグループは、ウェーブと呼ばれる場合がある。
この例では、キャッシュメモリ620はL2キャッシュであるが、キャッシュメモリ620は、計算ユニットCU0及びCU1によって共有される任意の適切なレベルのキャッシュメモリ又は別の共有メモリであってもよいことに留意されたい。キャッシュメモリ620は、計算ユニットCU0及びCU1によって共有される。
データドリブンスケジューラ630は、処理ユニット610上での実行のためにウェーブをスケジューリングする。相関アレイ650は、ウェーブ間の相関を計算する。決定ユニット660は、特定の時間に処理ユニット610のうち特定の1つにディスパッチするウェーブを決定する。
相関データがスケジューリングに利用可能になる前に、データドリブンスケジューラ630は、デフォルト(例えば、データドリブンではない)スケジューリングパターンを使用して、計算ユニットCU0及びCU1上での実行のためにスレッドグループをスケジューリングする。このデフォルトパターンは、ラウンドロビンパターンであってもよい。例示的なシステム600では、4つのウェーブの粒度でスケジューリングが行われる。したがって、最初の4つのウェーブがwave0、wave1、wave2及びwave3と呼ばれる場合、ラウンドロビン方式での最初の4つのウェーブのスケジューリングは、wave0=CU0、wave1=CU1、wave2=CU0、wave3=CU1となる。次に、ウェーブディスパッチャ640は、デフォルトスケジュールに従って、CU0及びCU1上での実行のためにウェーブをディスパッチする。
CU0及び/又はCU1からキャッシュ620への新たなメモリ要求に応じて、キャッシュ620は、メモリ要求に対応するインデックス及びキャッシュタグを相関アレイ650に転送することができる。インデックスは、要求しているウェーブの識別情報(例えば、ウェーブID)に対応してもよく、タグは、要求されたメモリアドレス、データマスク及び/又は補助情報を含んでもよい。したがって、キャッシュ620は、現在実行中のウェーブが必要とするメモリアクセスに関する情報を相関アレイ650に提供する。タグは、物理アドレスであってもよいし、仮想メモリ識別子と組み合わせた仮想アドレスであってもよい。タグは、データキャッシュで使用されているタグと類似してもよい。
相関アレイ650は、インデックス及びタグ情報を記憶してもよく、以下にさらに説明するように、この情報を使用してウェーブの相関値を計算してもよい。相関アレイ650は、これらの相関値を決定ユニット660に報告してもよい。決定ユニット660は、報告された相関値を使用して、CU0及びCU1上でウェーブwave0、wave1、wave2、wave3を実行するためにデータドリブンスケジューリングを決定してもよい。次に、ウェーブディスパッチャ640は、データドリブンスケジュールに従って、CU0及びCU1上での実行のためにウェーブをディスパッチすることができる。
図7は、ウェーブwave0、wave1、wave2及びwave3の実行中のある時点における相関アレイ650の状態例を示す表700である。例示的なシステム600は、4つのウェーブの粒度でスケジューリングを行う。したがって、表700は、ウェーブwave0、wave1、wave2及びwave3のうち1つにそれぞれ対応する4つのキー710、710’、710’’、710’’’を含む。
各キー710、710’、710’’、710’’’は、対応するタグリスト(図示省略)及び寄与相関値720、720’、720’’、720’’’のセットを含む。寄与相関値720、720’、720’’、720’’’のセットは、ウェーブwave0、wave1、wave2及びwave3の各ペアの相関を反映する。例えば、キー710は、wave0に対する寄与相関値720のセットを記憶する。寄与相関値720のセットは、wave0とwave1との間の相関に対応する寄与相関値C01と、wave0とwave2との間の相関に対応する寄与相関値C02と、wave0とwave3との間の相関に対応する寄与相関値C03と、を記憶する。他のキー710’、710’’、710’’’の各々は、図7に反映される同様の寄与相関値720’、720’’、720’’’のセットを記憶する。相関情報が相関アレイ650に利用可能になる前には(例えば、方法300のステップ310と同様に)、タグリストは空であってもよく、寄与相関値はゼロであってもよい。
ウェーブの実行中のCU0又はCU1による新たなメモリ要求では、相関アレイ650は、メモリ要求の対応するインデックス及びタグ情報をキャッシュから受信する。インデックス及びタグ情報が表700内のエントリと一致する場合には、対応する寄与相関値は、増加した相関を反映するようにインクリメント、増加、又は、変更されてもよい。例えば、相関アレイ650が、インデックスwave1及びタグtag3を受信し、wave0のタグリストがtag3も含むように反映する場合には、wave0とwave1との間の相関を反映する寄与相関値C01を増加(例えば、1だけインクリメントされる)してもよい。
受信したインデックスが表700のキーと一致するが、受信したタグがタグリスト内の何れのタグとも一致しない場合、受信したタグをそのキーのタグリストに挿入してもよい。受信したインデックスが表700のキーと一致しないが、受信したタグがタグリスト内のタグと一致する場合、新たなキーをそのインデックスに追加してもよく、タグが一致する場合には他のキーに対する相関が調整され得る。
wave0、wave1、wave2及びwave3がCU0及びCU1上での実行を終了した後、寄与相関値C01及びC10を合計(又は別の方法で組み合わせる)して、wave0とwave1との間の相関を反映する相関値c01が決定されてもよい。他の一致する寄与相関値を同様に合計して、他のウェーブペアの相関値を求めてもよい。例えば、c02は、寄与相関値C02及びC20を合計する等によって計算されたwave0及びwave2の相関値であってもよい。これらの相関値c01、c02、c03、c12、c13、c23は、決定ユニット660に報告されてもよい。
wave0、wave1、wave2及びwave3がCU0及びCU1上での実行を終了するまで待つのではなく、一定の期間(例えば、1,000プロセッサクロックサイクル)後に寄与相関値が合計及び/又は報告されてもよいことに留意されたい。したがって、相関値は、実行の完了前、又は、wave0、wave1、wave2及びwave3のいくつかの実行後に計算されてもよい。これにより、動的なスケジューリング、及び/又は、より高い解像度のデータに基づくスケジューリングが可能になる。
図6に戻ると、決定ユニット660は、報告された相関値c01、c02、c03、…に基づいて、次の4つのウェーブ(wave0、wave1、wave2、wave3)の発行順(すなわち、データドリブンスケジュール)を決定してもよい。表2は、決定ユニット660がこの決定を行うための部分的なアルゴリズムの一例を反映する疑似コードを示す。ウェーブディスパッチャ640は、決定ユニット660からデータドリブンスケジュールを受信し、データドリブンスケジュールに従ってウェーブをCU0及びCU1にディスパッチする。いくつかの実装では、ウェーブディスパッチャ640は、スケジュールが変更されたという決定に基づいて、そのスケジュールを更新するだけでよい。いくつかの実装では、スケジュールが変更されたという条件で、CU0及びCU1上で現在実行中のウェーブが一時中断されてもよく、コンテキストが保存されてもよく、更新されたスケジュールがウェーブに適用されてもよく(すなわち、ウェーブが、異なる計算ユニット及び/又は実行時間に再度割り当てられてもよい)、コンテキストが復元されてもよく、更新されたスケジュールで実行が再開されてもよい。
Figure 2022160691000003
他の例示的なシステムでは、スケジューリングは、スレッドグループ又はウェーブ以外に基づいてもよい。例えば、スレッドレベルに基づくスケジューリングは、システムアーキテクチャに応じて適切となり得る。本明細書で説明する技術は、本発明から逸脱することなく、スレッド、スレッドグループ又はウェーブ以外の他の抽象レベルに適用可能であることに留意されたい。
図8は、データドリブンスケジューリングを実施する例示的なシステム800を示すブロック図である。1つの実装例では、システム800は、プロセッサ102の機能であってもよい。システム800は、処理ユニット810と、処理ユニット810によって共有される2つのキャッシュメモリ820、825と、データドリブンスケジューラ830と、スレッドディスパッチャ840と、を含む。システム800の例では、処理ユニット810は、2つのコア(この場合、SIMDユニットであるSIMD0及びSIMD1)を含む。データドリブンスケジューラ830は、相関アレイ850と決定ユニット860とを含み、スレッドレベルのスケジュールを決定する。
この例では、キャッシュメモリ820、825の各々はL1及びL2キャッシュである。しかしながら、キャッシュメモリ820、825は、任意の適切なレベルのキャッシュメモリであってもよいし、SIMDユニットであるSIMD0及びSIMD1によって共有される他の共有メモリであってもよい。キャッシュメモリ820、825は、SIMDユニットであるSIMD0及びSIMD1によって共有される。
データドリブンスケジューラ830は、処理ユニット810上での実行のためにスレッドをスケジューリングする。相関アレイ850は、スレッド間の相関を計算する。決定ユニット860は、特定の時間に処理ユニット810のうち特定の1つにディスパッチするスレッドを決定する。
相関データがスケジューリングに利用可能になる前に、データドリブンスケジューラ830は、デフォルト(例えば、データドリブンではない)スケジューリングパターンを使用して、SIMDユニットであるSIMD0及びSIMD1上での実行のためにスレッドグループをスケジューリングする。このデフォルトパターンは、ラウンドロビンパターンであってもよい。例示的なシステム800では、4つのスレッドの粒度でスケジューリングが行われる。したがって、最初の4つのスレッドがthread0、thread1、thread2及びthread3と呼ばれる場合、ラウンドロビン方式での最初の4つのスレッドのスケジューリングは、thread0=SIMD0、thread1=SIMD1、thread2=SIMD0、thread3=SIMD1となる。次に、スレッドディスパッチャ840は、デフォルトスケジュールに従って、SIMD0及びSIMD1上での実行のためにスレッドをディスパッチする。
SIMD0及び/又はSIMD1からキャッシュ820又はキャッシュ825への新たなメモリ要求に応じて、要求を受信したキャッシュは、メモリ要求に対応するインデックス及びキャッシュタグを相関アレイ850に転送することができる。インデックスは、要求しているスレッドの識別情報(例えば、スレッドID)に対応してもよく、タグは、要求されたメモリアドレス、データマスク及び/又は補助情報を含んでもよい。したがって、キャッシュ820又は825は、現在実行中のスレッドが必要とするメモリアクセスに関する情報を相関アレイ850に提供する。タグは、データキャッシュで使用されているタグと類似してもよい。タグは、例えば、物理アドレスであってもよいし、仮想メモリ識別子と組み合わせた仮想アドレスであってもよい。
相関アレイ850は、インデックス及びタグ情報を記憶してもよく、以下にさらに説明するように、この情報を使用してスレッドの相関値を計算してもよい。相関アレイ850は、これらの相関値を決定ユニット860に報告してもよい。決定ユニット860は、報告された相関値を使用して、SIMD0及びSIMD1上でスレッドthread0、thread1、thread2、thread3を実行するためにデータドリブンスケジューリングを決定してもよい。次に、スレッドディスパッチャ840は、データドリブンスケジュールに従って、SIMD0及びSIMD1上での実行のためにスレッドをディスパッチすることができる。
図9は、スレッドthread0、thread1、thread2及びthread3の実行中のある時点における相関アレイ650の状態例を示す表900である。例示的なシステム800は、4つのスレッドの粒度でスケジューリングを行う。したがって、表900は、スレッドthread0、thread1、thread2及びthread3のうち1つにそれぞれ対応する4つのキー910、910’、910’’、910’’’を含む。
各キー910、910’、910’’、910’’’は、対応するタグリスト(図示省略)及び寄与相関値920、920’、920’’、920’’’のセットを含む。寄与相関値920、920’、920’’、920’’’のセットは、スレッドthread0、thread1、thread2及びthread3の各ペアの相関を反映する。例えば、キー910は、thread0に対する寄与相関値920のセットを記憶する。寄与相関値920のセットは、thread0とthread1との間の相関に対応する寄与相関値C01と、thread0とthread2との間の相関に対応する寄与相関値C02と、thread0とthread3との間の相関に対応する寄与相関値C03と、を記憶する。他のキー910’、910’’、910’’’の各々は、図9に反映される同様の寄与相関値920’、920’’、920’’’のセットを記憶する。相関情報が相関アレイ850に利用可能になる前には(例えば、方法300のステップ310と同様に)、タグリストは空であってもよく、寄与相関値はゼロであってもよい。
スレッドの実行中のSIMD0又はSIMD1による新たなメモリ要求では、相関アレイ850は、メモリ要求の対応するインデックス及びタグ情報をキャッシュから受信する。インデックス及びタグ情報が表900内のエントリと一致する場合には、対応する寄与相関値は、増加した相関を反映するようにインクリメント、増加、又は、変更されてもよい。例えば、相関アレイ850が、インデックスthread1及びタグtag3を受信し、thread0のタグリストがtag3も含むように反映する場合には、thread0とthread1との間の相関を反映する寄与相関値C01を増加(例えば、1だけインクリメントされる)してもよい。
受信したインデックスが表900のキーと一致するが、受信したタグがタグリスト内の何れのタグとも一致しない場合、受信したタグをそのキーのタグリストに挿入してもよい。受信したインデックスが表900のキーと一致しないが、受信したタグがタグリスト内のタグと一致する場合、新たなキーをそのインデックスに追加してもよく、タグが一致する場合には他のキーに対する相関が調整され得る。
thread0、thread1、thread2及びthread3がSIMD0及びSIMD1上での実行を終了した後、寄与相関値C01及びC10を合計(又は別の方法で組み合わせる)して、thread0とthread1との間の相関を反映する相関値c01が決定されてもよい。他の一致する寄与相関値を同様に合計して、他のスレッドペアの相関値を求めてもよい。例えば、c02は、寄与相関値C02及びC20を合計する等によって計算されたthread0及びthread2の相関値であってもよい。これらの相関値c01、c02、c03、c12、c13、c23は、決定ユニット660に報告されてもよい。
thread0、thread1、thread2及びthread3がSIMD0及びSIMD1上での実行を終了するまで待つのではなく、一定の期間(例えば、1,000プロセッサクロックサイクル)後に寄与相関値が合計及び/又は報告されてもよいことに留意されたい。したがって、相関値は、実行の完了前、又は、スレッドthread0、thread1、thread2及びthread3のいくつかの実行後に計算されてもよい。これにより、動的なスケジューリング、及び/又は、より高い解像度のデータに基づくスケジューリングが可能になる。
図8に戻ると、決定ユニット860は、報告された相関値c01、c02、c03・・・に基づいて、次の4つのスレッド(thread0、thread1、thread2及びthread3)の発行順(すなわち、データドリブンスケジュール)を決定してもよい。表3は、決定ユニット860がこの決定を行うための部分的なアルゴリズムの一例を反映する疑似コードを示す。スレッドディスパッチャ840は、決定ユニット860からデータドリブンスケジュールを受信し、データドリブンスケジュールに従ってスレッドをCU0及びCU1にディスパッチする。いくつかの実装では、スレッドディスパッチャ840は、スケジュールが変更されたという決定に基づいて、そのスケジュールを更新するだけでよい。いくつかの実装では、スケジュールが変更されたという条件で、SIMD0及びSIMD1上で現在実行中のスレッドが一時中断されてもよく、コンテキストが保存されてもよく、更新されたスケジュールがスレッドに適用されてもよく(すなわち、スレッドが、異なるSIMD及び/又は実行時間に再度割り当てられてもよい)、コンテキストが復元されてもよく、更新されたスケジュールで実行が再開されてもよい。
Figure 2022160691000004
図10は、データドリブンスケジューリングを実施する例示的なシステム1000を示すブロック図である。一実装例では、システム1000は、プロセッサ102の機能であってもよい。システム1000は、処理ユニット1010と、処理ユニット1010によって共有されるキャッシュメモリ1020と、データドリブンスケジューラ1030と、スレッドディスパッチャ1040と、を含む。システム1000の例では、処理ユニット1010は、4つのコア(この場合、計算ユニットCU0、CU1、CU2及びCU3)を含む。データドリブンスケジューラ1030は、相関アレイ1050と決定ユニット1060とを含み、スレッドディスパッチャレベルのスケジュールを決定する。
この例では、キャッシュメモリ1020はL2キャッシュであるが、キャッシュメモリ1020は、計算ユニットCU0、CU1、CU2及びCU3によって共有される任意の適切なレベルのキャッシュメモリ又は別の共有メモリであってもよいことに留意されたい。キャッシュメモリ1020は、計算ユニットCU0、CU1、CU2及びCU3によって共有される。
データドリブンスケジューラ1030は、処理ユニット1010上での実行のためにウェーブをスケジューリングする。相関アレイ1050は、ウェーブ間の相関を計算する。決定ユニット1060は、特定の時間に処理ユニット1010のうち特定の1つにディスパッチするウェーブを決定する。
相関データがスケジューリングに利用可能になる前に、データドリブンスケジューラ1030は、デフォルト(例えば、データドリブンではない)スケジューリングパターンを使用して、計算ユニットCU0、CU1、CU2及びCU3上での実行のためにウェーブをスケジューリングする。このデフォルトパターンは、ラウンドロビンパターンであってもよい。例示的なシステム1000では、8つのウェーブの粒度でスケジューリングが行われる。したがって、最初の8つのスレッドがwave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7と呼ばれる場合、ラウンドロビン方式での最初の8つのウェーブのスケジューリングは、wave0=CU0、wave1=CU1、wave2=CU2、wave3=CU3、wave4=CU0、wave5=CU1、wave6=CU2、wave7=CU3となる。次に、スレッドディスパッチャ1040は、デフォルトスケジュールに従って、CU0、CU1、CU2及びCU3上での実行のためにウェーブをディスパッチする。
CU0、CU1、CU2及び/又はCU3からキャッシュ1020への新たなメモリ要求に応じて、キャッシュ1020は、メモリ要求に対応するインデックス及びキャッシュタグを相関アレイ1050に転送することができる。インデックスは、要求しているウェーブの識別情報(例えば、ウェーブID)に対応してもよく、タグは、要求されたメモリアドレス、データマスク及び/又は補助情報を含んでもよい。したがって、キャッシュ1020は、現在実行中のウェーブが必要とするメモリアクセスに関する情報を相関アレイ1050に提供する。タグは、物理アドレスであってもよいし、仮想メモリ識別子と組み合わせた仮想アドレスであってもよい。
相関アレイ1050は、インデックス及びタグ情報を記憶してもよく、この情報を使用してウェーブの相関値を計算してもよい。相関アレイ1050は、これらの相関値を決定ユニット1060に報告してもよい。決定ユニット1060は、報告された相関値を使用して、CU0、CU1、CU2及びCU3上でウェーブwave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7を実行するためにデータドリブンスケジューリングを決定してもよい。次に、ウェーブディスパッチャ1040は、データドリブンスケジュールに従って、CU0、CU1、CU2及びCU3上での実行のためにウェーブをディスパッチすることができる。
図11は、ウェーブwave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7の実行中のある時点における相関アレイ650の状態例を示す表1100である。例示的なシステム1000は、8つのウェーブの粒度でスケジューリングを行う。したがって、表1100は、ウェーブwave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7のうち1つにそれぞれ対応する8つのキー1110a、1110b、1110c、1110d、1110e、1110f、1110g、1110hを含む。
各キー1110a、1110b、1110c、1110d、1110e、1110f、1110g、1110hは、対応するタグリスト(図示省略)及び寄与相関値1120a、1120b、1120c、1120d、1120e、1120f、1120g、1120hのセットを含む。寄与相関値1120a、1120b、1120c、1120d、1120e、1120f、1120g、1120hのセットは、ウェーブwave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7の各ペアの相関を反映する。例えば、キー1110aは、wave0に対する寄与相関値1120aのセットを記憶する。寄与相関値1120aのセットは、wave0とwave1との間の相関に対応する寄与相関値C01と、wave0とwave2との間の相関に対応する寄与相関値C02と、wave0とwave3との間の相関に対応する寄与相関値C03と、等を記憶する。他のキー1110b、1110c、1110d、1110e、1110f、1110g、1110hの各々は、図11に反映される同様の寄与相関値1120b、1120c、1120d、1120e、1120f、1120g、1120hのセットを記憶する。相関情報が相関アレイ1050に利用可能になる前には(例えば、方法300のステップ310と同様に)、タグリストは空であってもよく、寄与相関値はゼロであってもよい。
ウェーブの実行中のCU0、CU1、CU2又はCU3による新たなメモリ要求では、相関アレイ1050は、メモリ要求の対応するインデックス及びタグ情報をキャッシュから受信する。インデックス及びタグ情報が表1100内のエントリと一致する場合には、対応する寄与相関値は、増加した相関を反映するようにインクリメント、増加、又は、変更されてもよい。例えば、相関アレイ1050が、インデックスwave1及びタグtag3を受信し、wave0のタグリストがtag3も含むように反映する場合には、wave0とwave1との間の相関を反映する寄与相関値C01を増加(例えば、1だけインクリメントされる)してもよい。
受信したインデックスが表1100のキーと一致するが、受信したタグがタグリスト内の何れのタグとも一致しない場合、受信したタグをそのキーのタグリストに挿入してもよい。受信したインデックスが表1100のキーと一致しないが、受信したタグがタグリスト内のタグと一致する場合、新たなキーをそのインデックスに追加してもよく、タグが一致する場合には他のキーに対する相関が調整され得る。
wave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7がCU0、CU1、CU2及びCU3上での実行を終了した後、寄与相関値C01及びC10を合計(又は別の方法で組み合わせる)して、wave0とwave1との間の相関を反映する相関値c01が決定されてもよい。他の一致する寄与相関値を同様に合計して、他のスレッドペアの相関値を求めてもよい。例えば、c02は、寄与相関値C02及びC20を合計する等によって計算されたwave0及びwave2の相関値であってもよい。これらの相関値c01、c02、c03、c04、c05、c06、c07、c12、c13、c14、c15、c16、c17、c23、c24、c25、c26、c27、c34、c35、c36、c37、c45、c46、c47、c56、c57、c67は、決定ユニット660に報告されてもよい。
wave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7がCU0、CU1、CU2及びCU3上での実行を終了するまで待つのではなく、一定の期間(例えば、1,000プロセッサクロックサイクル)後に寄与相関値が合計及び/又は報告されてもよいことに留意されたい。したがって、相関値は、実行の完了前、又は、CU0、CU1、CU2及びCU3のいくつかの実行後に計算されてもよい。これにより、動的なスケジューリング、及び/又は、より高い解像度のデータに基づくスケジューリングが可能になる。
図1000に戻ると、決定ユニット1060は、報告された相関値c01、c02、c03、c04、c05、c06、c07、c12、c13、c14、c15、c16、c17、c23、c24、c25、c26、c27、c34、c35、c36、c37、c45、c46、c47、c56、c57、c67に基づいて、次の8つのウェーブ(wave0、wave1、wave2、wave3、wave4、wave5、wave6及びwave7)の発行順(すなわち、データドリブンスケジュール)を決定してもよい。表4は、決定ユニット1060がこの決定を行うための部分的なアルゴリズムの一例を示す。ウェーブディスパッチャ1040は、決定ユニット1060からデータドリブンスケジュールを受信し、データドリブンスケジュールに従ってスレッドをCU0、CU1、CU2及びCU3にディスパッチする。いくつかの実装では、ウェーブディスパッチャ1040は、スケジュールが変更されたという決定に基づいて、そのスケジュールを更新するだけでよい。いくつかの実装では、スケジュールが変更されたという条件で、CU0、CU1、CU2及びCU3上で現在実行中のスレッドグループが一時中断されてもよく、コンテキストが保存されてもよく、更新されたスケジュールがウェーブに適用されてもよく(すなわち、ウェーブが、異なる計算ユニット及び/又は実行時間に再度割り当てられてもよい)、コンテキストが復元されてもよく、更新されたスケジュールで実行が再開されてもよい。
Figure 2022160691000005
これらの実装又は他の実装の何れにおいても、データドリブンスケジューラは、例えば、アイドル状態のときに、クロックゲーティング、パワーゲーティング、又は、異なる適切な省電力メカニズムの対象となる場合があることに留意されたい。データドリブンスケジューラは、例えば、新たなシェーダが実行されるまでアイドル状態を維持することができる。
これらの実装又は他の実装の何れにおいても、タグリストは、例えば検索を容易にするために昇順又は降順でソートされてもよく、圧縮又は非圧縮されてもよいことにさらに留意されたい。
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。特徴及び要素は、特定の組み合わせで上記に説明されているが、各特徴又は要素は、他の特徴及び要素を伴わずに単独に使用されてもよいし、他の特徴及び要素を伴う又は伴わない様々な組み合わせで使用されてもよい。
提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実装されてもよい。適切なプロセッサには、一例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、他のタイプの集積回路(IC)、及び/又は、状態機械を含む。かかるプロセッサは、処理されたハードウェア記述言語(HDL)命令の結果と、ネットリスト(コンピュータ可読媒体上に記憶することができる命令等)を含む他の中間データと、を使用して製造プロセスを構成することによって製造されてもよい。かかる処理の結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスで使用されるマスクワークであってもよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実装されてもよい。非一時的なコンピュータ可読記憶媒体の例には、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、CD-ROMディスク及びデジタル多目的ディスク(DVD)等の光学媒体が含まれる。

Claims (20)

  1. プロセッサの複数の計算コアのデータドリブンスケジューリングの方法であって、
    デフォルトスケジュールに従って、複数のスレッドを前記複数の計算コア上で実行することと、
    前記デフォルトスケジュールに従った実行に基づいて前記複数のスレッドを分析して、前記複数のスレッドの中から相関スレッドを決定することであって、スレッドは、スレッドがメモリから同じ情報又は同じ参照にアクセスするかどうかに基づいて、相関があると決定される、ことと、
    前記相関スレッドの各々が、前記複数のスレッドの全ての実行にわたって相関が最大となる順序でスケジュールされる、データドリブンスケジュールを生成することと、
    前記データドリブンスケジュールに従って、前記複数のスレッドを前記複数の計算コア上で実行することと、を含む、
    方法。
  2. 前記相関スレッドは、メモリの再使用に基づいて相関される、請求項1の方法。
  3. 前記相関スレッドは、参照局所性に基づいて相関される、請求項1の方法。
  4. 前記デフォルトスケジュールは、ラウンドロビンスケジュールを含む、請求項1の方法。
  5. 前記複数のスレッドを分析して前記相関スレッドを決定することは、
    データドリブンスケジューリング回路が、前記計算コア上での前記複数のスレッドの少なくとも一部の実行に起因する前記計算コアによるメモリアクセスに関する情報を受信することと、
    前記情報に基づいて前記相関スレッドを得ることと、を含む、
    請求項1の方法。
  6. メモリは前記複数の計算コア間で共有される、請求項5の方法。
  7. メモリはキャッシュメモリを備える、請求項5の方法。
  8. 前記データドリブンスケジュールは、前記複数のスレッドの各々が前記計算コア上での実行を完了した後に生成される、請求項1の方法。
  9. 前記データドリブンスケジュールは、前記複数のスレッドの前記計算コア上での実行が一定期間進行した後に生成される、請求項1の方法。
  10. 前記データドリブンスケジュールは、前記複数のスレッドの全てが前記計算コア上での実行を完了する前に生成される、請求項1の方法。
  11. データドリブンスケジュールのために構成されたプロセッサであって、
    複数の計算コアと、
    前記複数の計算コアの各々によって共有されるメモリと、
    デフォルトスケジュールに従って、複数のスレッドを、前記複数の計算コア上で実行するためにディスパッチするように構成されたディスパッチ回路と、
    前記デフォルトスケジュールに従った実行に基づいて前記複数のスレッドを分析して、前記複数のスレッドの中から相関スレッドを決定するように構成された相関回路であって、スレッドは、スレッドがメモリから同じ情報又は同じ参照にアクセスするかどうかに基づいて、相関があると決定される、相関回路と、
    前記相関スレッドの各々が、前記複数のスレッドの全ての実行にわたって相関が最大となる順序でスケジュールされる、データドリブンスケジュールを決定するように構成されたスケジューリング回路と、を備え、
    前記ディスパッチ回路は、前記複数のスレッドを、前記データドリブンスケジュールに従って前記複数の計算コア上で実行するためにディスパッチするように構成されている、
    プロセッサ。
  12. 前記相関回路は、メモリの再使用に基づいて前記相関スレッドを決定するように構成されている、請求項11のプロセッサ。
  13. 前記相関回路は、参照局所性に基づいて前記相関スレッドを決定するように構成されている、請求項11のプロセッサ。
  14. 前記デフォルトスケジュールは、ラウンドロビンスケジュールを含む、請求項11のプロセッサ。
  15. 前記相関回路は、
    前記計算コア上での前記複数のスレッドの少なくとも一部の実行に起因する前記計算コアによるメモリアクセスに関する情報を受信することと、
    前記情報に基づいて前記相関スレッドを得ることと、を行うように構成されている、
    請求項11のプロセッサ。
  16. メモリは前記複数の計算コア間で共有される、請求項15のプロセッサ。
  17. メモリはキャッシュメモリを備える、請求項15のプロセッサ。
  18. 前記プロセッサは、回路を備え、
    前記回路は、
    前記データドリブンスケジュールが前記デフォルトスケジュールと異なるか否かを判別し、
    前記データドリブンスケジュールが前記デフォルトスケジュールと異なる場合に、前記計算コアの実行を一時中断し、現在のコンテキストを保存し、前記データドリブンスケジュールに従って、前記複数のスレッドをディスパッチするように構成されている、
    請求項11のプロセッサ。
  19. 前記データドリブンスケジュールは、前記複数のスレッドの各々が前記計算コア上での実行を完了した後に生成される、請求項11のプロセッサ。
  20. 前記データドリブンスケジュールは、前記複数のスレッドの前記計算コア上での実行が一定期間進行した後に生成される、請求項11のプロセッサ。
JP2022128766A 2015-12-28 2022-08-12 複数の計算コア上のデータドリブンスケジューラ Pending JP2022160691A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14/981,257 US10649810B2 (en) 2015-12-28 2015-12-28 Data driven scheduler on multiple computing cores
US14/981,257 2015-12-28
JP2018552632A JP2019501470A (ja) 2015-12-28 2016-09-20 複数の計算コア上のデータドリブンスケジューラ
PCT/US2016/052710 WO2017116517A1 (en) 2015-12-28 2016-09-20 Data driven scheduler on multiple computing cores

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2018552632A Division JP2019501470A (ja) 2015-12-28 2016-09-20 複数の計算コア上のデータドリブンスケジューラ

Publications (1)

Publication Number Publication Date
JP2022160691A true JP2022160691A (ja) 2022-10-19

Family

ID=59086376

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2018552632A Pending JP2019501470A (ja) 2015-12-28 2016-09-20 複数の計算コア上のデータドリブンスケジューラ
JP2022128766A Pending JP2022160691A (ja) 2015-12-28 2022-08-12 複数の計算コア上のデータドリブンスケジューラ

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2018552632A Pending JP2019501470A (ja) 2015-12-28 2016-09-20 複数の計算コア上のデータドリブンスケジューラ

Country Status (5)

Country Link
US (1) US10649810B2 (ja)
EP (1) EP3398065B1 (ja)
JP (2) JP2019501470A (ja)
KR (1) KR102616212B1 (ja)
WO (1) WO2017116517A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US10558499B2 (en) * 2017-10-26 2020-02-11 Advanced Micro Devices, Inc. Wave creation control with dynamic resource allocation
US20190370059A1 (en) * 2018-05-30 2019-12-05 Advanced Micro Devices, Inc. Multi-kernel wavefront scheduler
US10796472B2 (en) * 2018-06-30 2020-10-06 Intel Corporation Method and apparatus for simultaneously executing multiple contexts on a graphics engine
KR102641520B1 (ko) * 2018-11-09 2024-02-28 삼성전자주식회사 멀티-코어 프로세서를 포함하는 시스템 온 칩 및 그것의 태스크 스케줄링 방법
KR102161635B1 (ko) * 2019-02-11 2020-10-06 서경대학교 산학협력단 범용 그래픽 처리장치 및 이의 스케쥴링 방법
US11954757B2 (en) * 2021-12-28 2024-04-09 Advanced Micro Devices, Inc. Method and apparatus for implementing a rasterizer in GPU operations

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6289369B1 (en) * 1998-08-25 2001-09-11 International Business Machines Corporation Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system
US6769017B1 (en) * 2000-03-13 2004-07-27 Hewlett-Packard Development Company, L.P. Apparatus for and method of memory-affinity process scheduling in CC-NUMA systems
US8037465B2 (en) * 2005-09-30 2011-10-11 Intel Corporation Thread-data affinity optimization using compiler
GB0519981D0 (en) 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
US20070143759A1 (en) 2005-12-15 2007-06-21 Aysel Ozgur Scheduling and partitioning tasks via architecture-aware feedback information
US8495649B2 (en) 2006-07-19 2013-07-23 International Business Machines Corporation Scheduling threads having complementary functional unit usage on SMT processors
CN101482831B (zh) 2008-01-08 2013-05-15 国际商业机器公司 对工作线程与辅助线程进行相伴调度的方法和设备
US8643656B2 (en) * 2010-09-30 2014-02-04 Nec Laboratories America, Inc. Energy-aware task consolidation on graphics processing unit (GPU)
US9448837B2 (en) * 2012-12-27 2016-09-20 Nvidia Corporation Cooperative thread array granularity context switch during trap handling
JP6252140B2 (ja) 2013-11-29 2017-12-27 富士通株式会社 タスク割り付けプログラム及びタスク割り付け方法
GB2521155B (en) * 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
US9477480B2 (en) * 2014-01-30 2016-10-25 Nvidia Corporation System and processor for implementing interruptible batches of instructions
US9122800B1 (en) 2014-05-30 2015-09-01 Honeywell International Inc. System and method of non-intrusive measurement of memory access profiles of threads in a multi-core processor

Also Published As

Publication number Publication date
US20170185451A1 (en) 2017-06-29
KR20180089550A (ko) 2018-08-08
EP3398065B1 (en) 2023-04-19
JP2019501470A (ja) 2019-01-17
US10649810B2 (en) 2020-05-12
EP3398065A4 (en) 2019-08-07
WO2017116517A1 (en) 2017-07-06
EP3398065A1 (en) 2018-11-07
KR102616212B1 (ko) 2023-12-21

Similar Documents

Publication Publication Date Title
JP2022160691A (ja) 複数の計算コア上のデータドリブンスケジューラ
US8643656B2 (en) Energy-aware task consolidation on graphics processing unit (GPU)
KR101839544B1 (ko) 이종 코어의 자동 부하 균형
US20090113181A1 (en) Method and Apparatus for Executing Instructions
CN108549574B (zh) 线程调度管理方法、装置、计算机设备和存储介质
KR20130116166A (ko) 멀티-코어 프로세서용 멀티스레드 애플리케이션-인지 메모리 스케줄링 기법
US11880715B2 (en) Method and system for opportunistic load balancing in neural networks using metadata
US20140053161A1 (en) Method for Adaptive Scheduling of Multimedia Jobs
Tripathy et al. Paver: Locality graph-based thread block scheduling for gpus
US8935475B2 (en) Cache management for memory operations
CN114153500A (zh) 指令调度方法、指令调度装置、处理器及存储介质
CN114168202B (zh) 指令调度方法、指令调度装置、处理器及存储介质
Jeong et al. REACT: Scalable and high-performance regular expression pattern matching accelerator for in-storage processing
US9740611B2 (en) Memory management for graphics processing unit workloads
US11893502B2 (en) Dynamic hardware selection for experts in mixture-of-experts model
US20190318229A1 (en) Method and system for hardware mapping inference pipelines
Chen et al. Enabling SIMT execution model on homogeneous multi-core system
Wei et al. NN-Stretch: Automatic Neural Network Branching for Parallel Inference on Heterogeneous Multi-Processors
US10877926B2 (en) Method and system for partial wavefront merger
Zhang et al. Buddy SM: sharing pipeline front-end for improved energy efficiency in GPGPUs
Zhang et al. Memory Request Priority Based Warp Scheduling for GPUs
Zhang et al. Locality‐protected cache allocation scheme with low overhead on GPUs
US20220188232A1 (en) Uniform cache system for fast data access
US20230205680A1 (en) Emulating performance of prior generation platforms
US20220206851A1 (en) Regenerative work-groups

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220816

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230621

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230704

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231002

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240109