(57)【要約】  グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの単一のセットはワープ中のスレッドのすべてに適用される、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行することとを含む、グラフィックス処理ユニットにおいてデータを処理するための方法。命令の第１のセットを実行することは、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの単一のセットに従って命令の第１のセットを実行すること、および／または、スカラー処理ユニットを使用して、述語ビットの単一のセットに従って命令の第１のセットを実行することを含み得る。【特許請求の範囲】
【請求項１】
データを処理するための方法であって、前記方法は、
グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を備える、方法。
【請求項２】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきであるように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項１に記載の方法。
【請求項３】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項１に記載の方法。
【請求項４】
命令の前記第１のセットの前記一部分を実行することが、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
を備える、請求項１に記載の方法。
【請求項５】
命令の前記第１のセットの前記一部分を実行することが、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
を備える、請求項１に記載の方法。
【請求項６】
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行すること
をさらに備える、請求項５に記載の方法。
【請求項７】
前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記指示を送ることと
をさらに備える、請求項１に記載の方法。
【請求項８】
命令の前記第１のセットのためのワープ全体が定数の同じセットを使用すると決定することによって、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用すると決定することによって、前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定すること
をさらに備える、請求項７に記載の方法。
【請求項９】
データを処理するための装置であって、前記装置は、
命令の第１のセットを記憶するように構成されたメモリと、
第１のプロセッサとを備え、前記第１のプロセッサは、
前記第１のプロセッサにおけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてレジスタに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を行うように構成された、
装置。
【請求項１０】
前記第１のプロセッサがグラフィックス処理ユニット（ＧＰＵ）である、請求項９に記載の装置。
【請求項１１】
前記第１のプロセッサが、複数の処理要素を含む単一命令複数データ（ＳＩＭＤ）処理コアをさらに含み、前記装置が、
前記レジスタをさらに備え、ここにおいて、前記レジスタが、前記ＳＩＭＤコアの前記複数の処理要素の各々によってアクセス可能である、
請求項９に記載の装置。
【請求項１２】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきであるように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項９に記載の装置。
【請求項１３】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項９に記載の装置。
【請求項１４】
前記第１のプロセッサが、前記ＳＩＭＤ処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するようにさらに構成された、請求項９に記載の装置。
【請求項１５】
前記第１のプロセッサがスカラー処理ユニットをさらに含み、ここにおいて、前記第１のプロセッサが、前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するようにさらに構成された、請求項９に記載の装置。
【請求項１６】
前記第１のプロセッサが、複数の処理要素を含む単一命令複数データ（ＳＩＭＤ）処理コアをさらに含み、ここにおいて、前記第１のプロセッサが、前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、前記ＳＩＭＤ処理コアを使用して、命令の第２のセットを実行するようにさらに構成された、請求項１５に記載の装置。
【請求項１７】
前記第１のプロセッサと通信している第２のプロセッサをさらに備え、前記第２のプロセッサは、
前記第１のプロセッサにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記指示を前記第１のプロセッサに送ることと
を行うように構成された、
請求項９に記載の装置。
【請求項１８】
前記第２のプロセッサが中央処理ユニット（ＣＰＵ）である、請求項１７に記載の装置。
【請求項１９】
前記第２のプロセッサは、命令の前記第１のセットのためのワープ全体が定数の同じセットを使用すると決定することによって、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用すると決定することによって、前記第１のプロセッサにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定するようにさらに構成された、請求項１７に記載の装置。
【請求項２０】
前記装置がワイヤレス通信デバイスである、請求項９に記載の装置。
【請求項２１】
データを処理するための装置であって、前記装置は、
グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信するための手段と、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶するための手段と、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行するための手段と
を備える、装置。
【請求項２２】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項２１に記載の装置。
【請求項２３】
命令の前記第１のセットの前記一部分を実行するための前記手段が、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するための手段
を備える、請求項２１に記載の装置。
【請求項２４】
命令の前記第１のセットの前記一部分を実行するための前記手段が、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するための手段
を備える、請求項２１に記載の装置。
【請求項２５】
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行するための手段
をさらに備える、請求項２４に記載の装置。
【請求項２６】
実行されたとき、１つまたは複数のプロセッサに、
グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
【請求項２７】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項２６に記載のコンピュータ可読記憶媒体。
【請求項２８】
前記命令が、前記１つまたは複数のプロセッサに、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
をさらに行わせる、請求項２６に記載のコンピュータ可読記憶媒体。
【請求項２９】
前記命令が、前記１つまたは複数のプロセッサに、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
をさらに行わせる、請求項２６に記載のコンピュータ可読記憶媒体。
【請求項３０】
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行すること
をさらに備える、請求項２９に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]本開示は、マルチスレッド処理に関し、より詳細には、単一命令複数データ（ＳＩＭＤ：single instruction multiple data）処理システムにおける技法実行に関する。
【背景技術】
【０００２】
[0002]単一命令複数データ（ＳＩＭＤ）処理システムは、同じ命令を複数のデータに対して実行する複数の処理要素を含む並列コンピューティングシステムのクラスである。ＳＩＭＤシステムは、スタンドアロンコンピュータまたはコンピューティングシステムのサブシステムであり得る。たとえば、プログラマブルシェーディングをサポートするプログラマブルシェーディングユニットを実装するために、１つまたは複数のＳＩＭＤ実行ユニットがグラフィックス処理ユニット（ＧＰＵ：graphics processing unit）において使用され得る。ＳＩＭＤ処理システムは、プログラムのための複数の実行スレッドが、並列様式で複数の処理要素上で同期的に実行することを可能にし、それにより、演算の同じセットが複数のデータに対して実施される必要があるプログラムについて、スループットを増大させる特定のＳＩＭＤ処理要素上で実行する特定の命令は、スレッドまたはファイバー（fiber）と呼ばれる。スレッドのグループは、波（wave）またはワープ（warp）と呼ばれることがある。
【０００３】
[0003]ＧＰＵなど、処理ユニットは、処理要素と、命令の実行のためのデータを記憶する汎用レジスタ（ＧＰＲ：general purpose register）とを含む。いくつかの例では、処理要素は、データの１つの項目（item）を処理するための命令を実行し、それぞれの処理要素が、項目のデータ、または処理からの項目の得られたデータをＧＰＲに記憶する。データの項目は、それに対して処理が発生する基本単位であり得る。たとえば、グラフィックス処理では、プリミティブの頂点が項目の一例であり、ピクセルが項目の別の例である。各頂点およびピクセルに関連するグラフィックスデータ（たとえば、座標、色値など）がある。
【０００４】
[0004]命令の並列実行を可能にする処理要素のプロセッサコア内に、複数の処理要素があり得る（たとえば、複数の処理要素は、同じ命令を同時に実行する）。いくつかの場合には、複数の項目のためのデータが同じである場合でも、処理要素の各々が、項目のデータをＧＰＲに記憶し、ＧＰＲから項目のデータを読み取る。
【発明の概要】
【０００５】
[0005]概して、本開示は、ＧＰＵのシェーダコアおよび／またはＳＩＭＤ処理コアのための述語ビット（predicate bit）を決定するための技法について説明する。述語ビットは、ＳＩＭＤ処理コアの１つのスレッドが、命令のセット中の分岐条件に達すると、命令のセットの（１つまたは複数の）どの部分を実行するかまたは実行しないかを示す。特に、本開示は、それによって、すべてのスレッドが同様の方法で分岐するとき、述語ビットの単一のセットが、記憶され、ＳＩＭＤ処理コア中のワープのすべてのスレッドによって使用され得る、技法について説明する。そのような技法は、スレッドごとの述語ビットを使用することを介して簡略化および電力節約を可能にする。
【０００６】
[0006]一例では、本開示は、グラフィックス処理ユニットにおいてデータを処理する方法について説明し、本方法は、グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの単一のセットがワープ中のスレッドのすべてに適用される、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行することとを備える。
【０００７】
[0007]別の例では、本開示は、データを処理するための装置について説明し、本装置は、命令の第１のセットを記憶するように構成されたメモリと、第１のプロセッサにおけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、１つまたは複数の述語ビットを述語ビットの単一のセットとしてレジスタに記憶することと、ここにおいて、述語ビットの単一のセットがワープ中のスレッドのすべてに適用される、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行することとを行うように構成された第１のプロセッサとを備える。
【０００８】
[0008]別の例では、本開示は、データを処理するための装置について説明し、本装置は、グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信するための手段と、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶するための手段と、ここにおいて、述語ビットの単一のセットがワープ中のスレッドのすべてに適用される、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行するための手段とを備える。
【０００９】
[0009]別の例では、本開示は、実行されたとき、１つまたは複数のプロセッサに、グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの単一のセットがワープ中のスレッドのすべてに適用される、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行することとを行わせる命令を記憶したコンピュータ可読記憶媒体について説明する。
【００１０】
[0010]１つまたは複数の例の詳細が添付の図面および以下の説明に記載される。他の特徴、目的、および利点は、説明、図面、および特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]本開示で説明される１つまたは複数の例示的な技法による、データを処理するための例示的なデバイスを示すブロック図。
【図２】[0012]図１に示されたデバイスの構成要素をより詳細に示すブロック図。
【図３】[0013]命令のセットの一例を示す概念図。
【図４】[0014]ＧＰＵのシェーダコアの汎用レジスタ（ＧＰＲ）におけるデータ記憶の一例を示す概念図。
【図５】[0015]図１のＧＰＵの例示的なシェーダコアのより詳細なブロック図。
【図６】[0016]図１のＧＰＵの別の例示的なシェーダコアのより詳細なブロック図。
【図７】[0017]ＧＰＵにおいてデータを処理する例示的な技法を示すフローチャート。
【発明を実施するための形態】
【００１２】
[0018]多くの演算を並列に（たとえば、同時に）実施するように構成されたグラフィックス処理ユニット（ＧＰＵ）など、並列処理ユニットは、１つまたは複数のプログラムの命令を実行する１つまたは複数のプロセッサコア（たとえば、ＧＰＵのためのシェーダコア）を含む。説明しやすいように、本開示で説明される技法は、ＧＰＵまたは汎用ＧＰＵ（ＧＰＧＰＵ：general purpose GPU）に関して説明される。しかしながら、本開示で説明される技法は、必ずしもＧＰＵまたはＧＰＧＰＵであるとは限らない並列処理ユニット、ならびに、非並列処理ユニット（たとえば、並列処理のために特に構成されていない処理ユニット）に拡張され得る。
【００１３】
[0019]ＧＰＵは、単一命令複数データ（ＳＩＭＤ）構造を用いて設計され得る。ＳＩＭＤ構造では、シェーダコア（または、より一般的には、ＳＩＭＤ処理コア）は複数のＳＩＭＤ処理要素を含み、各ＳＩＭＤ処理要素は、同じプログラムの命令を、ただし異なるデータに対して実行する。特定のＳＩＭＤ処理要素上で実行する特定の命令は、スレッドまたはファイバーと呼ばれる。スレッドのグループは、波またはワープと呼ばれることがある。ワープを実行する処理要素のすべてが一緒に、ベクトル処理ユニットと呼ばれることがあり、ベクトルの各レーン（たとえば、処理要素）は１つのスレッドを実行する。各ＳＩＭＤ処理要素は、所与のスレッドのためのデータが異なり得るので、異なるスレッドを実行するものと見なされ得るが、処理要素上で実行するスレッドは、他の処理要素上で実行する命令と、同じプログラムの、同じ命令である。このようにして、ＳＩＭＤ構造は、ＧＰＵが多くのタスクを並列に（たとえば、同時に）実施することを可能にする。
【００１４】
[0020]ＳＩＭＤ処理コアは複数の処理要素を含み得、各処理要素はスレッドを実行する。各処理要素は、命令の同じセットを並列に実行する。いくつかの状況では、命令のセットは、条件付き分岐命令（たとえば、ｉｆ−ｔｈｅｎ−ｅｌｓｅ命令）を含み得る。各処理要素が、異なるデータに対して演算するので、同じワープ中の異なるスレッドが、異なる方法で分岐し得る。すなわち、各スレッドのための異なる入力データを仮定すれば、条件付き命令の「ｔｈｅｎ」分岐を取るべきなのか条件文の「ｅｌｓｅ」分岐を取るべきなのかの条件は、各スレッドごとに異なり得る。
【００１５】
[0021]いくつかの例では、ＳＩＭＤ処理コアのための制御フローは、述語ビットを使用して「スレッドごと」ベース（“per-thread” basis）で実施され、述語ビットは、ＳＩＭＤベクトルの各スレッド（レーン）がどのように（たとえば、各処理要素がどのように）分岐するべきであるかを示す（すなわち、命令の単一のセットが分岐命令を含む場合）。スレッドは独立したデータを有するので、これらの述語（predicate）は、一般に、互いに相関関係を有しない。しかしながら、それは常に真であるとは限らず、同じ述語がワープ中のすべてのスレッドに適用される場合、独立した述語の使用は不経済である。
【００１６】
[0022]本開示は、述語ビットの単一のセットがそれにおいてワープ全体に適用される、一様な（uniform）述語のセットを使用する方法、技法、およびデバイスについて説明する。そのような一様な述語は、ワープのすべてのスレッドが同様の方法で分岐すると決定されたとき、使用され得る。このようにして、スレッドごとベースで述語ビットを割り当てることとは対照的に、一様な述語を使用するときに、単一の試験のみが行われるので、電力節約が達成され得る。
【００１７】
[0023]さらに、本開示は、ＧＰＵのＳＩＭＤコアと並んで、ＧＰＵにおけるスカラー処理ユニットの追加についても説明する。スカラー処理ユニットは、ワープのすべてスレッドについて同様の方法で分岐すると決定された、命令のセットを実行するために使用され得る。このようにして、スカラー処理ユニットは、一様な分岐をもつ命令のセットを実行するために一様な述語セットを使用し得、ＳＩＭＤコアのベクトル処理ユニットは、スカラー処理ユニットと並列に命令の別のセットを処理するために使用され得る。
【００１８】
[0024]図１は、一様な述語を用いたシェーダコアにおけるスレッドの実行のための本開示で説明される１つまたは複数の例示的な技法による、データを処理するための例示的なデバイスを示すブロック図である。図１は、デバイス１０を示し、デバイス１０の例としては、限定はしないが、メディアプレーヤなどのビデオデバイス、セットトップボックス、携帯電話などのワイヤレス通信デバイス、携帯情報端末（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲーミングコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどがある。
【００１９】
[0025]図１の例では、デバイス１０は、プロセッサ１２と、グラフィックス処理ユニット（ＧＰＵ）１４と、システムメモリ１６とを含む。デバイス１０がモバイルデバイスである例など、いくつかの例では、プロセッサ１２およびＧＰＵ１４は、集積回路（ＩＣ）として形成され得る。たとえば、ＩＣは、システムオンチップ（ＳｏＣ）など、チップパッケージ内の処理チップと見なされ得る。デバイス１０がデスクトップまたはラップトップコンピュータである例など、いくつかの例では、プロセッサ１２およびＧＰＵ１４は、異なる集積回路（たとえば、異なるチップパッケージ）に格納され得る。しかしながら、プロセッサ１２およびＧＰＵ１４は、デバイス１０がモバイルデバイスである例において、異なる集積回路に格納されることが可能であり得る。
【００２０】
[0026]プロセッサ１２およびＧＰＵ１４の例としては、限定はしないが、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路がある。プロセッサ１２は、デバイス１０の中央処理ユニット（ＣＰＵ）であり得る。いくつかの例では、ＧＰＵ１４は、グラフィックス処理に好適な超並列処理能力をＧＰＵ１４に与える集積回路および／またはディスクリート論理回路を含む専用ハードウェアであり得る。いくつかの事例では、ＧＰＵ１４は、汎用処理能力をも含み得、汎用処理タスク（すなわち、非グラフィックス関係タスク）を実装するとき、汎用ＧＰＵ（ＧＰＧＰＵ）と呼ばれることがある。
【００２１】
[0027]例示のために、本開示で説明される技法は、ＧＰＵ１４を用いて説明される。ただし、本開示で説明される技法はそのように限定されない。本開示で説明される技法は、他のタイプの並列処理ユニット（たとえば、グラフィックス処理用でない場合でも、超並列処理能力を与える処理ユニット）に拡張され得る。また、本開示で説明される技法は、並列処理のために特に構成されていない処理ユニットに拡張され得る。
【００２２】
[0028]プロセッサ１２は様々なタイプのアプリケーションを実行し得る。アプリケーションの例としては、オペレーティングシステム、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、または表示のために閲覧可能オブジェクトを生成する他のアプリケーションがある。システムメモリ１６は、１つまたは複数のアプリケーションの実行のための命令を記憶し得る。プロセッサ１２上でのアプリケーションの実行は、プロセッサ１２に、表示されるべきである画像コンテンツのためのグラフィックスデータを生成させる。プロセッサ１２は、さらなる処理のために画像コンテンツのグラフィックスデータをＧＰＵ１４に送信し得る。
【００２３】
[0029]一例として、プロセッサ１２上でのアプリケーションの実行は、プロセッサ１２にプリミティブの頂点を生成させ、それぞれの頂点におけるプリミティブの相互接続がグラフィカルオブジェクトを形成する。この例では、プロセッサ１２が生成するグラフィックスデータは、頂点の属性のための属性データである。たとえば、プロセッサ１２上で実行するアプリケーションは、頂点のための色値、不透明値、座標などを生成し得、それらはすべて、頂点の属性の例である。同様に追加の属性があり得、いくつかの例では、アプリケーションは例示的な属性のすべてを生成する必要があるとは限らない。概して、本技法は、属性データ以外のデータタイプ（たとえば、カウンタ）に拡張可能であり、本技法は、属性データに限定されると見なされるべきではなく、または色値、不透明値、座標などの属性データの例に限定されると見なされるべきではない。
【００２４】
[0030]いくつかの非グラフィックス関係例では、プロセッサ１２は、ＧＰＵ１４によって処理されるのにより良く適しているデータを生成し得る。そのようなデータは、グラフィックスまたは表示目的である必要がない。たとえば、プロセッサ１２は、行列演算がそれに対してＧＰＵ１４によって実施される必要があるデータを出力し得、今度は、ＧＰＵ１４が行列演算を実施し得る。
【００２５】
[0031]概して、プロセッサ１２は、超並列演算を必要とするタスクなど、処理タスクをＧＰＵ１４にオフロードし得る。一例として、グラフィックス処理は超並列演算を必要とし、プロセッサ１２は、そのようなグラフィックス処理タスクをＧＰＵ１４にオフロードし得る。しかしながら、行列演算などの他の演算も、ＧＰＵ１４の並列処理能力から恩恵を受け得る。これらの例では、プロセッサ１２は、ＧＰＵ１４に非グラフィックス関係演算を実施させるために、ＧＰＵ１４の並列処理能力を活用し得る。
【００２６】
[0032]プロセッサ１２は、特定のアプリケーション処理インターフェース（ＡＰＩ：application processing interface）に従ってＧＰＵ１４と通信し得る。そのようなＡＰＩの例としては、Ｍｉｃｒｏｓｏｆｔ（登録商標）によるＤｉｒｅｃｔＸ（登録商標）ＡＰＩ、クロノスグループによるＯｐｅｎＧＬ（登録商標）またはＯｐｅｎＧＬ  ＥＳ（登録商標）、およびＯｐｅｎＣＬ（登録商標）があるが、本開示の態様は、ＤｉｒｅｃｔＸ、ＯｐｅｎＧＬ、またはＯｐｅｎＣＬ  ＡＰＩに限定されず、他のタイプのＡＰＩに拡張され得る。その上、本開示で説明される技法は、ＡＰＩに従って機能することを必要とせず、プロセッサ１２およびＧＰＵ１４は通信のために任意の技法を利用し得る。
【００２７】
[0033]デバイス１０は、ディスプレイ１８と、ユーザインターフェース２０と、トランシーバモジュール２２とをも含み得る。デバイス１０は、明快のために図１に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス１０は、デバイス１０がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図１に示されていないスピーカーおよびマイクロフォンを含み得る。さらに、デバイス１０に示されている様々なモジュールおよびユニットは、デバイス１０のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース２０およびディスプレイ１８は、デバイス１０がデスクトップコンピュータである例では、デバイス１０の外部にあり得る。別の例として、ユーザインターフェース２０は、ディスプレイ１８がモバイルデバイスのタッチセンシティブまたはプレゼンスセンシティブディスプレイである例では、ディスプレイ１８の一部であり得る。
【００２８】
[0034]ディスプレイ１８は、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、タッチセンシティブディスプレイ、プレゼンスセンシティブディスプレイ、または別のタイプのディスプレイデバイスを備え得る。ユーザインターフェース２０の例としては、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース２０はまた、タッチスクリーンであり得、ディスプレイ１８の一部として組み込まれ得る。トランシーバモジュール２２は、デバイス１０と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール２２は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。
【００２９】
[0035]システムメモリ１６はデバイス１０のためのメモリであり得る。システムメモリ１６は１つまたは複数のコンピュータ可読記憶媒体を備え得る。システムメモリ１６の例としては、限定はしないが、ランダムアクセスメモリ（ＲＡＭ）、電気的消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、あるいは命令および／またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、他の媒体がある。
【００３０】
[0036]いくつかの態様では、システムメモリ１６は、本開示ではプロセッサ１２およびＧＰＵ１４に起因する機能をプロセッサ１２および／またはＧＰＵ１４に実施させる命令を含み得る。したがって、システムメモリ１６は、実行されたとき、１つまたは複数のプロセッサ（たとえば、プロセッサ１２およびＧＰＵ１４）に様々な機能を実施させる命令を記憶したコンピュータ可読記憶媒体であり得る。
【００３１】
[0037]いくつかの例では、システムメモリ１６は非一時的記憶媒体であり得る。「非一時的」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示し得る。ただし、「非一時的」という用語は、システムメモリ１６が非可動であること、またはそれのコンテンツが静的であることを意味すると解釈されるべきではない。一例として、システムメモリ１６は、デバイス１０から取り外され、別のデバイスに移動され得る。別の例として、システムメモリ１６と実質的に同様のメモリがデバイス１０中に挿入され得る。いくつかの例では、非一時的記憶媒体は、時間とともに変化し得るデータを（たとえば、ＲＡＭに）記憶し得る。
【００３２】
[0038]たとえば、本開示における他の場所でより詳細に説明されるように、システムメモリ１６は、本開示で説明される１つまたは複数の例の技法を実施するプロセッサ１２上で実行するコンパイラのためのコードを記憶し得る。システムメモリ１６は、ＧＰＵ１４のシェーダコア上で実行するシェーダプログラム（たとえば、頂点シェーダ、ピクセルまたはフラグメントシェーダ、計算シェーダなど）のためのコードをも記憶し得る。
【００３３】
[0039]グラフィックス項目（graphics item）という用語は、本開示では、ＧＰＵ１４が並列処理をそれに対して実施する基本単位を指すために使用される。ＧＰＵ１４は、複数のグラフィックス項目を並列に（たとえば、同時に）処理し得る。たとえば、頂点シェーダは頂点を処理し得、ＧＰＵ１４は、複数の頂点を同時に処理するために、頂点シェーダの複数のインスタンスを並列に実行し得る。同様に、ピクセルまたはフラグメントシェーダはディスプレイのピクセルを処理し得、ＧＰＵ１４は、ディスプレイの複数のピクセルを同時に処理するために、ピクセルシェーダの複数のインスタンスを並列に実行し得る。頂点およびピクセルは、グラフィックス項目の例である。
【００３４】
[0040]非グラフィックス関係アプリケーションの場合、グラフィックス項目という用語は、ＧＰＵ１４が処理をそれに対して実施する最小単位をも指す。ただし、そのような処理は、グラフィックス関係でないことがある。したがって、「グラフィックス項目」という用語は、グラフィックス処理ユニット（たとえば、ＧＰＵ１４）または汎用グラフィックス処理ユニット（たとえば、ＧＰＵ１４がＧＰＧＰＵとして機能する例）が並列に処理するべきである項目を指すように意図されている。グラフィックス項目は、グラフィカルまたは非グラフィカル目的のために使用され得る。
【００３５】
[0041]以下でより詳細に説明されるように、本開示の様々な例によれば、ＧＰＵ１４は、ＧＰＵにおけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの単一のセットはワープ中のスレッドのすべてに適用される、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行することとを行うように構成される。
【００３６】
[0042]図２は、図１に示されたデバイスの構成要素をより詳細に示すブロック図である。図２に示されているように、ＧＰＵ１４は、汎用レジスタ（ＧＰＲ）２６と一様述語レジスタ（ＵＰＲ：uniform predicate register）９２とを含むシェーダコア２４と、固定機能パイプライン３０とを含む。シェーダコア２４および固定機能パイプライン３０はともに、グラフィックスまたは非グラフィックス関係機能を実施するために使用される処理パイプラインを形成し得る。処理パイプラインは、ＧＰＵ１４上で実行するソフトウェアまたはファームウェアによって定義された機能を実施し、特定の機能を実施するように配線接続された固定機能ユニットによって機能を実施する。
【００３７】
[0043]ＧＰＵ１４上で実行するソフトウェアおよび／またはファームウェアはシェーダプログラム（または単にシェーダ）と呼ばれることがあり、シェーダプログラムは、ＧＰＵ１４のシェーダコア２４上で実行し得る。１つのシェーダコア２４のみが示されているが、いくつかの例では、ＧＰＵ１４は、シェーダコア２４と同様の１つまたは複数のシェーダコアを含み得る。固定機能パイプライン３０は固定機能ユニットを含む。シェーダコア２４および固定機能パイプライン３０は、互いにデータを送信および受信し得る。たとえば、処理パイプラインは、シェーダコア２４上で実行するシェーダプログラムを含み得、シェーダコア２４は、固定機能パイプライン３０の固定機能ユニットからデータを受信し、処理されたデータを固定機能パイプライン３０の別の固定機能ユニットに出力する。
【００３８】
[0044]ユーザは、任意の考えられる様式で所望のタスクを実施するようにシェーダプログラムを設計することができるので、シェーダプログラムはユーザおよび／または開発者に機能的フレキシビリティを与える。しかしながら、固定機能ユニットは、固定機能ユニットがタスクを実施する様式のために配線接続される。したがって、固定機能ユニットは多くの機能的フレキシビリティを与えないことがある。
【００３９】
[0045]シェーダプログラムの例としては、頂点シェーダプログラム３２、フラグメントシェーダプログラム３４、および計算シェーダプログラム３６がある。頂点シェーダプログラム３２およびフラグメントシェーダプログラム３４は、グラフィックス関係タスクのためのシェーダプログラムであり得、計算シェーダプログラム３６は、非グラフィックス関係タスクのためのシェーダプログラムであり得る。いくつかの例では、頂点シェーダプログラム３２およびフラグメントシェーダプログラム３４のようなグラフィックス関係シェーダプログラムのみが使用され得る。いくつかの例では、計算シェーダプログラム３６のような非グラフィックス関係シェーダプログラムのみが使用され得る。簡潔の目的で説明されない、ジオメトリシェーダなどのシェーダプログラムの追加の例がある。
【００４０】
[0046]プロセッサ１２上で実行するグラフィックスドライバ４０は、アプリケーションプログラミングインターフェース（ＡＰＩ）を実装するように構成され得る。そのような例では、シェーダプログラム（たとえば、頂点シェーダプログラム３２、フラグメントシェーダプログラム３４、および計算シェーダプログラム３６）は、グラフィックスドライバ４０と同じＡＰＩに従って構成され得る。図示されていないが、システムメモリ１６は、プロセッサ１２が実行のためにシステムメモリ１６から取り出すグラフィックスドライバ４０のためのコードを記憶し得る。グラフィックスドライバ４０は、この例では、グラフィックスドライバ４０がハードウェア（たとえば、プロセッサ１２）上で実行するソフトウェアであることを示すための点線ボックス中に示されている。しかしながら、グラフィックスドライバ４０の機能の一部または全部は、プロセッサ１２上のハードウェアとして実装され得る。
【００４１】
[0047]グラフィックスドライバ４０は、プロセッサ１２とＧＰＵ１４とが互いに通信できるように構成され得る。たとえば、プロセッサ１２が、グラフィックスまたは非グラフィックス処理タスクをＧＰＵ１４にオフロードするとき、プロセッサ１２は、そのような処理タスクをグラフィックスドライバ４０を介してＧＰＵ１４にオフロードする。
【００４２】
[0048]一例として、プロセッサ１２は、グラフィックスデータを生成するゲームアプリケーションを実行し得、プロセッサ１２は、このグラフィックスデータの処理をＧＰＵ１４にオフロードし得る。この例では、プロセッサ１２は、グラフィックスデータをシステムメモリ１６に記憶し得、グラフィックスドライバ４０は、グラフィックスデータをいつ取り出すべきかと、システムメモリ１６においてどこからグラフィックスデータを取り出すべきかと、グラフィックスデータをいつ処理すべきかとを、ＧＰＵ１４に命令し得る。また、ゲームアプリケーションは、ＧＰＵ１４が１つまたは複数のシェーダプログラムを実行することを必要とし得る。たとえば、ゲームアプリケーションは、シェーダコア２４が、（たとえば、図１のディスプレイ１８上に）表示されるべきである画像を生成するために、頂点シェーダプログラム３２とフラグメントシェーダプログラム３４とを実行することを必要とし得る。グラフィックスドライバ４０は、いつシェーダプログラムを実行すべきかをＧＰＵ１４に命令し、シェーダプログラムのために必要とされるグラフィックスデータをどこで取り出すべきかをＧＰＵ１４に命令し得る。このようにして、グラフィックスドライバ４０は、プロセッサ１２とＧＰＵ１４との間のリンクを形成し得る。
【００４３】
[0049]グラフィックスドライバ４０は、ＡＰＩに従って構成され得るが、グラフィックスドライバ４０は、特定のＡＰＩに従って構成されることに限定される必要はない。デバイス１０がモバイルデバイスである一例では、グラフィックスドライバ４０は、ＯｐｅｎＧＬ  ＥＳ  ＡＰＩに従って構成され得る。ＯｐｅｎＧＬ  ＥＳ  ＡＰＩは、モバイルデバイスのために特別に設計される。デバイス１０が非モバイルデバイスである一例では、グラフィックスドライバ４０は、ＯｐｅｎＧＬ  ＡＰＩに従って構成され得る。他の例示的なＡＰＩとしては、マイクロソフト社によるＡＰＩのＤｉｒｅｃｔＸファミリーがある。
【００４４】
[0050]いくつかの例では、システムメモリ１６は、頂点シェーダプログラム３２と、フラグメントシェーダプログラム３４と、計算シェーダプログラム３６とのうちの１つまたは複数のためのソースコードを記憶し得る。これらの例では、プロセッサ１２上で実行するコンパイラ３８は、ランタイム中に（たとえば、これらのシェーダプログラムがシェーダコア２４上で実行されるべきである時間において）ＧＰＵ１４のシェーダコア２４によって実行可能なオブジェクトまたは中間コードを作成するために、これらのシェーダプログラムのソースコードをコンパイルし得る。いくつかの例では、コンパイラ３８は、シェーダプログラムをプリコンパイルし、シェーダプログラムのオブジェクトまたは中間コードをシステムメモリ１６に記憶し得る。
【００４５】
[0051]シェーダコア２４は、同じシェーダプログラムの同じ命令の多くのインスタンスを並列に実行するように構成され得る。たとえば、グラフィックスドライバ４０は、複数の頂点のための頂点値を取り出すようにＧＰＵ１４に命令し、頂点の頂点値を処理するために頂点シェーダプログラム３２を実行するようにＧＰＵ１４に命令し得る。この例では、シェーダコア２４は、頂点シェーダプログラム３２の複数のインスタンスを実行し、頂点の各々のためのシェーダコア２４の１つの処理要素上で頂点シェーダプログラム３２の１つのインスタンスを実行することによって、そうすることがある。
【００４６】
[0052]シェーダコア２４の各処理要素は、同じインスタンスにおいて頂点シェーダプログラム３２の同じ命令を実行し得るが、特定の頂点値は、各処理要素が異なる頂点を処理しているので、異なり得る。上記で説明されたように、各処理要素は、頂点シェーダプログラム３２のスレッドを実行するものと見なされ得、ここで、スレッドは、特定の頂点を処理している頂点シェーダプログラム３２の１つの命令を指す。このようにして、シェーダコア２４は、複数の頂点の頂点値を並列に（たとえば、同時に）処理するために、頂点シェーダプログラム３２の多くのインスタンスを実行し得る。
【００４７】
[0053]シェーダコア２４は、同様に、複数のピクセルのピクセル値を並列に処理するために、フラグメントシェーダプログラム３４の多くのインスタンスを実行するか、または多くの非グラフィックス関係データを並列に処理するために、計算シェーダプログラム３６の多くのインスタンスを実行し得る。このようにして、シェーダコア２４は、単一命令複数データ（ＳＩＭＤ）構造で構成され得る。説明しやすいように、以下は、一般シェーダプログラムに関して説明されるが、それの例としては、頂点シェーダプログラム３２、フラグメントシェーダプログラム３４、計算シェーダプログラム３６、およびジオメトリシェーダなどの他のタイプのシェーダがある。
【００４８】
[0054]システムメモリ１６は、プロセッサ１２が実行のためにシステムメモリ１６から取り出す、コンパイラ３８のためのコードを記憶し得る。図２の例では、コンパイラ３８は、この例では、コンパイラ３８がハードウェア（たとえば、プロセッサ１２）上で実行するソフトウェアであることを示すための点線ボックス中に示されている。しかしながら、いくつかの例では、コンパイラ３８のいくつかの機能は、プロセッサ１２上のハードウェアとして実装され得る。
【００４９】
[0055]本開示の技法によれば、プロセッサ１２は、シェーダプログラム（たとえば、頂点シェーダプログラム３２、フラグメントシェーダプログラム３４、計算シェーダプログラム３６、または任意の他のシェーダプログラム）からの命令の特定のセットが分岐命令を含むかどうかを決定するように構成され得る。この例では、命令のセットは、シェーダコア２４（たとえば、ＳＩＭＤ処理コア）を使用して（たとえば、複数のスレッドを並列に使用して）ワープとして実施されるべき命令の特定のセットであり得る。プロセッサ１２上で実行するコンパイラ３８は、ワープのための命令のセットが分岐命令を含むという決定を行うように構成され得る。
【００５０】
[0056]図３は、分岐命令３９を含む命令のセット３７を示す概念図である。この例では、分岐命令３９は、ｉｆ−ｔｈｅｎ−ｅｌｓｅ分岐命令である。一般論として、「ｉｆ（条件）」という項は、特定の条件が真であるかどうかを（たとえば、ある値を別の値と比較することによって）決定する。条件がどのように決定されるかにかかわらず、条件が真である場合、シェーダコア２４中の処理要素は、命令のセット３７の第１の部分４１（たとえば、「ｔｈｅｎ」分岐に関連する命令の部分）を実行する。条件が真でない場合、処理要素は、命令のセット３７の第２の部分４３（たとえば、「ｅｌｓｅ」分岐に関連する命令の部分）を実行する。
【００５１】
[0057]再び図２を参照すると、ＧＰＵ１４および／またはコンパイラ３８は、ワープの各スレッドが分岐命令をどのように取ることになるかを決定するように構成され得る。この決定に基づいて、ＧＰＵ１４および／またはコンパイラ３８は、スレッドが分岐命令をどのように取ることになるかを示すために、ワープの各スレッドのために述語ビットを割り当て得る。事実上、述語ビットは、特定のスレッドによって命令のセットのどの部分が実行されることになるかを示す。たとえば、述語ビットは、図３の第１の部分４１が実行されるべきなのか図３の第２の部分４３が実行されるべきなのかを示し得る。
【００５２】
[0058]いくつかの例では、述語ビットは、命令のセットのどの部分を実行すべきかを指定し得る。他の例では、述語ビットは、命令のセットのどの部分を実行すべきでないかを示す。とにかく、ワープの各スレッドは、命令のセットを並列に実行する。特定のスレッドが、述語ビットによって示されるような、命令のセットの特定の部分を実行しない場合、その特定のスレッドはアクションを実施しない（たとえば、演算命令を実行しない）が、ワープ中の他のスレッドは、命令のセットのその特定の部分を実行する。
【００５３】
[0059]本開示の技法によれば、プロセッサ１２は（たとえば、コンパイラ３８の実行を通して）、ワープのすべてのスレッドが分岐命令の同じ分岐を取ることになるかどうかを決定するようにさらに構成され得る。そのような決定が行われた場合、コンパイラ３８は、ワープ中のあらゆるスレッドのために使用され得る一様述語ビット（uniform predicate bit）の単一のセットを設定するようにＧＰＵ１４に示し得る。すなわち、すべてのスレッドが条件付き分岐命令の同じ分岐を取るとき、ワープの各スレッドのための別個の述語ビットを有するのではなく、述語ビットの単一のセットのみが記憶される。
【００５４】
[0060]たとえば、コンパイラ３８は、一様述語ビットの単一のセットをＵＰＲ９２に記憶するように構成されるか、または、ＧＰＵ１４に、一様述語ビットの単一のセットをＵＰＲ９２に記憶させるように構成され得る。ＵＰＲ９２は、ワープの特定のスレッドを実行しているシェーダコア２４中の各処理要素によってアクセス可能であるレジスタまたは他のタイプのメモリであり得る。コンパイラ３８は、任意の様式で、ワープのすべてのスレッドが条件付き分岐命令の同じ分岐を取ると決定し得る。たとえば、コンパイラ３８は、ワープのための入力値が、定数ベースであるか、または一様汎用レジスタ（ｕＧＰＲ：uniform general purpose register）からアクセスされる場合、そのような決定を行い得る。
【００５５】
[0061]一例として、シェーダプログラム（たとえば、頂点シェーダプログラム３２、フラグメントシェーダプログラム３４、または計算シェーダプログラム３６）をコンパイルしながら、コンパイラ３８は、ワープとして実行されるべきシェーダプログラムの命令のセットが、一様なデータにアクセスすることを必要とするかどうかを決定し得る。このコンテキストでは、シェーダプログラムが一様なデータへのアクセスを必要とすることは、シェーダコア２４のそれぞれの処理要素上で実行するシェーダプログラムの各スレッドが、それぞれ同じデータを要求することを意味する。この例では、シェーダコア２４は、ｕＧＰＲからこの同じデータを取り出し得る。
【００５６】
[0062]別の例として、シェーダプログラムは、分岐命令（たとえば、ｉｆ−ｔｈｅｎ−ｅｌｓｅ命令）を含み得る。いくつかの特定の分岐のために、シェーダプログラムは、１つまたは複数の変数を定数値に等しく設定する命令（たとえば、ｘ、ｙ、ｚおよびｗ座標をすべて０に等しく設定する命令）を含み得る。この例では、コンパイラ３８は、定数値が、ワープ中のすべてのスレッドにわたって一様であるグラフィックス項目の変数のためのデータであると決定し得る。
【００５７】
[0063]コンパイラ３８が、シェーダプログラムがグラフィックス波にわたって一様なデータにアクセスすることを必要とすると決定した場合、コンパイラ３８は、データがグラフィックス波にわたって一様であることをシェーダコア２４に示す明示的命令を含み得る。応答して、ＧＰＵ１４は、ＵＰＲ９２における一様述語ビットを設定し得る。いくつかの例では、一様なデータは、一様なデータ（すなわち、ワープのすべてのスレッドによって一様にアクセス可能であるデータ）を記憶するために割り振られるＧＰＲ２６のセクションに記憶され得る。一様なデータのために割り振られたＧＰＲ２６のそのようなセクションは、ｕＧＰＲと呼ばれることがある。
【００５８】
[0064]分岐命令を含むコードの一般的な例について考える。たとえば、高水準言語では、分岐命令の一例は、以下の通りであり得る。
【００５９】
【数１】
2019507432.tif 000002
【００６０】
[0065]一例では、そのようなコードは、コンパイラ３８によって以下のようにコンパイルされ得る。
【００６１】
【数２】
2019507432.tif 000003
【００６２】
[0066]別の例では、「分岐（branch）」命令の代わりに「述語（predication）」が使用され得る。
【００６３】
【数３】
2019507432.tif 000004
【００６４】
[0067]コンパイラ３８が、Ｒ０中の値とＲ１中の値が「一様」であると決定することができない場合、スレッドごとの述語ビットが使用されことになる。しかしながら、値Ｒ０と値Ｒ１とが一様であるとコンパイラ３８が決定した場合（たとえば、使用される値が定数レジスタから来る場合、「一様な」述語（ＵＰ０）が代わりに使用され得る。
【００６５】
【数４】
2019507432.tif 000005
【００６６】
[0068]図４は、ＧＰＵのシェーダコアのＧＰＲにおけるデータ記憶の一例を示す概念図である。図示のように、ＧＰＵ１４はシェーダコア２４を含み、シェーダコア２４はＧＰＲ２６を含む。図４に示されていないが、シェーダコア２４は、シェーダプログラムのインスタンスをそれぞれ実行する複数の処理要素をも含む。
【００６７】
[0069]一例として、シェーダコア２４は、３２個の処理要素を含み得、各々は、１つのグラフィックス項目を処理するためにシェーダプログラムの１つのインスタンスを実行し得る。ＧＰＲ２６は、グラフィックス項目のためのデータを記憶し得る。たとえば、ＧＰＲ２６は、３２個のグラフィックス項目のための９つの属性のための属性データを記憶し得る。しかしながら、ＧＰＲ２６は、３２個のグラフィックス項目のための９つよりも多いまたは少ない属性のためのデータを記憶し得る。また、ＧＰＲ２６は、グラフィックス項目の属性に関連しないが、グラフィックス項目を処理するために必要とされる変数のためのデータである、データを記憶し得る。
【００６８】
[0070]図４に示されている例では、グラフィックス項目は、頂点であり得るＰ０〜Ｐ３１として識別される。属性は、グラフィックス項目識別子に続く変数によって識別される。たとえば、Ｐ０．Ｘは、Ｐ０グラフィックス項目のためのｘ座標を指し、Ｐ０．ＹはＰ０グラフィックス項目のためのｙ座標を指し、以下同様である。Ｐ０．Ｒ、Ｐ０．Ｇ、Ｐ０．Ｂ、およびＰ０．Ａは、それぞれ、Ｐ０グラフィックス項目の赤色成分、緑色成分、青色成分、および不透明部を指す。他のグラフィックス項目（たとえば、Ｐ１〜Ｐ３１）が、同様に識別される。
【００６９】
[0071]言い換えれば、図４では、頂点Ｐ０〜Ｐ３１はそれぞれ、複数の変数に関連する。一例として、頂点Ｐ０〜Ｐ３１の各々は、ｘ座標（Ｐ０．Ｘ〜Ｐ３１．Ｘ）を識別する変数に関連する。頂点Ｐ０〜Ｐ３１の各々は、ｙ座標（Ｐ０．Ｙ〜Ｐ３１Ｙ）を識別する変数に関連し、以下同様である。これらの変数の各々は、複数のグラフィックス項目の各々を処理するために必要とされる。たとえば、ｘ座標を識別する変数は、頂点Ｐ０〜Ｐ３１の各々を処理するために必要とされる。
【００７０】
[0072]また、図４に示されているように、グラフィックス項目の各々はＰＲＪ属性をも含む。ＰＲＪ属性は、シェーダコア２４の処理要素上で実行する頂点シェーダが利用し得る射影行列（projection matrix）である。この例では、ＰＲＪ属性は、頂点Ｐ０〜Ｐ３１の各々を処理するために必要とされる別の変数である。たとえば、頂点シェーダは、射影行列にそれぞれの座標を乗算し（たとえば、Ｐ０．ＰＲＪにＰ０．Ｘ、Ｐ０．Ｙ、Ｐ０．Ｚ、およびＰ０．Ｗを乗算し）得る。
【００７１】
[0073]ＧＰＵ１４がデータ（たとえば、値）をそれに記憶し得る様々なユニットがあり得ることを理解されたい。ＧＰＵ１４は、データをシステムメモリ１６に記憶し得、またはデータをローカルメモリ（たとえば、キャッシュ）に記憶し得る。シェーダコア２４のＧＰＲ２６は、システムメモリ１６とＧＰＵ１４のローカルメモリの両方とは別個である。たとえば、システムメモリ１６は、デバイス１０の様々な構成要素によってアクセス可能であり、これらの構成要素は、データを記憶するためにシステムメモリ１６を使用する。ＧＰＵ１４のローカルメモリは、ＧＰＵ１４の様々な構成要素によってアクセス可能であり、これらの構成要素は、データを記憶するためにＧＰＵ１４のローカルメモリを使用する。しかしながら、ＧＰＲ２６は、シェーダコア２４の構成要素によってのみアクセス可能であり得、シェーダコア２４の処理要素のためのデータのみを記憶し得る。
【００７２】
[0074]いくつかの例では、グラフィック波中のグラフィックス項目の１つまたは複数の変数が、グラフィック波にわたって一様である。そのような例では、１つまたは複数の変数のための一様なデータをＧＰＲ２６中の各スレッドのための別個のエントリに記憶するのではなく、ＧＰＵ１４は、一様なデータをｕＧＰＲ２７に１回記憶し得る。図４に示されているように、ｕＧＰＲ２７はＧＰＲ２６の一部である。他の例では、ｕＧＰＲ２７は別個のレジスタであり得る。
【００７３】
[0075]一例では、ｕＧＰＲ２７は複数の記憶ロケーションを含み得、各記憶ロケーションは、グラフィックス項目の複数の属性のうちの１つの属性に関連する。たとえば、図４に示されているように、各グラフィックス項目Ｐ０〜Ｐ３１は、９つの属性（ＰＲＪ、ｘ、ｙ、ｚ、ｗ、Ｒ、Ｇ、Ｂ、およびＡ）を含む。この例では、ｕＧＰＲ２７は、９つの記憶ロケーションを含み得、ｕＧＰＲ２７の第１のロケーションはＰＲＪ属性に関連し、ｕＧＰＲ２７の第２のロケーションはｘ座標に関連し、以下同様である。同じく、ｕＧＰＲ２７中のデータは、ワープの各スレッドによって使用され得る。
【００７４】
[0076]図５は、本開示の一様な述語のための技法を実装するために使用され得るＧＰＵ１４の例示的な構成を示すブロック図である。ＧＰＵ１４は、プログラムのための命令を並列様式で実行するように構成される。ＧＰＵ１４は、制御ユニット７２と、処理要素７４Ａ〜７４Ｄ（総称して「処理要素７４」）と、命令ストア７６と、データストア７８と、通信経路８０、８２、８４、８６Ａ〜８６Ｄと、述語レジスタ（ＰＲ）７５Ａ〜７５Ｄ（総称して「述語レジスタ（ＰＲ）７５またはＰＲ７５）と、一様述語レジスタ（ＵＰＲ）９２とを含む、シェーダコア２４を含む。通信経路８６Ａ〜８６Ｄは、総称して「通信経路８６」と呼ばれることがある。いくつかの例では、ＧＰＵ１４は、処理要素７４を使用してプログラム（たとえば、シェーダ）のワープのための複数の実行スレッドを実行するように構成された、単一命令複数データ（ＳＩＭＤ）処理システムとして構成され得る。そのようなＳＩＭＤシステムでは、処理要素７４は一緒に、異なるデータ項目に関して単一の命令を一度に処理し得る。プログラムは、プログラムに関連するスレッドのすべてが実行を完了した後に退き得る。
【００７５】
[0077]制御ユニット７２は、通信経路８０を介して命令ストア７６に通信可能に結合され、通信経路８２を介して処理要素７４に通信可能に結合され、通信経路８４を介してデータストア７８に通信可能に結合される。制御ユニット７２は、読取り命令を命令ストア７６に送るために通信経路８０を使用し得る。読取り命令は、命令がそこから取り出されるべきである命令ストア７６中の命令アドレスを指定し得る。制御ユニット７２は、読取り命令を送ったことに応答して、命令ストア７６から１つまたは複数のプログラム命令を受信し得る。制御ユニット７２は、命令を処理要素７４に与えるために、およびいくつかの例では、処理要素７４からのデータ、たとえば、分岐条件を評価するための比較命令の結果を受信するために、通信経路８２を使用し得る。いくつかの例では、制御ユニット７２は、たとえば、分岐条件を決定するために、データストア７８からデータ項目値を取り出すために通信経路８４を使用し得る。図４は、通信経路８４を含むものとしてＧＰＵ１４を示しているが、他の例では、ＧＰＵ１４は通信経路８４を含まないことがある。
【００７６】
[0078]処理要素７４の各々は、命令ストア７６に記憶されたプログラムのための命令を処理するように構成され得る。いくつかの例では、処理要素７４の各々は、演算の同じセットを実施するように構成され得る。たとえば、処理要素７４の各々は、同じ命令セットアーキテクチャ（ＩＳＡ：instruction set architecture）を実装し得る。追加の例では、処理要素７４の各々は、算術論理ユニット（ＡＬＵ：arithmetic logic unit）であり得る。さらなる例では、ＧＰＵ１４はベクトルプロセッサとして構成され得、処理要素７４の各々はベクトルプロセッサ内の処理要素であり得る。追加の例では、ＧＰＵ１４はＳＩＭＤ実行ユニットであり得、処理要素７４の各々はＳＩＭＤ実行ユニット内のＳＩＭＤ処理要素であり得る。
【００７７】
[0079]処理要素７４によって実施される演算は、算術演算、論理演算、比較演算などを含み得る。算術演算は、たとえば、加算演算、減算演算、乗算演算などの演算を含み得る。算術演算は、たとえば、整数算術演算および／または浮動小数点算術演算をも含み得る。論理演算は、たとえば、ビット単位ＡＮＤ演算、ビット単位ＯＲ演算、ビット単位ＸＯＲ演算などの演算を含み得る。比較演算は、たとえば、大なり演算、小なり演算、ゼロに等しい（equal to zero）演算、ゼロに等しくない（not equal to zero）演算などの演算を含み得る。大なり演算および小なり演算は、第１のデータ項目が第２のデータ項目よりも大きいのか第２のデータ項目よりも小さいのかを決定し得る。ゼロに等しい演算およびゼロに等しくない演算は、データ項目がゼロに等しいのかゼロに等しくないのかを決定し得る。演算のために使用されるオペランドは、データストア７８中に含まれているレジスタに記憶され得る。
【００７８】
[0080]処理要素７４の各々は、通信経路８２を介して制御ユニット７２からの命令を受信したことに応答して、演算を実施するように構成され得る。いくつかの例では、処理要素７４の各々は、他の処理要素７４とは無関係にアクティブ化および／または非アクティブ化されるように構成され得る。そのような例では、処理要素７４の各々は、それぞれの処理要素７４Ａ〜７４Ｄがアクティブ化されているとき、制御ユニット７２からの命令を受信したことに応答して演算を実施し、それぞれの処理要素７４Ａ〜７４Ｄが非アクティブ化されているとき、すなわち、アクティブ化されていないとき、制御ユニット７２からの命令を受信したことに応答して演算を実施しないように構成され得る。
【００７９】
[0081]処理要素７４Ａ〜７４Ｄの各々は、それぞれの通信経路８６Ａ〜８６Ｄを介してデータストア７８に通信可能に結合され得る。処理要素７４は、通信経路８６を介して、データストア７８からデータを取り出し、データをデータストア７８に記憶するように構成され得る。データストア７８から取り出されるデータは、いくつかの例では、処理要素７４によって実施される演算のためのオペランドであり得る。データストア７８に記憶されるデータは、いくつかの例では、処理要素７４によって実施された演算の結果であり得る。
【００８０】
[0082]命令ストア７６は、ＧＰＵ１４が実行するためのプログラムを記憶するように構成される。プログラムは、命令のシーケンスとして記憶され得る。いくつかの例では、各命令は、一意の命令アドレス値によってアドレス指定され得る。そのような例では、命令のシーケンス中のより遅い命令のための命令アドレス値は、命令のシーケンス中のより早い命令のための命令アドレス値よりも大きい。プログラム命令は、いくつかの例では、マシンレベル命令であり得る。すなわち、そのような例では、命令は、ＧＰＵ１４のＩＳＡに対応する形式であり得る。命令ストア７６は、通信経路８０を介して制御ユニット７２から読取り命令を受信するように構成される。読取り命令は、命令がそれから取り出されるべきである命令アドレスを指定し得る。読取り命令を受信したことに応答して、命令ストア７６は、読取り命令において指定された命令アドレスに対応する命令を、通信経路８０を介して制御ユニット７２に与え得る。
【００８１】
[0083]命令ストア７６は、任意のタイプのメモリ、キャッシュまたはそれらの組合せであり得る。命令ストア７６がキャッシュであるとき、命令ストア７６は、ＧＰＵ１４の外部のプログラムメモリに記憶されるプログラムをキャッシュし得る。命令ストア７６はＧＰＵ１４内にあるものとして示されているが、他の例では、命令ストア７６はＧＰＵ１４の外部にあり得る。
【００８２】
[0084]データストア７８は、処理要素７４によって使用されるデータ項目を記憶するように構成される。いくつかの例では、データストア７８は複数のレジスタを備え得、各レジスタは、ＧＰＵ１４上で演算された複数のデータ項目内のそれぞれのデータ項目を記憶するように構成される。データストア７８は、データストア７８中のレジスタとメモリまたはキャッシュ（図示せず）との間でデータを転送するように構成された、１つまたは複数の通信経路（図示せず）に結合され得る。
【００８３】
[0085]図４は、処理要素７４によって使用されるデータを記憶するための単一のデータストア７８を示しているが、他の例では、ＧＰＵ１４は、処理要素７４の各々のための別個の専用データストアを含み得る。ＧＰＵ１４は、例示のために４つの処理要素７４を示す。他の例では、ＧＰＵ１４は、同じ構成または異なる構成で、はるかに多い処理要素を有し得る。
【００８４】
[0086]制御ユニット７２は、命令ストア７６に記憶されたプログラムのための命令を実行するようにＧＰＵ１４を制御するように構成される。プログラムの各命令または命令のセットについて、制御ユニット７２は、通信経路８０を介して命令ストア７６から命令を取り出し、命令を処理し得る。いくつかの例では、制御ユニット７２は、命令に関連する演算が処理要素７４のうちの１つまたは複数上で実行することを引き起こすことによって、命令を処理し得る。たとえば、制御ユニット７２によって取り出される命令は、命令によって指定されたデータ項目に関して算術演算を実施するようにＧＰＵ１４に命令する、算術命令であり得、制御ユニット７２は、処理要素７４のうちの１つまたは複数に、算術演算を指定されたデータ項目に対して実施させ得る。さらなる例では、制御ユニット７２は、処理要素７４上で演算が実施されることを引き起こすことなしに、命令を処理し得る。
【００８５】
[0087]制御ユニット７２は、命令を通信経路８２を介して処理要素７４に与えることによって、処理要素７４のうちの１つまたは複数上で演算が実施されることを引き起こし得る。命令は、処理要素７４によって実施されるべき演算を指定し得る。処理要素７４のうちの１つまたは複数に与えられる命令は、命令ストア７６から取り出された命令と同じであるかまたはそれとは異なり得る。いくつかの例では、制御ユニット７２は、演算がそれの上で実施されるべきである処理要素７４の特定のサブセットをアクティブ化することと、演算がそれの上で実施されるべきでない処理要素７４の別のサブセットを非アクティブ化することとの一方または両方によって、（単一の処理要素だけを含む）処理要素７４の特定のサブセット上で演算が実施されることを引き起こし得る。制御ユニット７２は、それぞれのアクティブ化信号および／または非アクティブ化信号を通信経路８２を介して処理要素７４の各々に与えることによって、処理要素７４をアクティブ化および／または非アクティブ化し得る。いくつかの例では、制御ユニット７２は、命令を処理要素７４に与えることとともに、アクティブ化信号および／または非アクティブ化信号を処理要素７４に与えることによって、処理要素７４をアクティブ化および／または非アクティブ化し得る。さらなる例では、制御ユニット７２は、命令を処理要素７４に与えるより前に、処理要素７４をアクティブ化および／または非アクティブ化し得る。
【００８６】
[0088]制御ユニット７２は、処理要素７４を使用して、プログラムのための複数の実行スレッドを実行し得る並列に実行されるべき複数のスレッドは、ワープと呼ばれることがある。処理要素７４の各々は、複数のスレッドのそれぞれのスレッドのためのプログラムの命令を処理するように構成され得る。たとえば、制御ユニット７２は、処理するために各実行スレッドを処理要素７４のうちの個々の処理要素に割り当て得る。プログラムのための実行スレッドは、データ項目のセット中の異なるデータ項目に関して、命令の同じセットを実行し得る。たとえば、処理要素７４Ａは、複数のデータ項目中のデータ項目の第１のサブセットに関して、命令ストア７６に記憶されたプログラムのための第１の実行スレッドを実行し得、処理要素７４Ｂは、複数のデータ項目中のデータ項目の第２のサブセットに関して、命令ストア７６に記憶されたプログラムのための第２の実行スレッドを実行し得る。第１の実行スレッドは第２の実行スレッドと同じ命令を含み得るが、データ項目の第１のサブセットはデータ項目の第２のサブセットとは異なり得る。
【００８７】
[0089]いくつかの例では、制御ユニット７２が、複数の実行スレッド中の個々のスレッドをアクティブ化および非アクティブ化し得る。制御ユニット７２がスレッドを非アクティブ化するとき、制御ユニット７２は、スレッドを実行するために割り当てられた処理要素７４Ａ〜７４Ｄをも非アクティブ化および／または無効化し得る。そのような非アクティブ化されたスレッドは、非アクティブスレッド（inactive thread）と呼ばれることがある。同様に、制御ユニット７２がスレッドをアクティブ化するとき、制御ユニット７２は、スレッドを実行するために割り当てられた処理要素７４Ａ〜７４Ｄをもアクティブ化し得る。そのようなアクティブ化されたスレッドは、アクティブスレッド（active thread）と呼ばれることがある。以下でより詳細に説明されるように、制御ユニット７２は、他のアクティブスレッドまたは非アクティブスレッドを考慮する必要なしに、発散（divergent）演算（たとえば、直列演算）を実行するためにアクティブスレッドを選択するように構成され得る。
【００８８】
[0090]本明細書で使用される、アクティブスレッドはアクティブ化されたスレッドを指すことがあり、非アクティブスレッドは非アクティブ化されたスレッドを指すことがある。所与の処理サイクル（processing cycle）中にＧＰＵ１４上で実行する複数のスレッドについて、アクティブスレッドの各々は、処理サイクル中に複数スレッドのためのグローバルプログラムカウンタレジスタによって識別されたプログラムの命令を処理するように構成され得る。たとえば、制御ユニット７２は、アクティブスレッドに割り当てられた処理要素７４を処理サイクル中にプログラムの命令を処理するように構成するために、そのような処理要素７４をアクティブ化し得る。一方、所与の処理サイクル中にＧＰＵ１４上で実行する複数のスレッドについて、非アクティブスレッドの各々は、処理サイクル中にプログラムの命令を処理しないように構成され得る。たとえば、制御ユニット７２は、非アクティブスレッドに割り当てられた処理要素７４を処理サイクル中にプログラムの命令を処理しないように構成するために、そのような処理要素７４を非アクティブ化し得る。
【００８９】
[0091]いくつかの例では、処理サイクルは、プログラムカウンタの連続ロード間の時間間隔を指すことがある。たとえば、処理サイクルは、プログラムカウンタが第１の値をロードされるときと、プログラムカウンタが第２の値をロードされるときとの間の時間を指すことがある。第１の値と第２の値とは、同じ値または異なる値であり得る。プログラムカウンタが再開検査技法による非同期様式でロードされる例では、そのような非同期ロードは、いくつかの例では、処理サイクルを区別するように働かないことがある。言い換えれば、そのような例では、処理サイクルは、プログラムカウンタの連続同期ロード間の時間間隔を指すことがある。プログラムカウンタの同期ロードは、いくつかの例では、クロック信号によってトリガされるロードを指すことがある。
【００９０】
[0092]次の命令の取出しより前のあるとき、制御ユニット７２は、ＧＰＵ１４によって処理されるべき次の命令を決定する。制御ユニット７２が、処理されるべき次の命令を決定する様式は、ＧＰＵ１４によって前に取り出された命令が制御フロー命令であるかどうかに応じて異なる。ＧＰＵ１４によって前に取り出された命令が制御フロー命令でない場合、制御ユニット７２は、ＧＰＵ１４によって処理されるべき次の命令が、命令ストア７６に記憶された次の連続命令に対応すると決定し得る。たとえば、命令ストア７６は、プログラムのための命令を、順序付けされたシーケンスで記憶し得、次の連続命令は、前に取り出された命令の直後に生じる命令であり得る。
【００９１】
[0093]ＧＰＵ１４によって前に取り出された命令が制御フロー命令である場合、制御ユニット７２は、制御フロー命令において指定された情報に基づいて、ＧＰＵ１４によって処理されるべき次の命令を決定し得る。たとえば、制御フロー命令は無条件制御フロー命令、たとえば、無条件分岐命令またはジャンプ命令であり得、その場合、制御ユニット７２は、ＧＰＵ１４によって処理されるべき次の命令が、制御フロー命令によって識別されるターゲット命令であると決定し得る。別の例として、制御フロー命令は条件付き制御フロー命令、たとえば、条件付き分岐命令であり得、その場合、制御ユニット７２は、制御フロー命令によって識別されたターゲット命令、または、命令ストア７６に記憶された次の連続命令のうちの１つを、命令ストア７６からの処理すべき次の命令として選択し得る。
【００９２】
[0094]本明細書で使用される制御フロー命令は、命令ストア７６中のターゲット命令を識別する情報を含む命令を指すことがある。たとえば、制御フロー命令は、制御フロー命令のためのターゲットプログラムカウンタ値を示すターゲット値を含み得る。ターゲットプログラムカウンタ値は、ターゲット命令のためのターゲットアドレスを示し得る。ターゲット命令は、いくつかの例では、命令ストア７６に記憶された次の連続命令とは異なり得る。高レベルプログラムコードは、たとえば、ｉｆ文，ｓｗｉｔｃｈ文、ｄｏ文、ｆｏｒ文、ｗｈｉｌｅ文、ｃｏｎｔｉｎｕｅ文、ｂｒｅａｋ文、およびｇｏｔｏ文など、制御フロー文を含み得る。コンパイラ３８は、高レベル制御フロー文を、低レベル、たとえば、マシンレベル制御フロー命令に変換し得る。制御フロー命令でない命令は、本明細書では連続命令と呼ばれることがある。たとえば、連続命令は、ターゲット命令を識別する情報を含まないことがある。
【００９３】
[0095]制御フロー命令のために、ターゲット命令を識別する情報は、命令ストア７６に記憶されたターゲット命令を示す値であり得る。いくつかの例では、命令ストア７６中のターゲット命令を示す値は、命令ストア７６中のターゲット命令の命令アドレスを示す値であり得る。ターゲット命令の命令アドレスを示す値は、いくつかの場合には、命令ストア７６中のターゲット命令のアドレスであり得る。ターゲット命令の命令アドレスを示す値は、追加の場合には、ターゲット命令のアドレスを計算するために使用される値であり得る。さらなる例では、ターゲット命令の命令アドレスを示す値は、ターゲット命令に対応するターゲットプログラムカウンタ値を示す値であり得る。ターゲットプログラムカウンタ値を示す値は、いくつかの場合には、ターゲット命令に対応するターゲットプログラムカウンタ値であり得る。ターゲットプログラムカウンタ値を示す値は、追加の場合には、ターゲットプログラムカウンタ値を計算するために使用される値であり得る。ターゲット命令に対応するターゲットプログラムカウンタ値は、いくつかの例では、ターゲット命令のアドレスに等しくなり得る。
【００９４】
[0096]制御フロー命令は、順方向制御フロー命令または逆方向制御フロー命令であり得る。順方向制御フロー命令は、ターゲット命令が、命令ストア７６に記憶された命令の順序付けされたシーケンスにおいて制御フロー命令の後に生じる、制御フロー命令であり得る。逆方向制御フロー命令は、ターゲット命令が、命令ストア７６に記憶された命令の順序付けされたシーケンスにおいて次の連続命令の前に生じる、制御フロー命令であり得る。次の連続命令は、命令の順序付けされたシーケンスにおいて制御フロー命令の直後に生じ得る。
【００９５】
[0097]制御フロー命令は、条件付き制御フロー命令または無条件制御フロー命令であり得る。条件付き制御フロー命令は、制御フロー命令に関連するターゲット命令にジャンプするための条件を指定する情報を含む。条件付き制御フロー命令を処理するとき、条件が満たされたと制御ユニット７２が決定した場合、制御ユニット７２は、処理されるべき次の命令がターゲット命令であると決定し得る。一方、条件が満たされないと制御ユニット７２が決定した場合、制御ユニット７２は、処理されるべき次の命令が、命令ストア７６に記憶された次の連続命令であると決定し得る。無条件制御フロー命令は、制御フロー命令に関連するターゲット命令にジャンプするための条件を指定する情報を含まない。無条件制御フロー命令を処理するとき、制御ユニット７２は、処理すべき次の命令が、制御フロー命令によって識別されるターゲット命令であると無条件に決定し得る。言い換えれば、そのような場合での決定は、無条件制御フロー命令において指定されるいかなる条件も、条件としない。本明細書で使用される条件制御フロー命令は、分岐命令が、そうではなく無条件分岐命令として指定されない限り、本明細書では分岐命令と呼ばれることがある。また、無条件制御フロー命令は、本明細書ではジャンプ命令と呼ばれることがある。
【００９６】
[0098]条件付き分岐命令は、１つまたは複数のデータ項目値に関して指定される条件を含み得る。たとえば、１つのタイプの条件は、ＧＰＵ１４において実行する各アクティブスレッドについて、第１のデータ項目値を第２のデータ項目値と比較する比較条件であり得る。データ項目値を比較することは、たとえば、第１のデータ項目値が、第２のデータ項目値よりも大きいのか、それよりも小さいのか、それ以下であるのか、それ以上であるのか、それに等しいのか、それに等しくないのかを決定することを含み得る。別のタイプの条件は、ＧＰＵ１４上で実行する各アクティブスレッドのためのデータ項目値がゼロに等しいのか等しくないのかを決定する、ゼロ検査条件であり得る。各処理要素７４が、異なるデータ項目に対して演算するので、条件を評価した結果は、ＧＰＵ１４上で実行する各アクティブスレッドについて異なり得る。
【００９７】
[0099]ＧＰＵ１４上で実行するアクティブスレッドのすべてが分岐条件を満たすか、またはＧＰＵ１４上で実行するアクティブスレッドのすべてが分岐条件を満たさない場合、一様分岐条件が生じ、スレッドのための分岐ダイバージェンスは、一様であると言われる。一方、ＧＰＵ１４上で実行するアクティブスレッドのうちの少なくとも１つが分岐条件を満たし、ＧＰＵ１４上で実行するアクティブスレッドのうちの少なくとも１つが分岐条件を満たさない場合、発散分岐条件が生じ、スレッドのための分岐ダイバージェンスは、発散であると言われる。
【００９８】
[0100]発散命令の一例はｉｆ−ｔｈｅｎ−ｅｌｓｅ命令である。上記で説明されたように、ｉｆ−ｔｈｅｎ−ｅｌｓｅ命令を処理するとき、「ｉｆ（条件）」という項は、（たとえば、ある値を別の値と比較することによって）特定の条件が真であるかどうかを決定する。条件がどのように決定されるかにかかわらず、条件が真である場合、シェーダコア２４中の処理要素７４は、命令のセットの第１の部分（たとえば、部分４１）を実行する。条件が真でない場合、処理要素７４は、命令のセットの第２の部分（たとえば、部分４３）を実行する。いくつかの例では、分岐条件に従って実行される命令の部分が、演算命令でないことがある（たとえば、分岐命令は、演算を実施しないようにとの命令を含み得る）。
【００９９】
[0101]処理要素７４の各々が分岐命令をどのように扱うべきであるかを示すために、制御ユニット７２は、述語ビットをそれぞれの述語レジスタ７５の各々に記憶し得る。各処理要素７４は、特定の処理要素に関連する専用のＰＲ７５にアクセスし得る。これは、処理要素７４の各々が、一般に、異なるデータに対して演算するからである。したがって、分岐命令のための条件は、処理要素７４の各々について異なり（すなわち、分岐の各スレッドについて異なり）得る。
【０１００】
[0102]上記で説明されたように、述語ビットは、特定のスレッド、したがって、特定の処理要素７４によって命令のセットのどの部分が実行されることになるかを示す。いくつかの例では、述語ビットは、命令のセットのどの部分を実行すべきかを指定し得る。他の例では、述語ビットは、命令のセットのどの部分を実行すべきでないかを示す。とにかく、ワープの各処理要素７４は、命令のセットを並列に実行する。特定の処理要素７４が、述語ビットによって示されるような、命令のセットの特定の部分を実行しない場合、その特定の処理要素７４はアクションを実施しない（たとえば、演算命令を実行しない）が、ワープ中の他の処理要素７４は、命令のセットのその特定の部分を実行する。
【０１０１】
[0103]本開示の技法によれば、プロセッサ１２は（たとえば、コンパイラ３８の実行を通して）、ワープのすべてのスレッドが分岐命令の同じ分岐を取ることになるかどうかを決定するようにさらに構成され得る。そのような決定が行われた場合、コンパイラ３８は、ワープ中のあらゆるスレッドのために使用され得る一様述語ビットの単一のセットを設定するようにＧＰＵ１４に示し得る。すなわち、すべてスレッドが条件付き分岐命令の同じ分岐を取るとき、ワープの各スレッドのための別個の述語ビットを有するのではなく、述語ビットの単一のセットのみが記憶される。
【０１０２】
[0104]たとえば、制御ユニット７２は、第１の命令９０のためのワープのすべてのスレッドが分岐命令の同じ分岐を実行すべきであるという決定に応答して、一様述語ビット９３の単一のセットをＵＰＲ９２に記憶するように構成され得る。第１の命令９０は、分岐命令を含むシェーダプログラムの命令の任意のセットであり得る。ＵＰＲ９２に記憶された述語ビット９３は、ワープを実行する処理要素７４の各々によってアクセス可能である。処理要素７４のすべてのための述語ビット９３の単一のセットを含めることによって、（各スレッドのための述語の試験とは対照的に）述語セットのために単一の試験のみが実施されるので、電力が節約され得る。
【０１０３】
[0105] 図６は、図１のＧＰＵの別の例示的なシェーダコアのより詳細なブロック図である。図６の例では、シェーダコア２４は、スカラー処理ユニット９４の追加を除いて、図５に示されているものと同じである。この例では、スカラー処理ユニット９４は、ＵＰＲ９２中の述語ビットが、ワープのすべてスレッドが同じ方向に分岐することと、処理されるべきデータが一様であることと示す場合、第１の命令９０を実行するために使用され得る。このようにして、処理要素７４を含むベクトルプロセッサを使用するのではなく、一様なデータに対して実行される一様に分岐する第１の命令９０を処理するために、単一のスカラー処理ユニット９４が使用され得る。いくつかの例では、処理要素７４は、次いで、（一様に分岐していないことがある）第２の命令９１を処理するために、スカラー処理ユニット９４と並列に使用され得る。
【０１０４】
[0106]ＵＰＲ９２中の述語ビット９３によって示されるように、一様に分岐する命令を実行するためにスカラー処理ユニット９４を使用することは、いくつかの実装利益を与える。これは、スカラー処理ユニット９４が、命令のセットがどのように分岐するかを決定するためにＰＲ７５にアクセスする必要がないからである。したがって、処理要素７４によって実行される第２の命令９１と、スカラー処理ユニット９４によって実行される第１の命令９０との間には、「衝突」または曖昧な状態がない。これが、第１の命令９０と第２の命令９１とを並列に処理することを可能にする。
【０１０５】
[0107]スカラー処理ユニット９４は、一度に１つのデータ項目に対して演算するように構成された任意のタイプのプロセッサであり得る。処理要素７４のように、スカラー処理ユニット９４はＡＬＵを含み得る。スカラー処理ユニット９４によって実施される演算は、算術演算、論理演算、比較演算などを含み得る。算術演算は、たとえば、加算演算、減算演算、乗算演算、除算演算などの演算を含み得る。算術演算は、たとえば、整数算術演算および／または浮動小数点算術演算をも含み得る。論理演算は、たとえば、ビット単位ＡＮＤ演算、ビット単位ＯＲ演算、ビット単位ＸＯＲ演算などの演算を含み得る。比較演算は、たとえば、大なり演算、小なり演算、ゼロに等しい演算、ゼロに等しくない演算などの演算を含み得る。大なり演算および小なり演算は、第１のデータ項目が第２のデータ項目よりも大きいのか第２のデータ項目よりも小さいのかを決定し得る。ゼロに等しい演算およびゼロに等しくない演算は、データ項目がゼロに等しいのかゼロに等しくないのかを決定し得る。演算のために使用されるオペランドは、データストア７８中に含まれているレジスタに記憶され得る。
【０１０６】
[0108]いくつかの状況では、ワープによってそれに対して演算されるべき各データ要素またはグラフィックス項目が同じ値であるので、第１の命令９０の各スレッドは同様に分岐する。この例では、スカラー処理ユニット９４は、１つの演算を実施することのみを必要とし、その演算の結果は、処理されるべきであったすべてのデータ要素のために記憶され得る。
【０１０７】
[0109]図７は、本開示の技法による、例示的な方法を示すフローチャートである。図７の技法は、ＧＰＵ１４および／またはプロセッサ１２（図１参照）のうちの１つまたは複数によって実装され得る。
【０１０８】
[0110]本開示の一例では、ＧＰＵ１４は、ＧＰＵ１４におけるワープのすべてスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信するようにさらに構成され得る（１００）。ＧＰＵ１４は、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶するようにさらに構成され、ここにおいて、述語ビットの単一のセットはワープ中のスレッドのすべてに適用され得る（１０２）。ＧＰＵ１４は、述語ビットの単一のセットに従って命令の第１のセットの一部分を実行するようにされに構成され得る（１０４）。
【０１０９】
[0111]本開示の一例では、述語ビットの単一のセットは、命令の第１のセットの一部分をワープの各スレッドによって実施されるべきであるように示し、命令のセットの一部分は、命令の第１のセット中の同じ分岐に関係する。本開示の別の例では、述語ビットの単一のセットは、命令の第１のセットの一部分を、ワープの各スレッドによって実施されるべきでないように示し、命令のセットの一部分は、命令の第１のセット中の同じ分岐に関係する。
【０１１０】
[0112]本開示の別の例では、ＧＰＵ１４は、ＳＩＭＤ処理コア（たとえば、図５の処理要素７４）を使用して、述語ビットの単一のセットに従って命令の第１のセットを実行するように構成され得る。本開示の別の例では、ＧＰＵ１４は、スカラー処理ユニット（たとえば、図６のスカラー処理ユニット９４）を使用して、述語ビットの単一のセットに従って命令の第１のセットを実行するように構成され得る。一例では、ＧＰＵ１４は、スカラー処理ユニットを使用して、述語ビットの単一のセットに従って命令の第１のセットを実行することと並行して、ＳＩＭＤ処理コアを使用して、命令の第２のセットを実行するように構成され得る。
【０１１１】
[0113]本開示の別の例では、プロセッサ１２は、ＧＰＵにおけるワープのすべてスレッドが、命令の第１のセットの同じ分岐を実行すべきであると決定することと、決定に応答して、指示を行うように構成され得る。別の例では、プロセッサ１２は、命令の第１のセットのためのワープ全体が定数の同じセットを使用すると決定することによって、または、命令の第１のセットためのワープ全体が、ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用すると決定することによって、ＧＰＵ１４におけるワープのすべてのスレッドが命令の第１のセットの同じ分岐を実行すべきであると決定するように構成され得る。
【０１１２】
[0114]１つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、１つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、非一時的である有形コンピュータ可読記憶媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コードおよび／またはデータ構造を取り出すために、１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
【０１１３】
[0115]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。コンピュータ可読記憶媒体およびデータ記憶媒体は、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）、およびＢｌｕ−ｒａｙ（登録商標）ディスク（disc）を含み、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【０１１４】
[0116]命令は、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、上記の構造、または本明細書で説明された技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用ハードウェアおよび／またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素で十分に実装され得る。
【０１１５】
[0117]本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実施するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが説明されたが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明されたように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明された１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【０１１６】
[0118]様々な例が説明された。これらおよび他の例は以下の特許請求の範囲内に入る。
【図１】
2019507432.tif 000006
【図２】
2019507432.tif 000007
【図３】
2019507432.tif 000008
【図４】
2019507432.tif 000009
【図５】
2019507432.tif 000010
【図６】
2019507432.tif 000011
【図７】
2019507432.tif 000012
【手続補正書】
【提出日】平成30年11月27日(2018.11.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを処理するための方法であって、前記方法は、
命令の第１のセットのためのワープ全体が定数の同じセットを使用する場合、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用する場合、グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の前記第１のセットの同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を前記ＧＰＵに送ることと、
前記ＧＰＵによって、前記指示を受信することと、
前記指示に応答して、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を備える、方法。
【請求項２】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきであるように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項１に記載の方法。
【請求項３】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項１に記載の方法。
【請求項４】
命令の前記第１のセットの前記一部分を実行することが、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
を備える、請求項１に記載の方法。
【請求項５】
命令の前記第１のセットの前記一部分を実行することが、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
を備える、請求項１に記載の方法。
【請求項６】
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行すること
をさらに備える、請求項５に記載の方法。
【請求項７】
データを処理するための装置であって、前記装置は、
命令の第１のセットを記憶するように構成されたメモリと、
命令の第１のセットのためのワープ全体が定数の同じセットを使用する場合、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用する場合、第２のプロセッサにおけるワープのすべてのスレッドが命令の前記第１のセットの同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記第２のプロセッサにおける前記ワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を前記第２のプロセッサに送ることと
を行うように構成された第１のプロセッサと、
前記第１のプロセッサと通信している第２のプロセッサと
を備え、前記第２のプロセッサは、
前記指示を受信することと、
前記指示に応答して、１つまたは複数の述語ビットを述語ビットの単一のセットとしてレジスタに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を行うように構成された、
装置。
【請求項８】
前記第２のプロセッサがグラフィックス処理ユニット（ＧＰＵ）である、請求項７に記載の装置。
【請求項９】
前記第２のプロセッサが、複数の処理要素を含む単一命令複数データ（ＳＩＭＤ）処理コアをさらに含み、前記装置が、
前記レジスタをさらに備え、ここにおいて、前記レジスタが、前記ＳＩＭＤコアの前記複数の処理要素の各々によってアクセス可能である、
請求項７に記載の装置。
【請求項１０】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきであるように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項７に記載の装置。
【請求項１１】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項７に記載の装置。
【請求項１２】
前記第２のプロセッサが、前記ＳＩＭＤ処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するようにさらに構成された、請求項７に記載の装置。
【請求項１３】
前記第２のプロセッサがスカラー処理ユニットをさらに含み、ここにおいて、前記第２のプロセッサが、前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するようにさらに構成された、請求項７に記載の装置。
【請求項１４】
前記第２のプロセッサが、複数の処理要素を含む単一命令複数データ（ＳＩＭＤ）処理コアをさらに含み、ここにおいて、前記第２のプロセッサが、前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、前記ＳＩＭＤ処理コアを使用して、命令の第２のセットを実行するようにさらに構成された、請求項１３に記載の装置。
【請求項１５】
前記第１のプロセッサが中央処理ユニット（ＣＰＵ）である、請求項７に記載の装置。
【請求項１６】
前記装置がワイヤレス通信デバイスである、請求項７に記載の装置。
【請求項１７】
データを処理するための装置であって、前記装置は、
命令の第１のセットのためのワープ全体が定数の同じセットを使用する場合、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用する場合、グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の前記第１のセットの同じ分岐を実行すべきであると決定するための手段と、
前記決定に応答して、前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を前記ＧＰＵに送るための手段と、
前記指示を受信するための手段と、
前記指示に応答して、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶するための手段と、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行するための手段と
を備える、装置。
【請求項１８】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項１７に記載の装置。
【請求項１９】
命令の前記第１のセットの前記一部分を実行するための前記手段が、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するための手段
を備える、請求項１７に記載の装置。
【請求項２０】
命令の前記第１のセットの前記一部分を実行するための前記手段が、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するための手段
を備える、請求項１７に記載の装置。
【請求項２１】
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行するための手段
をさらに備える、請求項２０に記載の装置。
【請求項２２】
実行されたとき、１つまたは複数のプロセッサに、
命令の第１のセットのためのワープ全体が定数の同じセットを使用する場合、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用する場合、グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の前記第１のセットの同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を前記ＧＰＵに送ることと、
前記ＧＰＵによって、前記指示を受信することと、
前記指示に応答して、１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
【請求項２３】
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、請求項２２に記載のコンピュータ可読記憶媒体。
【請求項２４】
前記命令が、前記１つまたは複数のプロセッサに、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
をさらに行わせる、請求項２２に記載のコンピュータ可読記憶媒体。
【請求項２５】
前記命令が、前記１つまたは複数のプロセッサに、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
をさらに行わせる、請求項２２に記載のコンピュータ可読記憶媒体。
【請求項２６】
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行すること
をさらに備える、請求項２５に記載のコンピュータ可読記憶媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１１６
【補正方法】変更
【補正の内容】
【０１１６】
[0118]様々な例が説明された。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願発明の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
データを処理するための方法であって、前記方法は、
グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を備える、方法。
［Ｃ２］
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきであるように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、Ｃ１に記載の方法。
［Ｃ３］
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、Ｃ１に記載の方法。
［Ｃ４］
命令の前記第１のセットの前記一部分を実行することが、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
を備える、Ｃ１に記載の方法。
［Ｃ５］
命令の前記第１のセットの前記一部分を実行することが、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
を備える、Ｃ１に記載の方法。
［Ｃ６］
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行すること
をさらに備える、Ｃ５に記載の方法。
［Ｃ７］
前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記指示を送ることと
をさらに備える、Ｃ１に記載の方法。
［Ｃ８］
命令の前記第１のセットのためのワープ全体が定数の同じセットを使用すると決定することによって、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用すると決定することによって、前記ＧＰＵにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定すること
をさらに備える、Ｃ７に記載の方法。
［Ｃ９］
データを処理するための装置であって、前記装置は、
命令の第１のセットを記憶するように構成されたメモリと、
第１のプロセッサとを備え、前記第１のプロセッサは、
前記第１のプロセッサにおけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてレジスタに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を行うように構成された、
装置。
［Ｃ１０］
前記第１のプロセッサがグラフィックス処理ユニット（ＧＰＵ）である、Ｃ９に記載の装置。
［Ｃ１１］
前記第１のプロセッサが、複数の処理要素を含む単一命令複数データ（ＳＩＭＤ）処理コアをさらに含み、前記装置が、
前記レジスタをさらに備え、ここにおいて、前記レジスタが、前記ＳＩＭＤコアの前記複数の処理要素の各々によってアクセス可能である、
Ｃ９に記載の装置。
［Ｃ１２］
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきであるように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、Ｃ９に記載の装置。
［Ｃ１３］
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、Ｃ９に記載の装置。
［Ｃ１４］
前記第１のプロセッサが、前記ＳＩＭＤ処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するようにさらに構成された、Ｃ９に記載の装置。
［Ｃ１５］
前記第１のプロセッサがスカラー処理ユニットをさらに含み、ここにおいて、前記第１のプロセッサが、前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するようにさらに構成された、Ｃ９に記載の装置。
［Ｃ１６］
前記第１のプロセッサが、複数の処理要素を含む単一命令複数データ（ＳＩＭＤ）処理コアをさらに含み、ここにおいて、前記第１のプロセッサが、前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、前記ＳＩＭＤ処理コアを使用して、命令の第２のセットを実行するようにさらに構成された、Ｃ１５に記載の装置。
［Ｃ１７］
前記第１のプロセッサと通信している第２のプロセッサをさらに備え、前記第２のプロセッサは、
前記第１のプロセッサにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定することと、
前記決定に応答して、前記指示を前記第１のプロセッサに送ることと
を行うように構成された、
Ｃ９に記載の装置。
［Ｃ１８］
前記第２のプロセッサが中央処理ユニット（ＣＰＵ）である、Ｃ１７に記載の装置。
［Ｃ１９］
前記第２のプロセッサは、命令の前記第１のセットのためのワープ全体が定数の同じセットを使用すると決定することによって、または、命令の前記第１のセットのための前記ワープ全体が、前記ワープのすべてのスレッドに適用される一様汎用レジスタ（ｕＧＰＲ）からのデータを使用すると決定することによって、前記第１のプロセッサにおける前記ワープのすべてのスレッドが命令の前記第１のセットの前記同じ分岐を実行すべきであると決定するようにさらに構成された、Ｃ１７に記載の装置。
［Ｃ２０］
前記装置がワイヤレス通信デバイスである、Ｃ９に記載の装置。
［Ｃ２１］
データを処理するための装置であって、前記装置は、
グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信するための手段と、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶するための手段と、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行するための手段と
を備える、装置。
［Ｃ２２］
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、Ｃ２１に記載の装置。
［Ｃ２３］
命令の前記第１のセットの前記一部分を実行するための前記手段が、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するための手段
を備える、Ｃ２１に記載の装置。
［Ｃ２４］
命令の前記第１のセットの前記一部分を実行するための前記手段が、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行するための手段
を備える、Ｃ２１に記載の装置。
［Ｃ２５］
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行するための手段
をさらに備える、Ｃ２４に記載の装置。
［Ｃ２６］
実行されたとき、１つまたは複数のプロセッサに、
グラフィックス処理ユニット（ＧＰＵ）におけるワープのすべてのスレッドが命令の第１のセット中の同じ分岐を実行すべきであるという指示を受信することと、
１つまたは複数の述語ビットを述語ビットの単一のセットとしてメモリに記憶することと、ここにおいて、述語ビットの前記単一のセットが前記ワープ中の前記スレッドのすべてに適用される、
述語ビットの前記単一のセットに従って命令の前記第１のセットの一部分を実行することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
［Ｃ２７］
述語ビットの前記単一のセットは、命令の前記第１のセットの前記一部分を、前記ワープの各スレッドによって実施されるべきでないように示し、命令の前記セットの前記一部分が、命令の前記第１のセット中の前記同じ分岐に関係する、Ｃ２６に記載のコンピュータ可読記憶媒体。
［Ｃ２８］
前記命令が、前記１つまたは複数のプロセッサに、
単一命令複数データ（ＳＩＭＤ）処理コアを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
をさらに行わせる、Ｃ２６に記載のコンピュータ可読記憶媒体。
［Ｃ２９］
前記命令が、前記１つまたは複数のプロセッサに、
スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットの前記一部分を実行すること
をさらに行わせる、Ｃ２６に記載のコンピュータ可読記憶媒体。
［Ｃ３０］
前記スカラー処理ユニットを使用して、述語ビットの前記単一のセットに従って命令の前記第１のセットを実行することと並行して、単一命令複数データ（ＳＩＭＤ）処理コアを使用して、命令の第２のセットを実行すること
をさらに備える、Ｃ２９に記載のコンピュータ可読記憶媒体。
【国際調査報告】
2019507432.tif 000013
2019507432.tif 000014