(57)【要約】  シャッフル動作を実行するための技法が説明される。全レーン対全レーンクロスバーを使用するのではなく、より小さなクロスバーを有するシャッフラー回路が説明される。シャッフラー回路は、処理レーンから受信されたデータを並べ替えて並べ替えられたデータを出力することによって、区分的にシャッフル動作を実行する。
2019521445.tif 000002
【特許請求の範囲】
【請求項１】
データを処理するためのデバイスであって、
複数の処理レーンであって、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、処理レーンと、
前記処理レーンのソースサブセットからデータを受信し、
前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替え、
前記処理レーンに前記並べ替えられたデータを出力し、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する
ように構成される、シャッフラー回路とを備える、デバイス。
【請求項２】
前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容するように構成される、コントローラ回路をさらに備える、請求項1に記載のデバイス。
【請求項３】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、前記コントローラ回路が、オフセットに基づいて、前記複数のバンクのうちの1つのバンク識別情報と、前記バンクのうちの1つの中の処理レーンのレーン識別情報とを決定するように構成され、前記バンクのうちの1つが、前記決定されたバンク識別情報を有し、前記コントローラ回路が、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記決定されたバンク識別情報およびレーン識別情報に基づいて前記並べ替えられたデータを記憶することを許容するように構成される、請求項2に記載のデバイス。
【請求項４】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、前記ソースサブセットからデータを受信するために、前記シャッフラー回路が1つだけのバンクからデータを受信するように構成され、前記並べ替えられたデータを出力するために、前記シャッフラー回路が出力する前記並べ替えられたデータが前記バンクの各々に出力される、請求項1に記載のデバイス。
【請求項５】
前記シャッフラー回路が、前記命令によって定義されるオフセットに基づいて前記データを並べ替えるように構成される、請求項1に記載のデバイス。
【請求項６】
前記シャッフラー回路が、
前記処理レーンの連続するソースサブセットからデータを受信し、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの各々に命令する前記命令に応答して、前記処理レーンの前記連続するソースサブセットから受信された前記データを並べ替え、
前記並べ替えられたデータを前記処理レーンに出力するように構成され、前記処理レーンの連続する宛先サブセットが、前記並べ替えられたデータを対応するレジスタに記憶する、請求項1に記載のデバイス。
【請求項７】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
前記バンクの各々および前記シャッフラー回路の入力インターフェースに結合されたマルチプレクサと、
前記マルチプレクサを介して、前記処理レーンの前記ソースサブセットを含む前記複数のバンクのうちのあるバンクを前記シャッフラー回路へ選択的に結合するように構成されるコントローラ回路と、
前記バンクの各々および前記シャッフラーの出力インターフェースに結合されるデマルチプレクサとをさらに備え、前記デマルチプレクサが前記並べ替えられたデータを前記バンクにブロードキャストするように構成される、請求項1に記載のデバイス。
【請求項８】
データを受信するために、前記シャッフラー回路が、処理レーンの前記ソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値を受信するように構成され、データを並べ替えるために、前記シャッフラー回路が、処理レーンの前記ソースサブセットの各処理レーンから受信された前記全体のスカラー値またはベクトル値を並べ替えるように構成され、前記並べ替えられたデータを出力するために、前記シャッフラー回路が、前記並べ替えられたデータの前記全体のスカラー値またはベクトル値を前記処理レーンに出力するように構成される、請求項1に記載のデバイス。
【請求項９】
グラフィクス処理装置(GPU)をさらに備え、前記GPUが前記複数の処理レーンを備える、請求項1に記載のデバイス。
【請求項１０】
集積回路、
マイクロプロセッサ、または
ワイヤレス通信デバイスのうちの1つを備える、請求項1に記載のデバイス。
【請求項１１】
データを処理する方法であって、
シャッフラー回路を用いて、複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信するステップであって、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、ステップと、
前記シャッフラー回路を用いて、前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替えるステップと、
前記シャッフラー回路を用いて、前記処理レーンに前記並べ替えられたデータを出力するステップとを備え、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する、方法。
【請求項１２】
コントローラ回路を用いて、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容するステップをさらに備える、請求項11に記載の方法。
【請求項１３】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
制御回路を用いて、オフセットに基づいて、前記複数のバンクのうちの1つのバンク識別情報と、前記バンクのうちの1つの中の処理レーンのレーン識別情報とを決定するステップであって、前記バンクのうちの1つが、前記決定されたバンク識別情報を有する、ステップとをさらに備え、
前記対応するレジスタが記憶することを許容するステップが、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記決定されたバンク識別情報およびレーン識別情報に基づいて前記並べ替えられたデータを記憶することを許容するステップを備える、請求項12に記載の方法。
【請求項１４】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
前記ソースサブセットからデータを受信するステップが1つだけのバンクからデータを受信するステップを備え、
前記並べ替えられたデータを出力するステップが前記バンクの各々に出力するステップを備える、請求項11に記載の方法。
【請求項１５】
並べ替えるステップが、前記命令によって定義されるオフセットに基づいて前記データを並べ替えるステップを備える、請求項11に記載の方法。
【請求項１６】
前記処理レーンの連続するソースサブセットからデータを受信するステップと、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの各々に命令する前記命令に応答して、前記処理レーンの前記連続するソースサブセットから受信された前記データを並べ替えるステップと、
前記並べ替えられたデータを前記処理レーンに出力するステップとをさらに備え、前記処理レーンの連続する宛先サブセットが、前記並べ替えられたデータを対応するレジスタに記憶する、請求項11に記載の方法。
【請求項１７】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
マルチプレクサを介して、前記処理レーンの前記ソースサブセットを含む前記複数のバンクのうちのあるバンクを前記シャッフラー回路へ選択的に結合するステップと、
デマルチプレクサを介して前記並べ替えられたデータを前記バンクにブロードキャストするステップとをさらに備える、請求項11に記載の方法。
【請求項１８】
データを受信するステップが、処理レーンの前記ソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値を受信するステップを備え、
前記データを並べ替えるステップが、処理レーンの前記ソースサブセットの各処理レーンから受信された前記全体のスカラー値またはベクトル値を並べ替えるステップを備え、
前記並べ替えられたデータを出力するステップが、前記並べ替えられたデータの前記全体のスカラー値またはベクトル値を前記処理レーンに出力するステップを備える、請求項11に記載の方法。
【請求項１９】
データを処理するためのデバイスであって、
複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信するための手段であって、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、手段と、
前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替えるための手段と、
前記処理レーンに前記並べ替えられたデータを出力するための手段であって、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する、手段とを備える、デバイス。
【請求項２０】
前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容するための手段をさらに備える、請求項19に記載のデバイス。
【請求項２１】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
オフセットに基づいて、前記複数のバンクのうちの1つのバンク識別情報と、前記バンクのうちの1つの中の処理レーンのレーン識別情報とを決定するための手段であって、前記バンクのうちの1つが、前記決定されたバンク識別情報を有する、手段をさらに備え、
前記対応するレジスタが記憶することを許容するための前記手段が、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記決定されたバンク識別情報およびレーン識別情報に基づいて前記並べ替えられたデータを記憶することを許容するための手段を備える、請求項20に記載のデバイス。
【請求項２２】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
前記ソースサブセットからデータを受信するための前記手段が1つだけのバンクからデータを受信するための手段を備え、
前記並べ替えられたデータを出力するための前記手段が前記バンクの各々に出力するための手段を備える、請求項19に記載のデバイス。
【請求項２３】
並べ替えるための前記手段が、前記命令によって定義されるオフセットに基づいて前記データを並べ替えるための手段を備える、請求項19に記載のデバイス。
【請求項２４】
前記処理レーンの連続するソースサブセットからデータを受信するための手段と、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの各々に命令する前記命令に応答して、前記処理レーンの前記連続するソースサブセットから受信された前記データを並べ替えるための手段と、
前記並べ替えられたデータを前記処理レーンに出力するための手段とをさらに備え、前記処理レーンの連続する宛先サブセットが、前記並べ替えられたデータを対応するレジスタに記憶する、請求項19に記載のデバイス。
【請求項２５】
データを受信するための前記手段が、処理レーンの前記ソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値を受信するための手段を備え、
前記データを並べ替えるための前記手段が、処理レーンの前記ソースサブセットの各処理レーンから受信された前記全体のスカラー値またはベクトル値を並べ替えるための手段を備え、
前記並べ替えられたデータを出力するための前記手段が、前記並べ替えられたデータの前記全体のスカラー値またはベクトル値を前記処理レーンに出力するための手段を備える、請求項19に記載のデバイス。
【請求項２６】
グラフィクス処理装置(GPU)をさらに備え、前記GPUが前記複数の処理レーンを備える、請求項19に記載のデバイス。
【請求項２７】
前記デバイスが、
集積回路、
マイクロプロセッサ、または
ワイヤレス通信デバイスのうちの1つを備える、請求項19に記載のデバイス。
【請求項２８】
実行されると、データを処理するためのデバイスの1つまたは複数の回路に、
複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信させ、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成され、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替えさせ、
前記処理レーンへ前記並べ替えられたデータを出力させ、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する
命令を備える、コンピュータ可読記憶媒体。
【請求項２９】
前記1つまたは複数の回路に、
前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容させる命令をさらに備える、請求項28に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、シングル・インストラクション・マルチプル・データ(SIMD)構造におけるデータ処理に関する。
【背景技術】
【０００２】
グラフィクス処理装置(GPU)などの様々なタイプの処理装置が、シングル・インストラクション・マルチプル・データ(SIMD)構造を用いて設計されている。SIMD構造では、複数の処理レーンがあり、各処理レーンが同じ命令を、しかし異なるデータとともに実行する。
【発明の概要】
【課題を解決するための手段】
【０００３】
本開示は、SIMDアーキテクチャを有する処理装置の異なる処理レーン間でデータをシャッフルする例示的な方法を説明する。シャッフルを実行するために、本開示はシャッフラー回路を説明する。シャッフラー回路は、処理レーンのサブセット(処理レーンのソースサブセットと呼ばれる)からデータを受信し、複数のソースレーンにわたってシャッフル動作を実行し(たとえば、データを並べ替え)、並べ替えられたデータを処理レーンに出力する。処理レーンのすべてがシャッフラー回路からデータを送信されるが、処理レーンのサブセット(処理レーンの宛先サブセットと呼ばれる)のみが並べ替えられたデータを記憶のために対応するレジスタに書き込むことができ、残りは並べ替えられたデータを廃棄することができる。シャッフラー回路は、処理レーンの連続するソースサブセットからデータを受信し、受信されたデータを並べ替えることができ、処理レーンの連続する宛先サブセットは、並べ替えられたデータを対応するレジスタに書き込むことが可能であり得る。
【０００４】
このようにして、シャッフラー回路は、データのサブセットに対して区分的にデータをシャッフルすることができる。本開示において説明されるような、データを区分的にシャッフルするシャッフラー回路を利用することで、追加の回路空間が必要でありデータをシャッフルするときに電力消費を増大させる各処理レーン間の物理的接続を必要とすることなく、データのシャッフルが可能になる。
【０００５】
一例では、本開示はデータを処理するためのデバイスを説明し、デバイスは複数の処理レーンを備え、処理レーンの各々はデータを処理するための回路を備え、処理レーンは、シングル・インストラクション・マルチプル・データ(SIMD)構造およびシャッフラー回路で構成される。シャッフラー回路は、処理レーンのソースサブセットからデータを受信し、処理レーンの別の1つへデータを出力するように処理レーンの少なくともいくつかに命令する命令に応答して、処理レーンのソースサブセットから受信されたデータを並べ替え、並べ替えられたデータを処理レーンに出力するように構成され、処理レーンの宛先サブセットが対応するレジスタに並べ替えられたデータを記憶し、処理レーンの宛先サブセット以外の処理レーンが受信された並べ替えられたデータを廃棄する。
【０００６】
一例では、本開示はデータを処理する方法を説明し、この方法は、シャッフラー回路を用いて、複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信するステップであって、処理レーンの各々がデータを処理するための回路を備え、処理レーンがシングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、ステップと、シャッフラー回路を用いて、処理レーンの別の1つへデータを出力するように処理レーンの少なくともいくつかに命令する命令に応答して、処理レーンのソースサブセットから受信されたデータを並べ替えるステップと、シャッフラー回路を用いて、並べ替えられたデータを処理レーンに出力するステップであって、処理レーンの宛先サブセットが対応するレジスタに並べ替えられたデータを記憶し、処理レーンの宛先サブセット以外の処理レーンが受信された並べ替えられたデータを廃棄する、ステップとを備える。
【０００７】
一例では、本開示はデータを処理するためのデバイスを説明し、このデバイスは、複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信するための手段であって、処理レーンの各々がデータを処理するための回路を備え、処理レーンがシングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、手段と、処理レーンの別の1つへデータを出力するように処理レーンの少なくともいくつかに命令する命令に応答して、処理レーンのソースサブセットから受信されたデータを並べ替えるための手段と、並べ替えられたデータを処理レーンに出力するための手段であって、処理レーンの宛先サブセットが対応するレジスタに並べ替えられたデータを記憶し、処理レーンの宛先サブセット以外の処理レーンが受信された並べ替えられたデータを廃棄する、手段とを備える。
【０００８】
一例では、本開示は、命令を備えるコンピュータ可読記憶媒体を説明し、この命令は、実行されると、データを処理するためのデバイスの1つまたは複数の回路に、複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信させ、処理レーンの各々がデータを処理するための回路を備え、処理レーンがシングル・インストラクション・マルチプル・データ(SIMD)構造で構成され、処理レーンの別の1つへデータを出力するように処理レーンの少なくともいくつかに命令する命令に応答して、処理レーンのソースサブセットから受信されたデータを並べ替えさせ、並べ替えられたデータを処理レーンへ出力させ、処理レーンの宛先サブセットが対応するレジスタに並べ替えられたデータを記憶し、処理レーンの宛先サブセット以外の処理レーンが受信された並べ替えられたデータを廃棄する。
【０００９】
1つまたは複数の例の詳細が、添付の図面および以下の説明に記載される。他の特徴、目的、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１０】
【図１】本開示で説明される1つまたは複数の例示的な技法を実行するように構成された、画像処理のためのデバイスのブロック図である。
【図２】図1のGPUの一例をさらに詳細に示すブロック図である。
【図３】シャッフル動作を実行するための例示的な技法を示す概念図である。
【図４Ａ】シャッフルモードの様々な例を示す概念図である。
【図４Ｂ】シャッフルモードの様々な例を示す概念図である。
【図４Ｃ】シャッフルモードの様々な例を示す概念図である。
【図４Ｄ】シャッフルモードの様々な例を示す概念図である。
【図４Ｅ】シャッフルモードの様々な例を示す概念図である。
【図４Ｆ】シャッフルモードの様々な例を示す概念図である。
【図４Ｇ】シャッフルモードの様々な例を示す概念図である。
【図４Ｈ】シャッフルモードの様々な例を示す概念図である。
【図４Ｉ】シャッフルモードの様々な例を示す概念図である。
【図４Ｊ】シャッフルモードの様々な例を示す概念図である。
【図４Ｋ】シャッフルモードの様々な例を示す概念図である。
【図４Ｌ】シャッフルモードの様々な例を示す概念図である。
【図４Ｍ】シャッフルモードの様々な例を示す概念図である。
【図４Ｎ】シャッフルモードの様々な例を示す概念図である。
【図４Ｏ】シャッフルモードの様々な例を示す概念図である。
【図４Ｐ】シャッフルモードの様々な例を示す概念図である。
【図４Ｑ】シャッフルモードの様々な例を示す概念図である。
【図４Ｒ】シャッフルモードの様々な例を示す概念図である。
【図５】シャッフル命令とともに使用される動作を示す概念図である。
【図６】データを処理する例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【００１１】
グラフィクス処理装置(GPU)のシングル・インストラクション・マルチプル・データ(SIMD)アーキテクチャなどのSIMDアーキテクチャでは、複数の処理レーンが存在する。各処理レーンは、同じ命令の動作を、しかし異なるデータに対して実行している。いくつかの場合、処理レーンは、シャッフルと呼ばれる状況において、別の処理レーンによって消費されるべきデータを出力することがある。シャッフルの一例は、各処理レーンがその左隣の処理レーンからデータを受信するというものである。任意の1つの処理レーンが任意の他の処理レーンへ出力することを可能にする1つの方法は、完全な全レーン対全レーンクロスバー(たとえば、ある処理レーンからすべての他の処理レーンへの電気的接続)を介するものであり、これはチップ面積および電力消費が非常に大きい。また、処理レーンの増大につれて、そのような完全な全レーン対全レーンクロスバーのコストは二次関数的に増大する。
【００１２】
本開示は、完全な全レーン対全レーンクロスバーを必要とせずにレーンのシャッフルを実施するための例示的な技法を説明する。SIMD構造を有するデバイス(たとえば、GPU)は、処理レーンの総数より少ない処理レーンからデータを受信するシャッフラー回路を含む(たとえば、64個の処理レーンがある場合、シャッフラー回路は一度に8個の処理レーンからデータを受信する)。このシャッフラー回路は、(処理レーンの総数より少ない)ソース処理レーンのサブセットからデータを受信し、データに対してシャッフルを実行し(たとえば、レーン間でデータを並べ替え)、並べ替えられたデータをすべての処理レーンに出力する。しかしながら、処理レーンのサブセットのみが、並べ替えられたデータを記憶のために対応するレジスタに書き込むことができ、処理レーンの残りは、受信された並べ替えられたデータを廃棄することができる。シャッフラー回路は、処理レーンの連続するソースサブセットと、並べ替えられたデータをそれぞれの対応するレジスタに書き込むことが可能である処理レーンの連続する宛先サブセットとについて、これらのステップを繰り返す。
【００１３】
たとえば、処理レーンの各々は、対応するレジスタにデータを書き込み、対応するレジスタからデータを受信することができる。処理レーンの宛先サブセットは、並べ替えられたデータを対応するレジスタに記憶し、これは、並べ替えられたデータが実際に対応するレジスタに記憶されることを意味する。処理レーンの宛先サブセット以外の処理レーンは、受信された並べ替えられたデータを廃棄し、これは、処理レーンがデータを試して対応するレジスタに記憶し得るが、対応するレジスタが実際にはデータを記憶しないことがあることを意味する。
【００１４】
本開示では、処理レーンが並べ替えられたデータを対応するレジスタに記憶することは、処理レーンが並べ替えられたデータを対応するレジスタに記憶することに成功できること、または、処理レーンが並べ替えられたデータを対応するレジスタに記憶するように構成されることを意味する。処理レーンが並べ替えられたデータを廃棄することは、処理レーンが並べ替えられたデータを対応するレジスタに記憶することに成功しなかったこと、および、さらなる活動がデータに対して行われないこと、または処理レーンが並べ替えられたデータを対応するレジスタに記憶するように構成されないことを意味する。
【００１５】
シャッフラー回路は、処理レーンのサブセットのみからのデータが各々の所与の時間(すなわち、各々の繰返し)において並べ替えられているので、複数の繰返しを利用してシャッフル動作を完了することができる。しかしながら、各処理レーンは他の処理レーンの各々に結合される必要はないので、GPUのサイズおよび電力消費は低減され得る。
【００１６】
例示的な技法がGPUに関して説明されるが、本技法はそのようには限定されない。本技法は、様々なタイプの処理装置に、および一般に、シングル・インストラクション・マルチプル・データ(SIMD)構造を含む処理装置に適用可能であり得る。
【００１７】
図1は、本開示で説明される1つまたは複数の例示的な技法を実行するように構成された、画像処理のためのデバイスのブロック図である。デバイス10の例は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームもしくはコンソール、ワイヤレス通信デバイス(たとえば、携帯電話、セルラー電話、衛星電話、および/または携帯電話ハンドセットなど)、固定電話、インターネット電話、ポータブルビデオゲームデバイスもしくは携帯情報端末(PDA)などのハンドヘルドデバイス、タブレットコンピュータ、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、カメラデバイス、テレビ、テレビセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、またはグラフィカルデータを処理および/もしくは表示する任意の他のタイプのデバイスを含む。
【００１８】
図1の例に示されるように、デバイス10は、中央処理装置(CPU)16、グラフィカル処理装置(GPU)12、およびGPU12のローカルメモリ20、ユーザインターフェース22、システムメモリ30へのアクセスを提供するメモリコントローラ24、ならびにディスプレイ28上にグラフィカルデータを表示させる信号を出力するディスプレイインターフェース26を含む。GPU12は、シャッフラー回路14を含むものとして示される。このさらなる詳細において説明されるように、シャッフラー回路14は、GPU12が実行すべきシャッフル命令の動作を実行するように構成され得る。シャッフラー回路14はGPU12の内部にあるとして示されているが、いくつかの例では、シャッフラー回路14はGPU12の外部にあり得る。この説明では、簡単にするために、シャッフラー回路14はGPU12の内部にあるものとして説明される。
【００１９】
いくつかの例では、シャッフラー回路14は、GPU12のコアとGPU12のロード/ストアユニットとの間にあり得る。GPU12のロード/ストアユニットは、ローカルメモリ20とシステムバス32の両方に接続する。このことは、シャッフラー回路14が場合によっては、データをローカル/グローバルメモリに記憶する前に、またはそこからデータをロードした後にデータをスウィズルすることなどの、他の目的に再使用されることを可能にする。GPU12のコアとGPU12のロード/ストアユニットとの間のシャッフラー回路14の位置は、単なる一例として与えられ、限定するものと見なされるべきではない。
【００２０】
理解を簡単にするために、GPU12に関して例示的な技法が説明される。しかしながら、例示的な技法は、GPU12に限定されず、CPU16またはメモリコントローラ24などの他の構成要素に適用可能であり得る。一般に、本開示において説明される技法は、2つ以上の処理レーンを含む処理装置に適用可能であり得る。GPUは多数の処理レーンを含む傾向があるので、GPU12が説明の目的で使用される。しかしながら、GPUは、2つ以上の処理レーンを含む唯一のタイプの処理装置ではない。
【００２１】
また、様々な構成要素が別個の構成要素として示されるが、いくつかの例では、構成要素はシステムオンチップ(SoC)を形成するように組み合わせられ得る。ある例として、CPU16、GPU12、およびディスプレイインターフェース26は、共通のチップ上に形成され得る。いくつかの例では、CPU16、GPU12、およびディスプレイインターフェース26の1つまたは複数が、別々のチップの中にあり得る。
【００２２】
図1に示される様々な構成要素は、1つもしくは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、または他の等価な集積論理回路構成もしくは個別論理回路構成の中に形成され得る。ローカルメモリ20の例は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体、または光記憶媒体などの、1つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスを含む。
【００２３】
図1に示される様々なユニットは、バス32を使用して互いに通信する。バス32は、第3世代バス(たとえば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(たとえば、Advanced Graphics Portバス、Peripheral Component Interconnect (PCI)エクスプレスバス、またはAdvanced eXentisible Interface (AXI)バス)、または別のタイプのバスもしくはデバイス相互接続などの、様々なバス構造のいずれかであり得る。図1に示される異なる構成要素間のバスおよび通信インターフェースの特定の構成が例にすぎず、同じまたは異なる構成要素を有するコンピューティングデバイスおよび/または他の画像処理システムの他の構成が、本開示の技法を実施するために使用され得ることに留意されたい。
【００２４】
CPU16は、デバイス10の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、1つまたは複数のソフトウェアアプリケーションをCPU16に実行させるために、コンピューティングデバイス10への入力を行い得る。CPU16上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、キーボード、マウス、マイクロフォン、タッチパッド、またはユーザインターフェース22を介してコンピューティングデバイス10に結合されている別の入力デバイスなどの、1つまたは複数の入力デバイス(図示せず)を介して、コンピューティングデバイス10への入力を行い得る。
【００２５】
メモリコントローラ24は、システムメモリ30に出入りするデータの転送を容易にする。たとえば、メモリコントローラ24は、コンピューティングデバイス10の中の構成要素にメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信し、メモリ30に対してそのようなコマンドをサービスし得る。メモリコントローラ24は、システムメモリ30に通信可能に結合されている。メモリコントローラ34は、CPU16とシステムメモリ30のどちらとも別個の処理モジュールであるものとして、図1の例示的なコンピューティングデバイス10に示されるが、他の例では、メモリコントローラ24の機能の一部またはすべてが、CPU16およびシステムメモリ30のうちの一方または両方において実装され得る。
【００２６】
システムメモリ30は、CPU16およびGPU12によってアクセス可能な、プログラムモジュールおよび/または命令および/またはデータを記憶し得る。たとえば、システムメモリ30は、ユーザアプリケーション、GPU12からの得られた画像などを記憶し得る。システムメモリ30は、加えて、コンピューティングデバイス10の他の構成要素により使用される情報、および/またはそうした構成要素によって生成される情報を、記憶し得る。たとえば、システムメモリ30は、デバイス10のためのデバイスメモリとして活動し得る。システムメモリ30は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体、または光記憶媒体などの、1つまたは複数の揮発性または不揮発性のメモリまたは記憶デバイスを含み得る。
【００２７】
いくつかの態様では、システムメモリ30は、CPU16、GPU12、およびディスプレイインターフェース26に、本開示においてこれらの構成要素に帰せられる機能を実行させる命令を含み得る。したがって、システムメモリ30は、実行されると、1つまたは複数のプロセッサ(たとえば、CPU16、GPU12、およびディスプレイインターフェース26)に様々な機能を実行させる命令を記憶したコンピュータ可読記憶媒体であり得る。
【００２８】
いくつかの例では、システムメモリ30は非一時的記憶媒体である。「非一時的」という用語は、記憶媒体が搬送波または伝搬される信号において具現化されないことを示す。しかしながら、「非一時的」という用語は、システムメモリ30が非可動であること、またはその内容が静的であることを意味するものと解釈されるべきでない。一例として、システムメモリ30は、デバイス10から取り外されてよく、別のデバイスに移動されてよい。別の例として、システムメモリ30と実質的に類似のメモリが、デバイス10の中に挿入されてよい。いくつかの例では、非一時的記憶媒体は、経時的に変化することができるデータを(たとえば、RAMの中に)記憶し得る。
【００２９】
CPU16およびGPU12は、画像データなどを、システムメモリ30内に割り振られているそれぞれのバッファに記憶し得る。ディスプレイインターフェース26は、システムメモリ30からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ28を構成し得る。いくつかの例では、ディスプレイインターフェース26は、システムメモリ30から取り出されたデジタル値をディスプレイ28によって消費可能なアナログ信号に変換するように構成される、デジタルアナログ変換器(DAC)を含み得る。他の例では、ディスプレイインターフェース26は、ディスプレイ28の一部を形成することがあり、または、処理のためにデジタル値を直接ディスプレイ28に伝えることがある。
【００３０】
ディスプレイ28は、モニタ、テレビ、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ28は、コンピューティングデバイス10内に統合され得る。たとえば、ディスプレイ28は、携帯電話ハンドセットまたはタブレットコンピュータの画面であり得る。代わりに、ディスプレイ28は、有線通信リンクまたはワイヤレス通信リンクを介してコンピューティングデバイス10に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ28は、ケーブルリンクまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００３１】
本開示において説明される例示的な技法において、GPU12は、グラフィクス動作を、およびいくつかの場合、非グラフィクス動作も実行するように構成される、特別なハードウェア回路であり得る。GPU12は、シングル・インストラクション・マルチプル・データ(SIMD)構造を用いて設計される。SIMD構造において、GPU12は複数のSIMD処理レーンを含み、各SIMD処理レーンは、同じプログラムの命令を、ただし異なるデータに対して実行する。特定のSIMD処理レーン上で実行されている特定の命令は、スレッドと呼ばれる。所与のスレッドについてのデータは異なることがあるので、各SIMD処理レーンは異なるスレッドを実行すると見なされることがあるが、ある処理レーン上で実行されているスレッドは、その他の処理レーン上で実行されている命令と同じ命令である。このようにして、SIMD構造は、GPUが多数のタスクを同時に実行することを可能にする。
【００３２】
多数のグラフィクス動作は、同じ処理が並列に実行されること(たとえば、画素をレンダリングすること)を必要とする。したがって、グラフィクス処理のために、CPU16は、GPU12によって実行されるように、そのようなグラフィクス処理タスクをGPU12にオフロードする。いくつかの例では、行列乗算などの非グラフィクス動作は、グラフィクス処理のためのものではない場合であっても、GPU12上での実行から利益を得ることがある。したがって、いくつかの例では、CPU16はいくつかの非グラフィクス動作をGPU12にオフロードすることがあり、それは、GPU12がそのような動作を実行するのにより適していることがあるからである。
【００３３】
頂点処理のための、グラフィクス処理の例として、GPU12は、各頂点に対して同じタスクを実行し得るが、各頂点に対する頂点データは異なることがある(たとえば、異なる座標、異なる色値など)。SIMD構造は、GPU12が、異なるSIMD処理レーン上で頂点シェーダの同じインスタンスを実行することによって、並列に多数の頂点を処理することを可能にする。この例では、各SIMD処理レーンは頂点シェーダのスレッドを実行することができ、各スレッドは頂点シェーダの1つのインスタンスに対するものである。
【００３４】
SIMD処理レーンは1つまたは複数の算術論理装置(ALU)を含み、SIMD処理レーンは1つまたは複数の汎用レジスタ(GPR)に結果を記憶する。複数のGPRは、汎用レジスタファイル(GPRF)と呼ばれる。GPRFは、1つまたは複数のSIMD処理レーンから得られたデータを記憶するための専用レジスタを含む。GPRは、GPU12のローカルキャッシュまたはローカルメモリ20とは別であり、異なるものであり得る。
【００３５】
全レーン共有メモリにアクセスすることを介してデータを交換する代わりに、レーンシャッフルと呼ばれる、処理レーンにデータを共有させて互いに直接データを交換させることは、reduce and scan(これらはOpenCLCの標準的な内蔵機能である)、ブロードキャスト、転置、バイトニックソート、フーリエ変換などの、レーンにまたがるデータ通信を必要とする一部の並列アルゴリズムを大きく高速化することができる。一例として、行列を転置するために、処理レーンのALUは、処理レーンが動作している対象の値を、別の処理レーンのALUに送信することができる。別の例として、特定の色の画素がどれだけあるかを決定するために、処理レーンのALUは、各処理レーンが動作している対象の画素の色を示す情報を別の処理レーンに出力することができ、反復的な処理を通じて、その特定の色の画素がどれだけあるかを決定することが可能であり得る。レーンのシャッフルが有用である理由についての他の例があることがあり、本開示において説明される技法は、レーンのシャッフルの使用事例のいずれにも限定されない。
【００３６】
レーンのシャッフルを実施するための1つの方法は、スイッチングネットワークを介して、各処理レーンを1つおきの処理レーンに選択的に相互接続することである。任意の処理レーンが任意の他の処理レーンに結合することを可能にするそのような相互接続は、完全な全レーン対全レーンクロスバーと呼ばれる。完全な全レーン対全レーンクロスバーは、チップ面積の点で非常に高価であり、高い消費電力を必要とすることがある。また、チップ面積および電力消費の増大は、二次関数的に処理レーンの増大を招く。
【００３７】
全レーン対全レーンクロスバーを必要とすることなくレーンのシャッフル(たとえば、ほとんどすべてのタイプのレーンのシャッフル)を可能にするために、本開示はシャッフラー回路14を説明する。いくつかの例では、シャッフラー回路14は、固定された機能(たとえば、プログラム可能ではない)を実行するように構成される、固定機能ハードウェア回路である。しかしながら、例示的な技法は限定されない。いくつかの例では、シャッフラー回路14は、本開示において説明される例示的な技法を実行するために使用されるソフトウェア/ハードウェアがその上で実行される、プログラマブル回路によって形成され得る。この例では、ソフトウェア/ファームウェアは、本開示において説明される例示的な動作を実行するようにシャッフラー回路14を構成し得る。他の例では、シャッフラー回路14は、固定機能ハードウェア回路およびプログラマブル処理回路の組合せによって形成され得る。
【００３８】
シャッフラー回路14がプログラム可能回路である例では、システムメモリ30は、シャッフラー回路14に本開示において説明される例示的な技法を実行させる命令を記憶し得る。そのような例では、シャッフラー回路14はGPU12のプログラム可能コアの一部であることがあり、CPU16は、シャッフラー回路14が本開示において説明される例示的な技法を実行すべきであるときに命令を実行するようにシャッフラー回路14に命令することがある。たとえば、CPU16は、シャッフラー回路14がそこから命令を取り出すべき、システムメモリ30内のメモリ位置を特定する情報をシャッフラー回路14に提供し、命令を実行するためにコマンドをシャッフラー回路14に提供することができる。いずれの場合でも、説明を簡単にするために、本開示は固定機能回路としてシャッフラー回路14を説明する。
【００３９】
すべての処理レーンを互いに相互接続するのではなく、シャッフラー回路14は、処理レーンのサブセット(処理レーンのソースサブセットと呼ばれる)からデータを選択的に出力することを可能にする。たとえば、シャッフラー回路14は、処理レーンのうちのM個からデータを受信し、M個の処理レーンからのデータを並べ替え、並べ替えられたデータを出力する。いくつかの例では、シャッフラー回路14は、すべての処理レーンに並べ替えられたデータを出力し得る。しかしながら、処理レーンのサブセットのみが、シャッフラー回路14からの並べ替えられたデータを対応するレジスタ(処理レーンの宛先サブセットと呼ばれる)に記憶することが可能であり得る。シャッフラー回路14は処理レーンのサブセットからのデータを並べ替えるので、処理レーンからのデータを互いに転送することを完了するために、複数のクロック周期を利用することがある。
【００４０】
たとえば、シャッフル動作は、各処理レーンに、ある数のレーンだけ離れた処理レーンへデータを出力させることであり得る。この場合、シャッフラー回路14は、処理レーンのソースサブセットからのデータを受信して並べ替え、並べ替えられたデータを場合によってはすべての処理レーンに出力し得る。しかしながら、処理レーンのそれぞれのソースサブセットからある数のレーンだけ離れた処理レーンの宛先サブセットのみが、シャッフラー回路14からの並べ替えられたデータを対応するレジスタに記憶することが可能であることがある。シャッフラー回路14は次いで、処理レーンの次のソースサブセットについてこれらの動作を繰り返し得る。処理レーンのサブセットからデータを受信すること、データを並べ替えること、およびデータを出力することの、これらの反復の各々が、複数のクロック周期を通じて処理される。
【００４１】
処理レーンの各々は、汎用レジスタファイル(GPRF)の1つまたは複数のレジスタに対応する。処理レーンは、対応するレジスタからデータを受信し、対応するレジスタにデータを出力する。本開示において説明される例示的な技法では、処理レーンの宛先サブセットは並べ替えられたデータを対応するレジスタに記憶することができ、他の処理レーンは並べ替えられたデータを廃棄することができる。たとえば、処理レーンの宛先サブセットの対応するレジスタは並べ替えられたデータを記憶することが許容されることがあるが、他の処理レーンの対応するレジスタは並べ替えられたデータを記憶することが許容されないことがある。マルチプレクサ(MUX)がレジスタの各々に結合されることがあり、処理レーンの宛先サブセットに対応するレジスタのためのMUXは、並べ替えられたデータが対応するレジスタに記憶されることを許容し、処理レーンの宛先サブセットに対応しないレジスタのためのMUXは、(たとえば、処理レーンがデータを廃棄するように)並べ替えられたデータが対応するレジスタに記憶されることを許容しない。データを記憶するかまたはデータを記憶しない(たとえば、データを廃棄する)かのいずれかであるように処理レーンを構成することなどの、データを記憶することまたはデータを記憶しないことを対応するレジスタに対して許容するための、他の方法があり得る。
【００４２】
処理レーンが並べ替えられたデータを記憶することは、処理レーンが並べ替えられたデータを記憶しようとしていることだけではなく、並べ替えられたデータが対応するレジスタに実際に記憶されることを意味する。処理レーンが並べ替えられたデータを廃棄することは、並べ替えられたデータが対応するレジスタに記憶されなかったことを意味する。いくつかの例では、レジスタは、データを記憶することを許容されることがあり、またはデータを記憶することを許容されないことがある。いくつかの例では、処理レーンは、データを記憶するように構成されることがあり、またはデータを記憶するように構成されないことがある。いくつかの例では、これらの2つの組合せが可能である。処理レーンが並べ替えられたデータを記憶することは、並べ替えられたデータを記憶するためのこれらの技法のあらゆる可能性を指す。処理レーンが並べ替えられたデータを廃棄することは、並べ替えられたデータを記憶しないためのこれらの技法のあらゆる可能性を指す。
【００４３】
本開示では、ソース処理レーンおよび宛先処理レーンはすべて、GPU12の処理レーンである。たとえば、各処理レーンが隣接処理レーンにデータを出力すべきである場合、処理レーン5は処理レーン6のソース処理レーンであり、処理レーン6は処理レーン5の宛先処理レーンである。また、処理レーン5は処理レーン4の宛先処理レーンであり、処理レーン4は処理レーン5のソース処理レーンである。したがって、シャッフル動作では、各処理レーンがある処理レーンのソース処理レーンであることがあり、別の処理レーンの宛先処理レーンであることがある。
【００４４】
GPU12の処理レーンが互いにデータを出力すべきであるときに、CPU16は「シャッフル命令」をGPU12に出すことができる。GPU12の多くの例において、GPU12は自己反応的である。これは、CPU16およびGPU12が命令ごとに協力しないことを意味する。むしろ、CPU16は実行のためにプログラム全体をGPU12に送信する。GPU12は自身で、そのプログラムの命令のグループをフェッチ/復号/実行する。CPU16およびGPU12は、システムメモリ30を介して入力/結果データを交換する。本開示では、CPU16がシャッフル命令をGPU12に出すことは、実行するようにCPU16がGPU12に命令したプログラムがシャッフル命令を含むことを意味する。しかしながら、CPU16およびGPU12が命令ごとに協力する例では、CPU16は、命令ごとにGPU12にシャッフル命令を出力することができる。
【００４５】
シャッフル命令はシャッフルモードおよびオフセットを定義する。シャッフルモードは、どの処理レーンがどの処理レーンに出力すべきかについての方向を示し(たとえば、データを左もしくは右の処理レーンに、またはすべての処理レーンに出力する)、データを受信する処理レーンがデータを出力する処理レーンからどれだけ離れているかを決定するためにオフセットが使用される。シャッフルモードの一例であるブロードキャストモードでは、ソースレーンの固有のインデックスが、各レーンに対するオフセットを決定するために使用される。
【００４６】
いくつかの例では、オフセットはソースレーンがどれだけ離れているかを示す。これは、すべてのレーンがアクティブである、または範囲内にあるとは限らないことがあり(たとえば、オフセットが、あるソースレーンがすべての利用可能なレーンの範囲外にあることを示す)、そのオフセットがソースレーンを基準とする場合、有効なソースレーンのないいくつかのレーンが見落とされることがあるからである。また、非アクティブなレーンまたは範囲外のレーンにデータを送信することは、何の役にも立たないことがある。代わりに、各々の有効な宛先レーンは、データを受信するのに有効な宛先レーンにのみデータが送信されるように、どれがその宛先レーンのソースレーンであるかを示す。しかしながら、ソースレーンが無効である(たとえば、非アクティブである、または範囲外にある)場合、デフォルトで、宛先レーンは自身をソースレーンとして使用し得る(たとえば、宛先レーンが自分自身のデータを複製する自己複製を実行し得る)。本開示では、オフセットは、ソースレーンまたは宛先レーンのいずれかが基準であると見なすことができ、いくつかの場合、宛先レーンはオフセットに基づいてそのソースレーンを定義することがあり、いくつかの場合、ソースレーンはオフセットに基づいて宛先レーンを定義することがあることを理解されたい。
【００４７】
GPU12のSIMD構造が原因で、シャッフル命令が処理レーンの各々に適用され得る。やはり、処理レーンの各々は、同じ命令を、しかし異なるデータについて実行し得るので、各処理レーンがシャッフル命令を実行する(たとえば、各処理レーンがデータを1つの他の処理レーンに出力することになる)。オフセットはシャッフル命令によって定義されるので、オフセットは各処理レーンに対して同じであり得る(すなわち、オフセットはすべての処理レーンに対して均一である)。本開示は、処理レーンの各々が同じシャッフル命令を実行し得ることを説明するが、いくつかの例では、処理レーンの必ずしもすべてではないが少なくとも一部が、同じシャッフル命令を実行することが可能であり得る。
【００４８】
オフセットが、ある処理レーンに範囲外の処理レーンへ出力させるようなものである場合、そのオフセットは、処理レーンに、出力を範囲内の処理レーンへラップアラウンドさせる。たとえば、シャッフルモードおよびオフセットは、各処理レーンがすぐ左の処理レーンに出力すべきである(たとえば、シャッフルモードがshuffle upでありオフセットが1に等しい)ことを定義し得る。この場合、一番左の処理レーンは、データを一番右の処理レーンに出力する(たとえば、ラップアラウンド)。
【００４９】
出力のラップアラウンドは、rotate-up/rotate-downモードと呼ばれるシャッフルモードにおいて発生し得る。しかしながら、普通のup/downモードでは、ソース処理レーンは自己複製を実行し得る(たとえば、ソース処理レーンおよび宛先処理レーンは同じである)。いくつかの例では、各宛先レーンはMUX-2に結合される。ラップアラウンドがない普通のup/downモードの場合、宛先レーンは、ソースレーンが有効であればシャッフラー回路14からデータを受信するようにMUXを構成し、ラップアラウンドがないのでソースレーンが無効であれば自身からデータを受信するようにMUXを構成する。
【００５０】
本開示では、シャッフラー回路14が並べ替えられたデータを処理レーンに出力することは、シャッフラー回路14がそれぞれの並べ替えられたデータをそれぞれの処理レーンに出力することを意味することを理解されたい。たとえば、シャッフル命令およびオフセットは、各処理レーンが20レーン左にある処理レーンに出力すべきである(たとえば、シャッフルモードがshuffle upでありオフセットが20に等しい)ことを定義し得る。この例では、シャッフラー回路14は8個の入力および8個の出力を含むと仮定する。シャッフラー回路14はレーン0〜7からデータを受信することができ、ここで、シャッフラー回路14の第1の入力は処理レーン0からデータを受信し、シャッフラー回路14の第2の入力は処理レーン1からデータを受信し、以下同様である。以下で説明される理由で、シャッフラー回路14は、シャッフラー回路14の第1の出力が処理レーン4から受信されたデータを出力し、シャッフラー回路14の第2の出力が処理レーン5から受信されたデータを出力し、シャッフラー回路14の第3の出力が処理レーン6から受信されたデータを出力し、シャッフラー回路14の第4の出力が処理レーン7から受信されたデータを出力し、シャッフラー回路14の第5の出力が処理レーン0から受信されたデータを出力し、シャッフラー回路14の第6の出力が処理レーン1から受信されたデータを出力し、シャッフラー回路14の第7の出力が処理レーン2から受信されたデータを出力し、シャッフラー回路14の第8の出力が処理レーン3から受信されたデータを出力するように、受信されたデータを並べ替えることができる。
【００５１】
別の見方をすると、シャッフラー回路14の第1から第8の入力はそれぞれ、処理レーン0〜7からデータを受信する。シャッフラー回路14は次いで、以下の理由で、シャッフラー回路14の対応する第1から第8の出力がそれぞれ、処理レーン4、5、6、7、0、1、2、および3から受信されるデータを出力するように、データを並べ替える。本開示では、シャッフラー回路14が処理レーンからデータを受信するものとして、または並べ替えられたデータを処理レーンに出力するものとして説明されるとき、本開示は、シャッフラー回路14がそれぞれの処理レーンからデータを受信してそれぞれのデータをそれぞれの処理レーンに出力することを指している。
【００５２】
また、本開示は、処理レーンからのデータが受信または出力される特定の時間的順序があることを意味するものと解釈されるべきではない。たとえば、シャッフラー回路14の第1から第8の入力は、第1の入力が最初にデータを受信し、第2の入力が2番目にデータを受信することなどを意味するものと解釈されるべきではない。データのそのような順番の受信が可能であるが、例示的な技法はそのように限定されず、シャッフラー回路14の第1から第8の入力は、データを並列に(たとえば同時に)または何らかの組合せで受信し得る。同様に、シャッフラー回路14の第1から第8の出力は、第1の出力が最初にデータを出力し、第2の出力が2番目にデータを出力することなどを意味するものと解釈されるべきではない。データのそのような順番の送信が可能であるが、例示的な技法はそのように限定されず、シャッフラー回路14の第1から第8の出力は、データを並列に(たとえば同時に)または何らかの組合せで出力し得る。また、シャッフラー回路14は、8個より多数または少数の入力および出力を含み得る。
【００５３】
本開示において説明される例示的な技法では、処理レーンは、各バンクが1つまたは複数の処理レーンを含む複数のバンクとして形成され得る。たとえば、64個の処理レーンがある場合、8個のバンクがあることがあり、各バンクが8個の処理レーンを含む。処理レーンのソースサブセットは、1つのバンクの処理レーンであり得る。これらの例では、シャッフラー回路14が処理レーンのソースサブセットからデータを受信することは、シャッフラー回路14が複数のバンクのうちの1つのバンクからデータを受信することと実質的に同じであると見なされ得る。
【００５４】
いくつかの例では、シャッフラー回路14は、一度に1つのバンクからデータを受信することだけが可能であり得る。シャッフラー回路14の入力と処理レーンとの間の相互接続は、シャッフラー回路14の第1の入力が各バンクのそれぞれの第1の処理レーンからの入力のみを受信することができ、シャッフラー回路14の第2の入力が各バンクのそれぞれの第2の処理レーンからの入力のみを受信することができ、以下同様となるようなものであり得る。シャッフラー回路14が第1のバンクからデータを受信する(たとえば、シャッフラー回路14のそれぞれの入力が第1のバンクのそれぞれの処理レーンからデータを受信する)場合、シャッフル動作を実行するための別の処理の反復において、シャッフラー回路14は第2のバンクからデータを受信する(たとえば、シャッフラー回路14のそれぞれの入力は第2のバンクのそれぞれの処理レーンからデータを受信する)。シャッフラー回路14が同じ反復の間に異なるバンクにおいて処理レーンからデータを受信することを可能にするような相互接続はないことがある。
【００５５】
データを並べ替えた後で、シャッフラー回路14は、並べ替えられたデータを処理レーンに出力することができ、いくつかの例では、並べ替えられたデータをバンクの各々に出力することができる。各バンクとシャッフラー回路14の出力との間に相互接続があることがある(たとえば、各バンクの各処理レーンは、シャッフラー回路14の1つの出力、場合によっては唯一の出力からデータを受信することができる)。たとえば、各々のそれぞれのバンクの第1の処理レーンは、シャッフラー回路14の第1の出力からデータを受信するように構成されることがあり、各々のそれぞれのバンクの第2の処理レーンは、シャッフラー回路14の第2の出力からデータを受信するように構成されることがあり、以下同様である。
【００５６】
シャッフル回路14がデータを出力するとき、データがすべての処理レーンにブロードキャストされる。たとえば、バンクの各々における第1の処理レーンの各々がシャッフラー回路14の第1の出力を受信し、バンクの各々における第2の処理レーンの各々がシャッフラー回路14の第2の出力を受信し、以下同様である。
【００５７】
シャッフラー回路14の出力がバンクの各々にブロードキャストされるので、シャッフラー回路14は受信されたデータを並べ替える。たとえば、各処理レーンが10レーン離れた処理レーンにデータを出力すべきであると仮定する。やはり、簡単にするために、シャッフラー回路14は8個の入力および8個の出力を含み、各バンクが8個の処理レーンを含むと仮定する。この例では、処理レーンのソースサブセットは、第1のバンクの処理レーン(たとえば、処理レーン7〜0)を含む。この例では、第1の入力が処理レーン0からデータを受信すると仮定する。この場合、処理レーン0からのデータは、処理レーン10に出力されることになる。
【００５８】
しかしながら、シャッフラー回路14の第1の出力は接続されず、処理レーン10に接続可能ではないことがある。むしろ、シャッフラー回路14の第1の出力は、それぞれのバンクのそれぞれの第1の処理レーンに接続される。たとえば、処理レーン10は、処理レーン8〜15を含む第2のバンクの中にあり得る。この場合、シャッフラー回路14の第1の出力は処理レーン8に結合される。したがって、シャッフラー回路14が入力データを並べ替えなければ、シャッフラー回路14の第1の出力は、処理レーン10ではなく処理レーン8に出力するであろう。
【００５９】
したがって、シャッフラー回路14は、出力データがブロードキャストされるときに正しい処理レーンがデータを受信するように、入力データを並べ替えることができる。この文脈では、並べ替えとは、シャッフラー回路14のそれぞれの出力が出力するデータがシャッフラー回路14の対応する入力上のデータと異なるように、シャッフラー回路14が入力データをシフトすることを意味する。たとえば、シャッフラー回路14の第1の出力はシャッフラー回路14の第1の入力上でデータを出力せず、シャッフラー回路14の第2の出力はシャッフラー回路14の第2の入力上でデータを出力せず、以下同様である。代わりに、シャッフラー回路14は、ブロードキャストされるそれぞれの出力が、正しい宛先処理レーンによって受信されるように、データを並べ替える。宛先処理レーンは、データが出力されるべき処理レーンである(たとえば、処理レーン10に処理レーン0のデータを出力する、ここで処理レーン10は宛先処理レーンであり、処理レーン0はソース処理レーンである)。
【００６０】
シャッフラー回路14は、剰余関数に基づいて入力データを並べ替えることができる。たとえば、シャッフラー回路14内の処理回路またはGPU12のコントローラ回路または何らかの他の回路が、シャッフラー回路14の入力/出力の数でオフセットを割り、その除算の剰余を決定することができる。シャッフラー回路14は、その剰余に基づくラップアラウンドを用いて、各入力を左または右にシフトすることができる。シャッフラー回路14の出力は、このシフトされたラップアラウンドデータ(たとえば、並べ替えられたデータ)を出力することができる。
【００６１】
GPU12の中のすべての処理レーンの間に相互接続がない(たとえば、全レーン対全レーンクロスバーではない)ことがあるが、シャッフラー回路14の入力の各々が、シャッフラー回路14の出力のいずれかに選択的に結合され得る。たとえば、シャッフラー回路14は、任意の入力が任意の出力に結合されることを可能にする複数のスイッチを含み得る。シャッフラー回路14内の処理回路または別の回路(たとえば、GPU12のコントローラ回路)からの制御信号が、選択的にスイッチの閉と開を切り替えて、シャッフラー回路14の意図される入力および出力を結合してデータを並べ替えることができる。
【００６２】
並べ替えるために入力上のデータをどれだけシフトすべきかを剰余がどのように特定するかということの例として、上のように、各処理レーンが10レーン離れた処理レーンに出力すべきである(たとえば、オフセットが10に等しい)と仮定する。シャッフラー回路14の入力/出力の数は8であり、10/8は1余り2に等しい。この例では、シャッフラー回路14は、各入力がラップアラウンドを用いて2だけ左にシフトされるように、内部のスイッチを切り替えることができる。たとえば、シャッフラー回路14への入力がバンク0の処理レーン0〜7である場合、シャッフラー回路14の第1から第8の入力はそれぞれ、処理レーン0〜7からのデータである。
【００６３】
シャッフラー回路14は、2という剰余に基づいて入力データをシフトするので、シャッフラー回路14の第3の出力がシャッフラー回路14の第1の入力上でデータを出力し、シャッフラー回路14の第4の出力がシャッフラー回路14の第2の入力上でデータを出力し、以下同様となる。ラップアラウンドにより、シャッフラー回路14の第1の出力はシャッフラー回路14の第7の入力上でデータを出力し、シャッフラー回路14の第2の出力はシャッフラー回路14の第8の入力を出力する。
【００６４】
この例では、入力データ(たとえば、第1から第8の入力上のデータ)の順序はそれぞれ、処理レーン0〜7からのデータである。並べ替えの後で、出力データ(たとえば、第1から第8の出力上のデータ)の順序はそれぞれ、処理レーン6、7、0、1、2、3、4、および5からのデータである。
【００６５】
上で説明されたように、処理レーン10は、オフセットが10であるので処理レーン0のデータを受信することになる。処理レーン10は、処理レーン8〜15を含むバンク1の中にある。シャッフラー回路14の出力は各バンクにブロードキャストされ、各バンクの中の各処理レーンはシャッフラー回路14のそれぞれの出力に結合されるので、バンク1の第1の処理レーンはシャッフラー回路14の第1の出力からデータを受信し、バンク1の第2の処理レーンはシャッフラー回路14の第2の出力からデータを受信し、以下同様である。この例では、シャッフラー回路14の第1の出力は、バンク1の第1の処理レーン(たとえば、処理レーン8)が受信する処理レーン6のデータを出力する。シャッフラー回路14の第2の出力は、バンク1の第2の処理レーン(たとえば、処理レーン9)が受信する処理レーン7のデータを出力する。
【００６６】
次いで、シャッフラー回路14の第3の出力は、バンク1の第3の処理レーン(たとえば、処理レーン10)が受信する処理レーン0のデータを出力する。理解され得るように、この例では、処理レーン10は、データの並べ替えが原因で処理レーン0からデータを受信した。このパターンは、バンク1の残りのレーンに対して当てはまる(たとえば、処理レーン11は処理レーン1からデータを受信し、処理レーン12は処理レーン2からデータを受信し、最終的に、処理レーン15は処理レーン5からデータを受信する)。ここまでに、処理レーン10〜15は処理レーン0〜5からデータを受信した。
【００６７】
しかしながら、処理レーン16および17はそれぞれ、処理レーン6および7からもデータを受信することになる。処理レーン16および17はバンク2に属し、バンク2は処理レーン16〜23を含む。処理レーン16はバンク2の中の第1の処理レーンであり、処理レーン17はバンク2の中の第2の処理レーンである。上で説明されたように、シャッフラー回路14の出力は各バンクにブロードキャストされる。したがって、処理レーン16はシャッフラー回路14の第1の出力を受信し、処理レーン17はシャッフラー回路14の第2の出力を受信する。この例では、シャッフラー回路14の第1の出力は処理レーン6のデータであり、シャッフラー回路14の第2の出力は処理レーン7のデータである。入力上のデータをシフトしてラップアラウンドする(たとえば、データを並べ替える)ことによって、処理レーン6のデータは、10処理レーン離れた処理レーン(たとえば、処理レーン16)に出力され、同じことが、処理レーン17に出力される処理レーン7にも当てはまる。
【００６８】
上の例では、処理レーン0〜7からのデータは、処理レーン10〜17に出力されることになっていた。しかしながら、並べ替えの後で、処理レーン10〜17はそれぞれ、処理レーン0〜7からデータを正しく受信する一方で、様々な処理レーンが、10レーン離れていない処理レーンからデータを受信した。たとえば、上の例では、処理レーン8は処理レーン6からデータを受信し、処理レーン6は10処理レーン離れていない。
【００６９】
この問題に対処するために、処理レーンの宛先サブセット(たとえば、データを受信することになるもの)のみが、受信された並べ替えられたデータを記憶することができる。たとえば、GPU12のコントローラ回路は、処理レーン10〜17のGPRが、処理レーン0〜7が入力レーンであるときにデータを記憶することを可能にし得る(たとえば、GPRがデータを記憶することを可能にするように、処理レーン10〜17に対応するGPRに結合されたMUXを構成する)。処理レーンの残りのGPRは、データを記憶することが許容されないことがあり(たとえば、GPRがデータを記憶することを許容しないように、処理レーンの残りに対応するGPRに結合されたMUXを構成する)、それによりデータを廃棄する。したがって、データはブロードキャストされるが、データは意図されない処理レーンのいずれのGPRにも書き込まれない。
【００７０】
シャッフラー回路14は次いで、次の連続的なバンク(たとえば、処理レーン8〜15を含むバンク0)の入力を受信することができる。シャッフラー回路14は同様に、剰余に基づいてデータを並べ替え(たとえば、出力の順序が14、15、8、9、10、11、12、および13となるように2シフトしラップアラウンドする)、出力を処理レーンに(たとえば、各バンクに)ブロードキャストすることができる。コントローラ回路は、処理レーン18〜25のGPRがデータを記憶することを許容することがあり、他の処理レーンのGPRがデータを記憶することを許容しないことがある。シャッフラー回路14およびコントローラ回路は、すべてのソース処理レーンが自身の出力をそれぞれの宛先処理レーンに書き込まれた状態にするまで、これらの動作を繰り返すことができる。
【００７１】
上の例では、コントローラ回路は、処理レーンの宛先サブセットがデータを記憶し、またはデータを廃棄する1つの方法として、対応するGPRがデータを記憶することが可能であることを許容する、または許容しないものとして説明される。いくつかの例では、コントローラ回路は、処理レーンがデータを記憶する、またはデータを廃棄するための方法として、処理レーンがデータを記憶することまたはデータを記憶しないことを許容することがある。そのような技法の組合せも可能である。
【００７２】
したがって、図1はデータを処理するためのデバイスの例を提供し、デバイスはGPU12を含む。GPU12は複数の処理レーンを含み、処理レーンの各々はデータを処理するための回路(たとえば、ALU)を含み、処理レーンはSIMD構造で構成される。GPU12はまた、処理レーンのソースサブセットから(たとえば、バンクの処理レーンから)データを受信するシャッフラー回路14を含む。シャッフラー回路14は、データを処理レーンの別の1つへ出力するように処理レーンの各々に命令する(たとえば、CPU16からの)命令に基づいて、処理レーンのソースサブセットから受信されたデータを並べ替える。シャッフラー回路14は、並べ替えられたデータを処理レーンに出力する(たとえば、出力がバンクにブロードキャストされる)。いくつかの例では、処理レーンの宛先サブセットは対応するレジスタに受信された並べ替えられたデータを記憶し、処理レーンの宛先サブセット以外の処理レーンは受信された並べ替えられたデータを廃棄する。
【００７３】
上の例では、シャッフラー回路14が受信するデータは、処理レーンのソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値であり得る。たとえば、シャッフラー回路14が受信しているデータは、データ全体のサブバイトではないことがあり、むしろ、全体のスカラー値またはベクトル値である。シャッフラー回路14はまた、処理レーンのソースサブセットの各処理レーンから受信された全体のスカラー値またはベクトル値を並べ替えるように構成されることがあり、並べ替えられたデータの全体のスカラー値またはベクトル値を処理レーンに出力することがある。
【００７４】
また、上記は、シャッフル動作において、ある処理レーンがデータを別の処理レーンに出力することを説明する。いくつかの例では、ある処理レーンが別の処理レーンに出力したデータはまだ、その処理レーンとともに維持される。各処理レーンは、固有のデータを維持し、別の処理レーンからデータを受信する。いくつかの例では、処理レーン自体によって生成されるデータは削除されることがあり、別の処理レーンから受信されたデータだけが維持されることがある。
【００７５】
図2は、図1のGPUの一例をさらに詳細に示すブロック図である。たとえば、図2はGPU12の処理回路の一例を示す。GPU12は、コントローラ回路38、シャッフラー回路14、および汎用レジスタファイル(GPRF)56を含む。また示されるように、GPU12は複数のバンク46A〜46Xを含む。複数のバンク46A〜46Xの各々は、複数の処理レーン(PL)を含む。たとえば、バンク46Aは処理レーン42A,Aから42M,Aを含み、バンク46Xは処理レーン42A,Xから42M,Xを含む。したがって、図2では、処理レーン(たとえば、42A,Aから42M,Aまたは42A,Xから42M,X)は複数のバンク46A〜46Xへとグループ化され、複数のバンク46A〜46Xの各バンクは複数の処理レーンの1つまたは複数の処理レーンを含む。
【００７６】
ある例として、全体で64個の処理レーンがあると仮定する。この例では、8個のバンクがあり、各バンクは8個の処理レーンを含む。したがって、バンク46A〜46Xは8個のバンクを表し、PL 42A,Aから42M,Aはバンク46Aの8個の処理レーンを表し、PL 42A,Xから42M,Xはバンク46Xの8個の処理レーンを表す。
【００７７】
処理レーン42A,Aから42M,Xの各々はそれぞれ、1つまたは複数のALU44A,Aから44M,Xを含む。ALU44A,Aから44M,Xは、処理レーン42A,Aから42M,Xの各々に割り当てられる処理タスクを実行するように構成され得る。本開示では、ALU44A,Aから44M,Xは、GPU12の処理コア(シェーダコアとも呼ばれる)の一部であり得る。たとえば、GPU12は、シェーダプログラム(たとえば、頂点シェーダ、画素シェーダ、ジオメトリシェーダ、または非グラフィクスアプリケーションに使用される計算シェーダ)の命令を実行するように構成され得る。処理レーン42A,Aから42M,Xの各々は、シェーダプログラムの命令を並列に実行することができるが、データは異なることがある(たとえば、シェーダプログラムの複数のインスタンス化がある)。ALU44A,Aから44M,Xは、命令によって定義される動作を実行するハードウェア回路であり得る。
【００７８】
本開示は、処理レーンの各々が同じ命令を実行し得ることを説明するが、いくつかの例では、処理レーンの必ずしもすべてではないが少なくとも一部が、シャッフル命令を実行することが可能であり得る。たとえば、処理レーン42A,Aから42M,Xのサブセットは、同じ命令を並列に実行することがあるが、他のものはそうしないことがある。そのような例では、処理レーン42A,Aから42M,Xの少なくともいくつかがシャッフル命令を並列に実行しており、他のものがそうしていないということが可能であり得る。
【００７９】
GPRF56は、ローカルで生成されたデータを記憶するために処理レーン42A,Aから42M,Xのために割り振られたメモリである。たとえば、GPRF56は、処理レーン42A,Aから42M,Xに割り当てられた複数の汎用レジスタ(GPR)を含む。ALU44A,Aから44M,Xの各々が、処理のためにそれぞれの割り当てられたGPRからデータ(たとえば、処理のためのオペランドデータ)を取り出し、シェーダプログラムの命令が処理されていることに基づいてそのデータに対して数学的演算を実行し、得られたデータをそれぞれの割り当てられたGPRに返すことができる。
【００８０】
いくつかの例では、シャッフラー回路14は、処理レーン42A,Aから42M,XのGPRに結合され、いくつかの例では選択的に結合される。このようにして、シャッフラー回路14は、ソース処理レーンからのデータをそのソース処理レーンのGPRを介して受信し、データを宛先処理レーンのGPRに出力することによってデータをその宛先処理レーンに出力する。したがって、シャッフル動作は、シャッフラー回路14がソース処理レーンのGPRからデータを受信してデータを宛先処理レーンのGPRに出力することで実行され得る。
【００８１】
基本的な例として、命令が変数AおよびBによって表される値を加算するためのものである場合、処理レーン42A,Aから42M,Xの各々はこの加算命令を受信する。ALU44A,Aから44M,Xは、GPRF56の中のそれぞれのGPRから変数Aの値を取り出し、GPRF56の中のそれぞれのGPRから変数Bの値を取り出す。この例では、変数AおよびBの値は、処理レーン42A,Aから42M,Xに対して異なることがあるが、AおよびBを加算するための命令は同じである。それぞれのALU44A,Aから44M,Xは、変数Cによって表されるそれぞれの結果データを生成するために加算という数学的演算を実行することができ、それぞれのGPRの中のCという値をGPRF56に記憶することができる。次いで、変数Cがオペランドであるさらなる演算が必要である場合、それぞれのALU44A,Aから44M,Xは、処理のためにGPRF56のそれぞれのGPRからデータを取り出す。
【００８２】
コントローラ回路38は、GPU12の機能を制御することができる。コントローラ回路38は、ハードウェア構成要素として説明されるが、ソフトウェアが実行される構成要素でもあり得る。したがって、コントローラ回路38は、固定機能の回路とプログラム可能な回路の両方を指す。
【００８３】
本開示において説明される例では、コントローラ回路38は、処理レーン42A,Aから42M,Xの各々が処理することになる命令を出力するように構成され得る。たとえば、CPU16は、特定のシェーダプログラムを実行するためのコマンドをGPU12に出力し得る。それに応答して、コントローラ回路38は、システムメモリ30からシェーダプログラムの命令を取り出し、シェーダプログラムの命令を実行するように処理レーン42A,Aから42M,Xの各々をスケジューリングするように構成され得る。
【００８４】
本開示において説明される例示的な技法では、コントローラ回路38は、処理レーン42A,Aから42M,Xの各々に、データを処理レーン42A,Aから42M,Xの別のものへ出力するように命令する、命令を受信することがある(たとえば、コントローラ回路38はシャッフル命令を受信する)。シャッフル命令は、シャッフルモード(たとえば、処理レーン42A,Aから42M,Xの各々がデータを出力すべき方向)およびオフセット(たとえば、処理レーン42A,Aから42M,Xの各々がデータを出力すべき処理レーンまでどれだけの数の処理レーン離れているか)を定義することができる。たとえば、命令はshuffle rotate-up(shuffle leftとも呼ばれる)としてシャッフルモードを定義することがあり、このとき、処理レーン42A,Aから42M,Xの各々は、左に位置する処理レーンにデータを出力することになる。オフセットは10であることがあり、処理レーン42A,Aから42M,Xの各々が左に10レーン離れた処理レーンにデータを出力することになることを意味する。左に10レーン離れたレーンがない場合、オフセットはラップアラウンドする。
【００８５】
本開示では、1つのレーンが別のレーンの左または右にあることは、レーンがGPU12のSIMDアーキテクチャ内で左または右に物理的に位置していることを意味し得る。しかしながら、いくつかの例では、1つのレーンが別のレーンの左または右にあることは、論理的な指定であり得る。たとえば、現在のレーンより小さいアドレスを有するレーンは右にあるものとして見なされることがあり、現在のレーンより大きいアドレスを有するレーンは左にあるものとして見なされることがある。したがって、左および右という用語はレーンの物理的位置に限定されるものとして見なされるべきではないが、いくつかの例では、左および右はGPU12のSIMDアーキテクチャにおけるレーンの文字通りの位置を指していることがある。
【００８６】
上で説明されたように、シャッフラー回路14は、処理レーン42A,Aから42M,Xがそれぞれのシャッフル動作を実行できるように、データを並べ替えるように構成される。シャッフル動作を実行するために、シャッフラー回路14は、処理レーン42A,Aから42M,Xのソースサブセットからデータを受信する。たとえば、シャッフラー回路14は、1つのバンクの処理レーンからデータを受信することがあり、2つ以上のバンクにわたる処理レーンからデータを受信しないことがある(たとえば、バンク46Aの処理レーン42A,Aから42M,Aからデータを受信することがある)。
【００８７】
シャッフラー回路14が1つのバンクからの処理レーンからデータを受信することを可能にするために、シャッフラー回路14はマルチプレクサ(MUX)48に結合されることがあり、MUX48はバンク46A〜46Xの各々に結合されることがある。たとえば、MUX48は、バンク46Aの処理レーン42A,A〜42M,Aからデータを受信するための入力第1のグループ、および次のバンクの処理レーンからデータを受信するための入力の第2のグループなどを、バンク46Xの処理レーン42A,X〜42M,Xからデータを受信するための入力のグループを含めて含む。コントローラ回路38は、入力のグループの1つ(たとえば、バンク46A〜46Xの1つ)を選択して入力の選択されたグループからデータを出力する(たとえば、バンク46A〜46Xのうちの1つの処理レーンからデータを出力する)ようにMUX48に命令するコマンドをMUX48に出力し得る。
【００８８】
シャッフラー回路14は、バンク46A〜46Xのうちの1つの処理レーンからのデータであり得る、MUX48の出力を受信する入力インターフェース50を含む。入力インターフェース50がそこからデータを受信している処理レーンは、処理レーンのソースサブセットと呼ばれる。入力インターフェース50は複数の入力ポートを含む。たとえば、バンク46A〜46Xの各々が8個の処理レーンを含む場合、入力インターフェース50は8個の入力ポートを含み、各ポートはバンク46A〜46Xのうちの選択された1つの処理レーンの1つからデータを受信するように構成される。
【００８９】
シャッフル命令の中のシャッフルモードおよびオフセットに基づいて、コントローラ回路38は、受信されたデータを並べ替えるためにそれぞれの入力ポートをそれぞれの出力ポートに結合するように、シャッフラー回路14内のスイッチを選択的に切り替える(すなわち、開閉する)ために、コマンドをシャッフラー回路14に出力し得る。示されるように、シャッフラー回路14は、複数の出力ポートを含む出力インターフェース52を含む。出力ポートの各々は入力ポートの各々に対応する(たとえば、入力インターフェース50の第1の入力ポートは出力インターフェース52の第1の出力ポートに対応し、以下同様である)。本開示において説明される例示的な技法では、コントローラ回路38は、入力ポートからのデータが対応する出力ポートに出力されず、代わりに出力ポートの別の1つに出力されるように、シャッフラー回路14のスイッチを閉じさせ得る。入力ポートおよび出力ポートを一緒に選択的に結合することによって、シャッフラー回路14は入力インターフェース50上で受信されるデータを並べ替えることができる。
【００９０】
出力インターフェース52は、並べ替えられたデータをデマルチプレクサ(DEMUX)54に出力する。上で説明されたように、並べ替えられたデータはバンク46A〜46Xの各々にブロードキャストされる。示される例では、DEMUX54は、出力インターフェース52がバンク46A〜46Nに出力するデータをブロードキャストし得る。たとえば、DEMUX54は、バンク46Aの処理レーン42A,A〜42M,Aからデータを出力する出力の第1のグループ、および次のバンクの処理レーンにデータを出力する出力の第2のグループなどを、バンク46Xの処理レーン42A,X〜42M,Xにデータを出力する出力のグループを含めて含む。いくつかの例では、DEMUX54の出力のグループの各々の第1の出力はバンク46A〜46Xの各々の第1の処理レーンに結合され、DEMUX54の出力のグループの各々の第2の出力はバンク46A〜46Xの各々の第2の処理レーンに結合され、以下同様である。このようにして、バンク46A〜46Xの各々がシャッフラー回路14の出力を受信する。
【００９１】
しかしながら、いくつかの場合、すべての処理レーンが受信されたデータを実際に処理するとは限らない。したがって、コントローラ38は、処理レーンのサブセットだけが対応するGPRにシャッフラー回路14からの出力を記憶することを許容し得る。対応するGPRに並べ替えられたデータを記憶する処理レーンは、処理レーンの宛先サブセットと呼ばれる。他の処理レーンは受信された並べ替えられたデータを廃棄し得る。
【００９２】
本開示において説明された例示的な技法では、シャッフラー回路14は区分的なシャッフルを実行する。たとえば、シャッフラー回路14はまず、オフセットに基づいてシャッフラー回路14の入力上のデータを並べ替えることによって、および処理レーンの宛先サブセットがデータを受信することを選択的に可能にすることによって、バンク46Aの処理レーン42A,A〜42M,A(たとえば、処理レーンのソースサブセット)からのデータを正しい処理レーン(たとえば、処理レーンの宛先サブセット)に出力し得る。上で説明されたように、入力上のデータを並べ替えるための1つの例示的な方法は、シャッフラー回路14の入力ポートまたは出力ポートの数でオフセットを除算した剰余に基づいて、入力上のデータをシフトしてラップアラウンドすることである。シャッフラー回路14は次いで、バンク46Xまで次のバンク(たとえば、46B)などについてこれらの動作を繰り返し得る。
【００９３】
したがって、シャッフラー回路14は複数のクロック周期(N個のクロック周期)を利用してシャッフル動作全体を実行し得る。Nは、処理レーンの総数をシャッフラー回路14の入力ポートまたは出力ポートの数で割ったものに等しい。Wを処理レーンの総数に等しいものとし、Mをシャッフラー回路14の入力ポートまたは出力ポートの数に等しいものとする。この場合、NはW/Mに等しい。
【００９４】
いくつかの場合、シャッフラー回路14を設計するとき、シャッフラー回路14は、シャッフラー動作を実行する際の望ましいレイテンシに基づいて、ある数の入力ポートおよび出力ポートを含むように設計され得る。たとえば、多段パイプラインで実施されるシャッフル(本開示で説明される例など)では、Nはボトルネックである段のレイテンシに等しくなければならない。シャッフラー回路14は、処理レーンからのすべてのオペランド(たとえば、データ)を読み取るために4周期を使用し、次いで、レーン間でシャッフルを実行するためにN周期を使用し、次いで結果をライトバックするために8周期を使用し得る。この例では、ライトバックがボトルネックであるのでNは8でなければならない。どれだけの周期がシャッフル動作を実行するために必要であるかに基づいて、シャッフラー回路14の入力ポートおよび出力ポートの数は、処理レーンの総数をシャッフル動作を実行するのに必要な周期の数で割ることによって計算され得る(たとえば、MはW/Nに等しい)。
【００９５】
読取りのために4周期および書込みのために8周期が必要であると理解されるべきではない。一般に、読取りおよび書込みに必要な周期の数は、バスの幅によって決定される。32レーン*32ビットのデータを転送するために、広いバス(たとえば、1024ビット)が1周期を使用することがあり、または狭いバス(たとえば、256ビット)が4周期を使用することがある。さらに、受信側において、この論理は取扱幅を有し得る。取扱幅がさらに狭い(たとえば、128ビット/周期)と仮定する。この例では、データのすべてをGPRに書き込むのに8周期で十分である。より広いハードウェアは常により拡張性がある。よって、これらの数字は性能/コストのトレードオフの結果である。この読取り-シャッフル-書込みのパイプラインにおいて、書込み段が8周期を使用する場合、シャッフラー回路14は、コストを下げるには可能な限り狭くなければならないが、処理を8周期で終えることができないほど狭くてはならない。
【００９６】
本開示では、狭いとは、並列処理レーンの数を指す相対的な用語である。たとえば、シャッフラー回路14は、GPU12における処理レーンの数に対して相対的に狭いハードウェアである(たとえば、GPU12の中のレーンの数より少ないレーンに対してデータをシャッフルする)。狭いハードウェアを使用することによって、シャッフラー回路14はより多くの周期を使用するが、完了するのにより少ない電力しかかからない。
【００９７】
ある例として、128個の処理レーンがある(たとえば、Wが128に等しい)と仮定する。この例では、シャッフラー回路14は、シャッフル動作が8周期で完了し得るように、16個の入力ポートおよび16個の出力ポートのみを含む(たとえば、シャッフラー回路14は16レーンの幅のクロスバーである)ことが必要であり得る(たとえば、128/16は8に等しい)。
【００９８】
全レーン対全レーンクロスバーが使用される例でも、ボトルネックは処理レーンへのデータの書込みであり得る。したがって、ボトルネックのクロック周期以内にシャッフル動作を実行することが可能となるようにシャッフラー回路14を設計することによって、例示的な技法は、全レーン対全レーンクロスバーを使用する例と比較して、システム全体に大きなレイテンシを加えないことがある。たとえば、全レーン対全レーンクロスバーにおいて、シャッフル動作は1クロック周期を必要とすることがあり、ライトバックは8クロック周期を必要とすることがある。上の例では、シャッフラー回路14は、シャッフル動作を完了するのに8クロック周期を、ライトバックを完了するのに8クロック周期を必要とすることがある。しかしながら、ライトバックが行われている間にシャッフラー回路14がシャッフル動作を実行するので、クロック周期の総数は8クロック周期に限定されることがあり、これは全レーン対全レーンクロスバーの例で必要とされるクロック周期の総数と同じである。
【００９９】
本開示において説明される例示的な技法では、全レーン対全レーンクロスバーが使用される例と比較して、レイテンシの大きな増大はないことがある。しかしながら、例示的な技法はチップ面積の低減をもたらし得る。たとえば、64レーンの全レーン対全レーンクロスバーと比較すると、例示的な技法は(64/16)2倍の面積を節約する(たとえば、シャッフラー面積を16倍節約する)ことができる。
【０１００】
図3は、シャッフル動作を実行するための例示的な技法を示す概念図である。図3は、複数のソース処理レーンおよび複数の宛先処理レーンを示す。ソース処理レーンおよび宛先処理レーンはレーンの同じセットである。たとえば、あるレーンは、別のレーンのソースレーンであり、別のレーンの宛先レーンである(たとえば、あるレーンが同時にソースレーンであり宛先レーンであり得る)。
【０１０１】
示される例では、全体で64個の処理レーン(たとえば、処理レーン0〜63)がある。各々が複数の処理レーンを含む、8個のバンク(バンク0からバンク7)がある。言い換えると、64個の処理レーンは複数のバンクへとグループ化され、複数のバンクの各バンクが1つまたは複数の処理レーンを含む。たとえば、バンク0は処理レーン0〜7を含み、バンク1は処理レーン8〜15を含み、以下同様である。また、示される例では、シャッフラー回路14は8個の入力ポートおよび8個の出力ポートを含む。
【０１０２】
この例では、CPU16が35というオフセットとともにshuffle rotate upを実行するようにGPU12に命令したと仮定する(たとえば、処理レーン0は処理レーン35に出力することになり、処理レーン1は処理レーン36に出力することになり、以下同様であり、ここで処理レーン28は処理レーン63に出力することになる)。処理レーン29について、このオフセットは、処理レーン29に処理レーン64へ出力させるが、処理レーン64は存在しない。しかしながら、オフセットはラップアラウンドし、処理レーン29は処理レーン0に出力することになり、処理レーン30は処理レーン1に出力することになり、以下同様であり、処理レーン63は処理レーン34に出力する。
【０１０３】
この例では、上で説明されたように、シャッフラー回路14は、処理レーンのソースサブセットから出力を受信し得る。処理レーンは1つのバンクの処理レーン(たとえば、バンク0の処理レーン7〜0)であり得る。シャッフラー回路14は、MUX48を介してバンク0の処理レーン7〜0からデータを受信し得る。図3に示されるように、シャッフラー回路14の入力ポートの各々は、処理レーン7〜0のうちの1つからデータを受信する。たとえば、シャッフラー回路14の第1の入力ポートは処理レーン0からデータを受信し、シャッフラー回路14の第2の入力ポートは処理レーン1からデータを受信し、以下同様である。
【０１０４】
処理レーン0からのデータは、処理レーン35に出力されることになる。処理レーン0からのデータが処理レーン35に出力されることを確実にするために、コントローラ38は、シャッフラー回路14のどの出力ポートがDEMUX54を介して処理レーン35に結合されるかを決定し得る。上で説明されたように、DEMUX54は、シャッフラー回路14の第1の出力ポートに各バンクの第1の処理レーンを結合し、シャッフラー回路14の第2の出力ポートに各バンクの第2の処理レーンを結合し、以下同様である。図3に示される例では、処理レーン0〜7はそれぞれ、DEMUX54を通じて、シャッフラー回路14の第1から第8の出力ポートに結合され、処理レーン8〜15はそれぞれ、DEMUX54を通じて、シャッフラー回路14の第1から第8の出力ポートに結合され、以下同様である。
【０１０５】
シャッフラー回路14のどの出力ポートが処理レーン35に結合されるかを決定するために、コントローラ回路38は、シャッフラー回路14の入力/出力ポートの数でオフセットを割ることができる(たとえば、35割る8)。この除算の商は処理レーン35が位置するバンクを示し、剰余は処理レーン35がそのバンクにおいて何番目のレーンであるかを示す。たとえば、35割る8の商は4であり、剰余は3である。したがって、コントローラ回路38は、処理レーン35がバンク4の中にあり、バンク4において3レーン中にあると決定することができる。示されるように、バンク4は処理レーン32〜39を含むので、処理レーン35はバンク4において3レーン中にある。
【０１０６】
この例では、コントローラ回路38は、処理レーン35に結合するシャッフラー回路14の出力ポートが処理レーン0からデータを受信するように、シャッフラー回路14のそれぞれの入力ポート上のデータがラップアラウンドを用いて3つのポートによってシフトされるべきであると決定し得る。たとえば、シャッフラー回路14の第1から第8の出力ポートはそれぞれ、処理レーン32〜39に結合する。これは、シャッフラー回路14の第4の出力ポートが処理レーン35に結合することを意味する。したがって、シャッフラー回路14の第1の入力ポート上のデータをシャッフラー回路14の第4の出力ポートに出力することによって、処理レーン35は処理レーン0からデータを受信する。
【０１０７】
この場合、コントローラ回路38は、シャッフラー回路14に、処理レーン0からのデータが処理レーン35に出力されるように第1の入力ポートを第4の出力ポートへ相互接続させ、処理レーン0からのデータが処理レーン36に出力されるように第2の入力ポートを第5の出力ポートへ相互接続させ、以下同様であり得る。第6の入力ポートについて、ラップアラウンドが原因で、コントローラ回路38は、シャッフラー回路14に、第6の入力ポートを第1の出力ポートへ相互接続させ、第7の入力ポートを第2の出力ポートへ相互接続させ、第8の入力ポートを第3の出力ポートへ相互接続させ得る。
【０１０８】
図3に示されるように、第4の出力ポートは第1の入力ポートのデータを受信し(たとえば、第4の出力ポートは処理レーン0からのデータを出力する)、第5の出力ポートは第2の入力ポートからのデータを受信し(たとえば、第5の出力ポートは処理レーン1からのデータを出力する)、以下同様である。したがって、シャッフラー回路14は、オフセットに基づいて受信されたデータを並べ替えることができる。示されるように、シャッフラー回路14の第1の出力ポートは処理レーン5からのデータを出力し、シャッフラー回路14の第2の出力ポートは処理レーン6からのデータを出力し、シャッフラー回路14の第3の出力ポートは処理レーン7からデータを出力し、シャッフラー回路14の第4の出力ポートは処理レーン0からのデータを出力し、シャッフラー回路14の第5の出力ポートは処理レーン1からのデータを出力し、シャッフラー回路14の第6の出力ポートは処理レーン2からのデータを出力し、シャッフラー回路14の第7の出力ポートは処理レーン3からのデータを出力し、シャッフラー回路14の第8の出力ポートは処理レーン4からのデータを出力する。
【０１０９】
DEMUX54は、シャッフラー回路14の出力をバンクの各々にブロードキャストする。示されるように、バンク4の処理レーン32〜34はそれぞれ、処理レーン5〜7からデータを受信する。バンク4の処理レーン35〜39はそれぞれ、処理レーン0〜4からデータを受信する。シャッフラー回路14の出力のブロードキャストが原因で、バンク5の処理レーン40〜47はシャッフラー回路14からデータを受信する。たとえば、処理レーン40〜42はそれぞれ、処理レーン5〜7からデータを受信する。処理レーン43〜47はそれぞれ、処理レーン0〜4からデータを受信する。
【０１１０】
この場合、処理レーン35〜39は処理レーン0〜4からデータを正しく受信した(たとえば、オフセットが35であるので、処理レーン35〜39は処理レーン0〜4からデータを受信することになる)。しかしながら、処理レーン32〜34が処理レーン5〜7からデータを受信したが、(ラップアラウンドにより)処理レーン32〜34が処理レーン61〜63からデータを受信することになっていた。同様に、処理レーン40〜42は処理レーン5〜7からデータを正しく受信した(たとえば、オフセットが35であるので、処理レーン40〜42は処理レーン5〜7からデータを受信することになる)。しかしながら、処理レーン43〜47は処理レーン0〜4からデータを正しく受信したが、処理レーン43〜47は処理レーン8〜12からデータを受信することになっていた。この例では、バンク0〜3、6、および7のいずれもが、正しい処理レーンからデータを受信しなかった。
【０１１１】
本開示において説明される技法では、処理レーンはデータを受信し得るが、処理レーンはデータを取得してそれをGPRにライトバックするためにアクティブではないことがある。コントローラ回路38は、並べ替えられたデータを受信することになる処理レーンの宛先サブセットをアクティブ化するように構成され得る。たとえば、上で説明されたように、処理レーン40〜42および35〜39は35というオフセットを用いてシャッフルを実施するために正しい処理レーンからデータを受信し、処理レーン43〜47および32〜34は35というオフセットを用いてシャッフルを実施するために正しい処理レーンからデータを受信しなかった。この例では、コントローラ回路38は、これらの処理レーンのみが対応するGPRにデータを記憶するように、処理レーン40〜42および35〜39のみをアクティブ化し得る。処理レーンの残りは、対応するGPRにデータを記憶しないことがあり、むしろ、データを廃棄することがある(すなわち、データはそれでも処理レーンの残りにブロードキャストされるが、処理レーンの残りは対応するGPRにデータを記憶できないので、データが廃棄される)。処理レーンは、GPRがデータを受信することを許容されないので、または処理レーンがデータを記憶しないように構成されるので、対応するGPRにデータを記憶することが可能ではないことがある。
【０１１２】
コントローラ回路38は、オフセットおよびシャッフラー回路14の出力ポートの数に基づいて、どの処理レーンがアクティブ化されることになる(たとえば、データを記憶することが許容される)かを決定し得る。たとえば、コントローラ回路38は、35を8で割ることによる3という剰余に基づいて、処理レーン35が処理レーン0からデータを受信すべきであると決定した。この例では、コントローラ回路38は、処理レーン35および後続の7個の処理レーンが、対応するGPRにデータを記憶することを許容し得る。この例では、処理レーン35〜42は処理レーンの宛先サブセットである。処理レーンの残りへのデータは廃棄され得る。
【０１１３】
処理レーンがデータを記憶することまたはデータを記憶しないことを、コントローラ回路38が可能にし得る様々な方法があり得る。コントローラ回路38は、GPRが対応する処理レーンからのデータを記憶することを許容するように、またはGPRが対応する処理レーンからのデータを記憶することを許容しないように、GPRに結合されたMUXを制御し得る。コントローラ回路38は、処理レーンが、対応するGPRにデータを記憶すること、または対応するGPRにデータを記憶しないことを可能にするように、処理レーンを制御し得る。いくつかの組合せ、ならびにこれらの例示的な技法以外の技法も可能である。これらの場合のいずれにおいても、処理レーンの宛先サブセットは対応するレジスタに並べ替えられたデータを記憶し、処理レーンの宛先サブセット以外の処理レーンは受信された並べ替えられたデータを廃棄する。
【０１１４】
たとえば、コントローラ回路38は、どのGPRがシャッフル回路14に結合されるかを制御し得る。たとえば、コントローラ回路38は、この周期においてライトバックするためにどの8個の宛先レーンの宛先GPRが接続されるべきかを決定し得る。このようにして、コントローラ回路38は処理レーンをアクティブ化し得る(たとえば、それらの処理レーンのためのGPRにデータを提供することによって)。
【０１１５】
この例では、シャッフラー回路14は、処理レーンの正しい宛先サブセットへのレーン0〜7からのデータの出力を終了した。しかしながら、その他の処理レーンが残っている(たとえば、シャッフラー回路14が残りのレーン8〜63からのデータを受信せず出力しなかった)。したがって、シャッフラー回路14およびコントローラ回路38は、シャッフル動作が完了するまでこれらのステップを繰り返し得る。たとえば、シャッフラー回路14は、レーン8〜15からデータを受信し、第1の出力ポートが処理レーン13からのデータを出力し、第2の出力ポートが処理レーン14からのデータを出力し、第3の出力ポートが処理レーン15からのデータを出力し、第4の出力ポートが処理レーン8からのデータを出力し、第5の出力ポートが処理レーン9からのデータを出力し、第6の出力ポートが処理レーン10からのデータを出力し、第7の出力ポートが処理レーン11からのデータを出力し、第8の出力ポートが処理レーン12からのデータを出力するように、データを並べ替える。この並べ替えられたデータはバンクのすべてにブロードキャストされるが、レーン43〜50のみが、対応するGPRに受信された並べ替えられたデータを記憶する。この例では、レーン48〜55を含むバンク6はそれぞれ、レーン13、14、15、8、9、10、11、および12からデータを受信する。バンク6のレーン48〜50のみがデータを記憶するので、レーン48〜50はレーン13〜15からデータを受信する。レーン40〜47を含むバンク4はそれぞれ、レーン13、14、15、8、9、10、11、および12からデータを受信する。レーン43〜47のみがデータを記憶するので、レーン43〜47はそれぞれ、レーン8〜12からデータを受信する。
【０１１６】
したがって、この反復の後で、レーン35〜42のALUはそれぞれレーン0〜7からデータを受信し、レーン43〜50のALUはそれぞれレーン8〜15からデータを受信する。したがって、レーン0〜15からのデータは35レーンだけ左にシャッフルされた(上にシャッフルされた(shuffled up)とも呼ばれる)。シャッフラー回路14およびコントローラ回路38は、シャッフル動作を完了するために、連続するバンクに対してこれらを繰り返し得る。
【０１１７】
図3の例では、GPU12を含むデバイス10、GPU12自体などの、データを処理するためのデバイス、またはSIMD構造を有する何らかの他のデバイス、複数の処理レーン0〜63があり、処理レーンの各々がデータを処理するための回路(たとえば、ALU44A,Aから44M,X)を含む。説明されたように、処理レーンはSIMD構造で構成される。
【０１１８】
シャッフラー回路14は、MUX48を介してシャッフラー回路14の入力ポート上で処理レーンのソースサブセットからデータを受信する(たとえば、処理レーン0〜7からデータを受信する)ように構成され得る。いくつかの例では、ソースサブセットからデータを受信するために、シャッフラー回路14は1つだけのバンクからデータを受信し得る。シャッフラー回路14は、処理レーンの各々に処理レーンの別の1つへデータを出力するように命令する命令に応答して、処理レーンのソースサブセットから受信されたデータを並べ替え得る(たとえば、シャッフラー回路14はシャッフル命令に応答してデータを並べ替え得る)。シャッフラー回路14は、並べ替えられたデータを処理レーンに出力し得る。たとえば、DEMUX54は、並べ替えられたデータを処理レーンにブロードキャストし得る。このようにして、シャッフラー回路14が出力する並べ替えられたデータがバンクの各々に出力される。処理レーンのすべてがシャッフラー回路14の出力のうちの1つからデータを受信し得るが、コントローラ回路38は、処理レーンの宛先サブセットのみが、並べ替えられたデータを対応するレジスタに記憶することを許容し得る。他の処理レーンは受信された並べ替えられたデータを廃棄し得る。
【０１１９】
シャッフラー回路14およびコントローラ回路38は、処理レーンの連続するソースサブセットおよび宛先サブセットに対して上の例示的な動作を実行するように構成され得る。たとえば、シャッフラー回路14は、処理レーンの連続するソースサブセットからデータを受信し、処理レーンの連続するソースサブセットから受信されたデータを並べ替え、並べ替えられたデータを処理レーンに出力することができ、処理レーンの連続する宛先サブセットは、受信された並べ替えられたデータを対応するレジスタに記憶する。
【０１２０】
図2および図3に示されるように、処理レーンは複数のバンクへとグループ化される。コントローラ回路38は、複数のバンク0〜7のうちの1つに対するバンク識別情報(たとえば、図3の例ではbank ID 4)と、オフセットに基づく決定されたバンク識別情報を有するバンク4内の処理レーン(たとえば、処理レーン35)のレーン識別情報(たとえば、図3の例ではlane ID 3)とを決定し得る。この例では、コントローラ回路38は、決定されたバンク識別情報およびレーン識別情報(たとえば、バンク4の処理レーン35〜39およびバンク5の処理レーン40〜42に対応するGPRがデータを記憶することが許容される)に基づいて、処理レーンの宛先サブセットの対応するGPRが並べ替えられたデータを記憶することを可能にするように構成される。
【０１２１】
一般に、上で説明されたように、シャッフラー回路14が受信できる処理レーンの数がMであり、W個の処理レーンがある場合、シャッフラー回路14はシャッフル動作をN周期で実行することができ、ここでN=W/Mである。例示的な技法は、全レーン対全レーンクロスバーと比較してより多数の周期を利用し得るが、本開示において説明される技法は、電力およびサイズの大きな低減を実現しながら、使用事例の大半(たとえば、90%以上)で大きなレイテンシなしで機能するはずである。使用事例の他の10%に対して、シャッフル動作を実行するためにソフトウェアが使用されることがあり、これはより低い性能をもたらすが、これは限られた場合だけである。
【０１２２】
上の例では、シャッフル動作はすべての処理レーンにわたって発生した。しかしながら、いくつかの例では、シャッフル命令は、指定された幅にわたって(たとえば、処理レーンのすべてではないがあるグループにわたって)シャッフル動作を定義し得る。そのような例では、コントローラ回路38は、その上でシャッフル動作が発生する予定のない処理レーンのALUを無効にし得る。一般に、処理レーンの数は低減されるものと考えられ得る。レーンのそのような低減は、少数の処理レーンにわたるshuffle upおよびdownなどのある動作に対して有用であることがあり、高速な行列転置を実施するためのものであり得る。
【０１２３】
図4A〜図4Rは、シャッフルモードの様々な例を示す概念図である。図4A〜図4Rにおいて、理解を簡単にするために4つの処理レーンが示されている。これらの例は任意の数の処理レーンに拡張され得る。図4A〜図4Rの各々において、一番上の行はソース処理レーン(たとえば、ソース処理レーンのためのソースレジスタ)であり、一番下の行は宛先処理レーン(たとえば、宛先処理レーンのための宛先レジスタ)である。また、シャッフラー回路14は簡潔にするために示されていない。
【０１２４】
図4A〜図4Cは、shuffle rotate-down(shuffle rightまたはshuffle downとも呼ばれる)の例を示す。図4Aに示される例では、オフセットは1であるので、各処理レーンは右隣の処理レーンに出力する。第1の処理レーンについて、右に処理レーンはないので、第1の処理レーンは最後の処理レーンに出力する。この場合、シャッフラー回路14が使用されるとすると、コントローラ回路38は、ラップアラウンドを用いて、入力ポートの各々のデータを1だけ右へシフトさせるであろう。図4Bに示される例では、オフセットは2であるので、各処理レーンは2レーン右の処理レーンに出力する。第1の処理レーンおよび第2の処理レーンについて、2レーン右の処理レーンはないので、第1の処理レーンは最後から2番目の処理レーンに出力し、第2の処理レーンは最後の処理レーンに出力する。この場合、シャッフラー回路14が使用されるとすると、コントローラ回路38は、ラップアラウンドを用いて、入力ポートの各々のデータを2だけ右へシフトさせるであろう。図4Cに示される例では、オフセットは3であるので、各処理レーンは3レーン右の処理レーンに出力する。最初の3つの処理レーンについて、3レーン右に処理レーンはないので、最初の3つの処理レーンは最後の3つの処理レーンに出力する。この場合、シャッフラー回路14が使用されるとすると、コントローラ回路38は、ラップアラウンドを用いて、入力ポートの各々のデータを3だけ右へシフトさせるであろう。
【０１２５】
図4A〜図4Cに示される例では、シャッフラー回路14はシャッフルモードおよびオフセットに基づいてデータを並べ替え得る。たとえば、shuffle rotate-downというシャッフルモードは、シャッフラー回路14が入力ポート上のデータを右にシフトすることを示し、オフセット(たとえば、オフセットとシャッフラー回路14のポートの数の除算の剰余に基づく)は、シャッフラー回路14がデータをどれだけ右にシフトするかを示す。
【０１２６】
図4D〜図4Fは、shuffle rotate-up(shuffle leftまたはshuffle upとも呼ばれる)の例を示す。図4Dに示される例では、オフセットは1であるので、各処理レーンは左隣の処理レーンに出力する。最後の処理レーンについて、左に処理レーンはないので、最後の処理レーンは最初の処理レーンに出力する。この場合、シャッフラー回路14が使用されるとすると、コントローラ回路38は、ラップアラウンドを用いて、入力ポートの各々のデータを1だけ左へシフトさせるであろう。図4Eに示される例では、オフセットは2であるので、各処理レーンは2レーン左の処理レーンに出力する。最後の2つの処理レーンについて、2レーン左に処理レーンはないので、最後の2つの処理レーンは最初の2つの処理レーンに出力する。この場合、シャッフラー回路14が使用されるとすると、コントローラ回路38は、ラップアラウンドを用いて、入力ポートの各々のデータを2だけ左へシフトさせるであろう。図4Fに示される例では、オフセットは3であるので、各処理レーンは3レーン左の処理レーンに出力する。最後の3つの処理レーンについて、3レーン左に処理レーンはないので、最後の3つの処理レーンは最初の3つの処理レーンに出力する。この場合、シャッフラー回路14が使用されるとすると、コントローラ回路38は、ラップアラウンドを用いて、入力ポートの各々のデータを3だけ左へシフトさせるであろう。
【０１２７】
図4D〜図4Fに示される例では、シャッフラー回路14はシャッフルモードおよびオフセットに基づいてデータを並べ替え得る。たとえば、shuffle rotate-upというシャッフルモードは、シャッフラー回路14が入力ポート上のデータを左にシフトすることを示し、オフセット(たとえば、オフセットとシャッフラー回路14のポートの数の除算の剰余に基づく)は、シャッフラー回路14がデータをどれだけ左にシフトするかを示す。
【０１２８】
図4G〜図4Iは、ブロードキャストシャッフルモードを示す。これらの例では、オフセットは、どの処理レーンからブロードキャストを開始するかを示す(すなわち、オフセットはどの処理レーンがブロードキャストを開始するかを示すインデックスである)。いくつかの例では、ブロードキャストシャッフルモードでは、オフセットはないことがあり、代わりに処理レーンインデックスが使用されることがある。しかしながら、代わりにオフセットを処理レーンインデックスとして使用することが可能であり得る。たとえば、図4Gでは、オフセットは1であるので、第2の処理レーンからのデータはすべての他の処理レーンにブロードキャストされる。図4Iでは、オフセットは2であるので、第3の処理レーンからのデータがすべての他の処理レーンにブロードキャストされる。図4Hでは、オフセットは3であるので、第4の処理レーンからのデータがすべての他の処理レーンにブロードキャストされる。これらの例の各々において、シャッフラー回路14は、異なるバンクからではなく同じバンクから連続的にデータを受信することができ、出力を右または左にシフトすることができ、各反復に対して、出力が右または左にシフトされる量を増やすことができる(ラップアラウンドにより、シャッフラー回路14がデータを右と左のどちらの方向にシフトするかは重要ではないことがある)。たとえば、シャッフラー回路14は第1の反復においてデータを1だけ右にシフトすることができ、それらの宛先レーンは対応するGPRにデータを記憶することができる。次いで、次の反復において、シャッフラー回路14はデータを2だけ右にシフトすることができ、それらの宛先レーンは対応するGPRにデータを記憶することができ、以下同様である。
【０１２９】
図4J〜図4Lはshuffle XORの例を示す。shuffle XOR(バタフライシャッフルとも呼ばれる)では、シャッフラー回路14は、ビットごとに、設計に基づいてオフセット値およびソース処理レーンまたは宛先処理レーンの値へ、XOR関数を適用する。この例では、この説明は宛先レーンがソースレーンを特定することに基づく。たとえば、図4Jにおいて、オフセット値は1であり、その二進数は01である。宛先レーン0(すなわち、00)に対して、01(オフセット)と宛先レーン(00)の値とのXORは01である。たとえば、宛先レーンとオフセットの両方の最初の二進値が0であり、0と0のXORは0である。宛先レーンの2番目の二進値は0であり、オフセットの2番目の二進値は1であり、0と1のXORは1である。したがって、結果は01である。値01は1に等しく、宛先レーン0はソースレーン1からデータを受信する。
【０１３０】
図4Jにおいて、宛先レーン1(すなわち、01)に対して、01と01というオフセット値とのXORは00(すなわち、0)であり、宛先レーン1はソースレーン0からデータを受信する。宛先レーン2(すなわち、10)に対して、10と01というオフセット値とのXORは11(すなわち、3)であり、宛先レーン2はソースレーン3からデータを受信する。宛先レーン3(すなわち、11)に対して、11と01というオフセット値とのXORは10(すなわち、2)であり、宛先レーン3はソースレーン2からデータを受信する。
【０１３１】
図4Kにおいて、オフセット値は2(すなわち、二進数で10)である。図4Kにおいて、宛先レーン0(すなわち、00)に対して、00と10というオフセット値とのXORは10(すなわち、2)であり、宛先レーン0はソースレーン2からデータを受信する。宛先レーン1(すなわち、01)に対して、01と10というオフセット値とのXORは11(すなわち、3)であり、宛先レーン1はソースレーン3からデータを受信する。宛先レーン2(すなわち、10)に対して、10と10というオフセット値とのXORは00(すなわち、0)であり、宛先レーン2はソースレーン0からデータを受信する。宛先レーン3(すなわち、11)に対して、11と10というオフセット値とのXORは01(すなわち、1)であり、宛先レーン3はソースレーン1からデータを受信する。
【０１３２】
図4Lにおいて、オフセット値は3(すなわち、二進数で11)である。図4Lにおいて、宛先レーン0(すなわち、00)に対して、00と11というオフセット値とのXORは11(すなわち、3)であり、宛先レーン0はソースレーン3からデータを受信する。宛先レーン1(すなわち、01)に対して、01と11というオフセット値とのXORは10(すなわち、2)であり、宛先レーン1はソースレーン2からデータを受信する。宛先レーン2(すなわち、10)に対して、10と11というオフセット値とのXORは01(すなわち、1)であり、宛先レーン2はソースレーン1からデータを受信する。宛先レーン3(すなわち、11)に対して、11と11というオフセット値とのXORは00(すなわち、0)であり、宛先レーン3はソースレーン0からデータを受信する。
【０１３３】
図4M〜図4Oは、shuffle downモードを示す。shuffle downモードは、図4A〜図4Cのshuffle rotate downモードと類似している。しかしながら、shuffle downモードでは、ラップアラウンドはない。たとえば、図4Mでは、オフセットが1であるので、各宛先レーンはその左隣のソースレーンからデータを受信する。宛先レーン3では、左にソースレーンはない。ラップアラウンドがないので、宛先レーン3は自己複製を実行し、自身からデータを受信する(たとえば、宛先レーン3のソースレーンはソースレーン3である)。図3には示されていないが、宛先レーンの各々はMUXを含むことがあり、宛先レーンが自己複製を実行することになる場合、MUXはソースレーンから受信されたデータを出力せず、宛先レーンがソースレーンからデータを受信することになる場合、MUXはソースレーンからデータを出力する。
【０１３４】
図4Nでは、オフセットが2であるので、各宛先レーンは2レーン左のソースレーンからデータを受信する。宛先レーン3および2に対して、2レーン左のソースレーンはない。ラップアラウンドがないので、宛先レーン3および2は自己複製を実行し、自身からデータを受信する(たとえば、宛先レーン3のソースレーンはソースレーン3であり、宛先レーン2のソースレーンはソースレーン2である)。図4Oでは、オフセットが3であるので、各宛先レーンは3レーン左のソースレーンからデータを受信する。宛先レーン3、2、および1では、3レーン左のソースレーンはない。ラップアラウンドがないので、宛先レーン3、2、および1は自己複製を実行し、自身からデータを受信する(たとえば、宛先レーン3のソースレーンはソースレーン3であり、宛先レーン2のソースレーンはソースレーン2であり、宛先レーン1のソースレーンはソースレーン1である)。
【０１３５】
図4P〜図4Rは、shuffle upモードを示す。shuffle upモードは、図4D〜図4Fのshuffle rotate downモードと類似している。しかしながら、shuffle upモードでは、ラップアラウンドはない。たとえば、図4Pでは、オフセットが1であるので、各宛先レーンはその右隣のソースレーンからデータを受信する。宛先レーン0では、右にソースレーンはない。ラップアラウンドがないので、宛先レーン0は自己複製を実行し、自身からデータを受信する(たとえば、宛先レーン0のソースレーンはソースレーン0である)。上で説明されたように、宛先レーンの各々は、そのような自己複製を可能にするためにMUXを含み得る。
【０１３６】
図4Qでは、オフセットが2であるので、各宛先レーンは2レーン右のソースレーンからデータを受信する。宛先レーン0および1に対して、2レーン右のソースレーンはない。ラップアラウンドがないので、宛先レーン0および1は自己複製を実行し、自身からデータを受信する(たとえば、宛先レーン0のソースレーンはソースレーン0であり、宛先レーン1のソースレーンはソースレーン1である)。図4Rでは、オフセットが3であるので、各宛先レーンは3レーン右のソースレーンからデータを受信する。宛先レーン0、1、および2では、3レーン右のソースレーンはない。ラップアラウンドがないので、宛先レーン0、1、および2は自己複製を実行し、自身からデータを受信する(たとえば、宛先レーン0のソースレーンはソースレーン0であり、宛先レーン1のソースレーンはソースレーン1であり、宛先レーン2のソースレーンはソースレーン2である)。
【０１３７】
図4M〜図4Rではラップアラウンドがないが、シャッフラー回路14は、シャッフル動作の完了を可能にするために必要に応じてデータを内部的にラップアラウンドできることを理解されたい。shuffle up/downでは、ラップアラウンドはないが、代わりに、ソースレーンが無効である(たとえば、範囲外のレーンである)場合に自己複製がある。shuffle.xor(XORモード)およびshuffle.idx(インデックスまたはブロードキャスティングモード)では、範囲外の場合はない。しかしながら、XORモードに対して非アクティブなレーンがある場合、シャッフラー回路14は自己複製を実行する。ブロードキャストモードおよびXORシャッフルモードでは、ラップアラウンドはない。shuffle rotate-down/upでは、範囲外の場合のラップアラウンドはない。
【０１３８】
以下は、図4A〜図4Rに示される例を実施するための疑似コードである。疑似コードは、本開示において説明される技法のいくつかの例を実行するように、GPU12またはシャッフラー回路14によって実行可能であり得るコードを表す。例として、この疑似コードは、シャッフラー回路14が実行することになるシャッフル動作を呼び出す、GPU12上で実行されるシェーダアプリケーションの一部であり得る。疑似コードにおけるシンタックスは、shfl.md[.w][.dt] dst, src0, src1である。また、以下では、処理レーンと同義である「ファイバー」という用語を使用する。
【０１３９】
ウェーブ内でファイバー間でデータを交換するために。データがソースファイバーの中のsrc0 GPRから実行中のファイバーの中のdst GPRに複製される。ソースファイバーは、シャッフルモード(md)に従ってソースファイバーオフセット(src1)から計算される。
md:       shuffle mode = [idx|xor|up|down|rup|rdown]
rup/downはrotate-up/rotate-downを表す
[dt]:     data type = [u16|u32];   //デフォルトではu32
shflは実際のデータ型を気にしない。16ビットか32ビットかを区別するだけである。
すべての16/32ビットのデータ型がu16/u32として扱われる。型のキャスティングは不要である。
[w]:      width = [w4|w8].
wが指定される場合、4個または8個のファイバーのグループ内のシャッフル。
wが指定されない場合、ウェーブ全体(width = wave_size)内でのシャッフル。
「width>offset」がコンパイラまたはアセンブラによって保証されなければならない。
dst:      データを保持すべき宛先GPR
src0:     データを保持すべきソースGPR
src1:     ソースファイバーオフセットこの値はウェーブごとに均一でなければならない。
直接の数字(IMM)またはGPR IDであり得る。
IMMの場合:
32というウェーブサイズに対して0〜31の範囲の5ビットの数である。
64というウェーブサイズに対して0〜63の範囲の6ビットの数である。
128というウェーブサイズに対して0〜127の範囲の7ビットの数である。
GPR IDの場合:
uGPRが好まれる
GPRが使用される場合、すべてのファイバーの中のこのGPRの値は同じでなければならない。
64というウェーブサイズに対するHW論理の記述。
input [1:0] mode = md;      //シャッフルモード
input [5:0] offset = src1; //ソースファイバーIDまたはファイバーIDオフセット(0..63)
input [7:0] src = src0;    //ソースレジスタアドレス
input [7:0] dst = dst;     //宛先レジスタアドレス
input isActive [0:63] = get_active_mask();
wire [5:0] srcFid;
wire [31:0] srcData [0:63];
wire srcValid [0:63];
wire srcInRange [0:63];
input [5:0] Fid = get_fiber_id();
input [5:0] minFid = 0;
input [5:0] maxFid = get_wave_size() - 1;
if(width is defined) {
minFid = Fid & 〜 (width-1);
maxFid = minFid | (width-1);
}
//(1)そのファイバーがアクティブである場合ソースレジスタから値を読み出す
if (isActive[Fid] ) {
srcData[Fid] = GPR[Fid][src];
srcValid[Fid] = 1;
} else {
srcData[Fid] = xxx;    //古い状態値
srcValid[Fid] = 0;
}
//(2)シャッフル  -  ソースファイバーIDを計算してそれが範囲の中にあるかどうかを見分ける
switch (mode) {
case .idx:                 srcFid = offset;
srcInRange = (minFid <=srcFid <= maxFid);   break;
case .xor:                 srcFid = Fid ^ offset;
srcInRange = 1;   break;
srcInRange = (srcFid <= maxFid);   break;
case .up:                  srcFid = Fid - offset;
srcInRange = (srcFid >= minFid);   break;
case .down:             srcFid = Fid + offset;
srcInRange = (srcFid <= maxFid);   break;
case .rotate-up:       srcFid = minFid | (Fid - offset) & (width-1);
srcInRange = 1;   break;
case .rotate-down:  srcFid = minFid | (Fid + offset) & (width-1);
srcInRange = 1;   break;
}
//(3)アクティブなファイバーに対してデータを宛先GPRに書き込む
if(isActive(Fid)) {
//ソースファイバーからのデータを、それが範囲の中にありアクティブである場合に複製する
if (srcInRange[Fid] && srcValid[srcFid])
GPR[Fid][dst] = srcData [srcFid];
//それ以外の場合、自分自身のファイバーから複製する
else
GPR[Fid][dst] = GPR[Fid][src];
}
【０１４０】
図5は、シャッフル命令とともに使用される動作を示す概念図である。シャッフル命令は、OpenGL APIなどの特定のAPIに準拠し得る。シャッフル命令の一例は、shuffle.mode.datatype rDest rSrc laneOffsetである。この例では、shuffle.mode.datatypeは、shuffle upが実行されるか、shuffle downが実行されるか、shuffle broadcastが実行されるか、またはshuffle XORが実行されるかを示し、datatype(datawidthとも呼ばれる)は、データが16ビットであるかまたは32ビットであるかを示す。シャッフラー回路14は、少数のバイトではなく各処理レーンのスカラー値またはベクトル値全体を、受信し、並べ替え、出力することができる。rDestは、データが記憶されるべき対応する処理レーンの宛先レジスタを示し、rSrcは、データがそこから取り出される対応する処理レーンのソースレジスタを示す。laneOffsetはオフセットを示す。
【０１４１】
ある例として、プログラムの中のシャッフル命令がGPU12によって実行されることに応答して、GPU12は、shfl.bfly.b32 Ry, Rx, 0x4などのシャッフル命令の演算を実行することができる。この例では、処理レーンはXORシャッフルを実行することになり、ここで、ソース処理レーンのRxレジスタからの値は、4に等しいオフセットを用いて宛先処理レーンのRyレジスタに記憶される。この動作は、shuffle XORオフセット=4である図5に示されている。対角方向の太い矢印が処理を強調するために使用される矢印であり、対角方向の破線の矢印が、処理が他の処理レーンに対しても行われていることを示すために使用されている。この例では、ソース処理レーンのRxレジスタからの値は、宛先処理レーンのRyレジスタに出力される。これは、下方を指す真っ直ぐな矢印で図5において示されているように、各処理レーンに対するRxレジスタに記憶されている値がまだ利用可能であることを意味する。太い直線の矢印が処理を強調しており、破線の真っ直ぐな矢印が、処理が他の処理レーンに対しても行われていることを示すために使用されている。
【０１４２】
処理レーンのALUは次いで、add.f32 Rx, Ry, Rxという演算を実行することができる。この例では、処理レーンのALUは各々、それぞれのRxレジスタの中の値をそれぞれのRyレジスタからの値と加算し、結果をそれぞれのRxレジスタに記憶する。Ryレジスタの中の値は別の処理レーンのRxレジスタから来るので、加算演算は、各ALUが2つの処理レーンからのデータ値を加算するものと見なされ得る。
【０１４３】
次に、各処理レーンは、shfl.bfly.b32 Ry, Rx, 0x2という演算を実行し得る。上と同様に、この例では、処理レーンはXORシャッフルを実行することになり、ここで、ソース処理レーンのRxレジスタからの値は、宛先処理レーンのRyレジスタへ、ただし2に等しいオフセットを用いて記憶される。この動作は、shuffle XORオフセット=2である図5に示されている。処理レーンのALUは次いで、add.f32 Rx, Ry, Rxという演算を実行することができる。この例では、処理レーンのALUは各々、それぞれのRxレジスタの中の値をそれぞれのRyレジスタからの値と加算し、結果をそれぞれのRxレジスタに記憶する。この例では、Ryレジスタは、演算の実行の前に、2つの処理レーンとRxレジスタの合計の値を記憶し、2つの処理レーンの合計の値を記憶する。したがって、加算命令の実行の後に、それぞれのRxレジスタに記憶されている得られた値は、4つの処理レーンの合計である(やはり、この処理は各処理レーンにおいて行われている)。
【０１４４】
各処理レーンは次いで、shfl.bfly.b32 Ry, Rx, 0x1という演算を実行し得る。上と同様に、この例では、処理レーンはXORシャッフルを実行することになり、ここで、ソース処理レーンのRxレジスタからの値は、宛先処理レーンのRyレジスタへ、ただし1に等しいオフセットを用いて記憶される。この動作は、shuffle XORオフセット=1である図5に示されている。処理レーンのALUは次いで、add.f32 Rx, Ry, Rxという演算を実行することができる。この例では、処理レーンのALUは各々、それぞれのRxレジスタの中の値をそれぞれのRyレジスタからの値と加算し、結果をそれぞれのRxレジスタに記憶する。この例では、Ryレジスタは、演算の実行の前に、4つの処理レーンとRxレジスタの合計の値を記憶し、4つの処理レーンの合計の値を記憶する。したがって、加算命令の実行の後に、それぞれのRxレジスタに記憶されている得られた値は、8つの処理レーンの合計である(やはり、この処理は各処理レーンにおいて行われている)。
【０１４５】
最終的に、処理レーンの各々のRxレジスタの各々が、処理レーンの各々からのデータの合計を示す同じ値を記憶し得る。この例では、シャッフル動作はすべての処理レーンにわたるデータの加算を可能にし得る。本開示において説明される技法によれば、シャッフラー回路14は、高価な全レーン対全レーンクロスバーを必要とすることなく、代わりに、シャッフラー回路14内のはるかに小さいクロスバー(たとえば、8x8のクロスバー)でこの加算を可能にするように、このシャッフルを支援し得る。
【０１４６】
以下は、図5に示される例を実行するための疑似コードである。
使用例:
//32ファイバーの32ビットのXORリダクション
shfl.xor.u32 Ry, Rx, 16;
(ss) add.f32 Rx, Ry, Rx;
shfl.xor.u32 Ry, Rx, 8;
(ss) add.f32 Rx, Ry, Rx;
shfl.xor.u32 Ry, Rx, 4;
(ss) add.f32 Rx, Ry, Rx;
shfl.xor.u32 Ry, Rx, 2;
(ss) add.f32 Rx, Ry, Rx;
shfl.xor.u32 Ry, Rx, 1;
(ss) add.f32 Rx, Ry, Rx;
//これですべてのファイバーがRxに合計を保持する
【０１４７】
図6は、データを処理する例示的な方法を示すフローチャートである。たとえば、図6は、シャッフル動作を実行するための例を示す。コントローラ回路38は、シャッフラー回路14の入力ポートをバンクのそれぞれの処理レーンに結合するようにMUX48を構成する(60)。このようにして、シャッフラー回路14は、一例として処理レーンのソースサブセットからデータを受信し得る(62)。たとえば、シャッフラー回路14は、1つだけのバンクからデータを受信し得る。
【０１４８】
シャッフラー回路14は、処理レーンの少なくともいくつか(たとえば、処理レーンの各々または処理レーンのサブセット)に、データを処理レーンの別のものへ出力するように命令する命令に応答して(たとえば、シャッフル命令に応答して)、バンクの処理レーンから受信されたデータを並べ替え得る(64)。たとえば、制御回路38は、オフセットに基づいて、複数のバンクのうちの1つのバンク識別情報と、決定されたバンク識別情報を有するバンクについての処理レーンのレーン識別情報とを決定し得る。コントローラ回路38は、シャッフラー回路14の第1の入力ポートが、決定されたバンクの中の決定されたレーン識別情報を有する処理レーンに出力するシャッフラー回路14の出力ポートに出力するように、シャッフラー回路14のスイッチを相互接続させ得る。コントローラ回路38は、シャッフラー回路14の中の入力ポートまたは出力ポートの数でオフセットを割ることができる。剰余およびシャッフルモードは、入力ポート上のデータをどのように右または左にシフトするかをコントローラ回路38に示すことができる。コントローラ回路38は、シャッフラー回路14のスイッチに、剰余の数のポートの分だけ離れた出力ポートへ入力ポートを相互接続させる(たとえば、剰余が3である場合、第1の入力ポートは第4の出力ポートに出力する)。
【０１４９】
DEMUX54は、シャッフラー回路14からの並べ替えられた出力をバンクの各々にブロードキャストする(66)。このようにして、シャッフラー回路14は、並べ替えられたデータを処理レーンに出力する。しかしながら、処理レーンのすべてが受信されたデータを記憶するとは限らない。たとえば、処理レーンの宛先サブセット(たとえば、すべての処理レーン未満)が、並べ替えられたデータを対応するレジスタに記憶し得る。いくつかの例では、コントローラ回路38は、処理レーンの宛先サブセットの対応するレジスタが、並べ替えられたデータを記憶することを可能に得る。コントローラ回路38は、処理レーンのどの対応するGPRに、オフセットとシャッフラー回路14の第1の入力ポートからの出力を受信する処理レーンのレーン識別情報とに基づく記憶を許容するかを、決定し得る。
【０１５０】
コントローラ回路38およびシャッフラー回路14は、シャッフル動作が完了するまでこれらの動作を繰り返し得る。たとえば、シャッフラー回路14は、処理レーンの連続するソースサブセットからデータを受信し得る(たとえば、MUX48は、シャッフラー回路14の入力に連続するバンクの処理レーンを結合し得る)。シャッフラー回路14は、連続するソースサブセットから受信されたデータを並べ替えることができる(たとえば、シャッフラー回路14のポートの数でオフセットを割ったときの剰余に基づいて、入力ポート上のデータを出力ポートにシフトする)。シャッフラー回路14は、並べ替えられたデータを処理レーンに出力することができ、処理レーンの連続する宛先サブセットは、受信された並べ替えられたデータを対応するレジスタに記憶する。
【０１５１】
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せとして実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されてよく、ハードウェアベースの処理装置によって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に相当するコンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、非一時的である有形コンピュータ可読記憶媒体に相当し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コード、および/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
【０１５２】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を備え得る。コンピュータ可読記憶媒体およびデータ記憶媒体は、搬送波、信号、または他の一時的媒体を含まないが、代わりに、非一時的な有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【０１５３】
命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の等価な集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書において使用される「プロセッサ」という用語は、上記の構造、または本明細書において説明される技法の実装に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書において説明される機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で与えられることがあり、または複合コーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素で全体的に実装され得る。
【０１５４】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置に実装され得る。開示される技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示で説明されるが、それらは必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わせられてよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つまたは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてよい。
【０１５５】
様々な例が説明された。これらおよび他の例は、以下の特許請求の範囲内に入る。
【符号の説明】
【０１５６】
10  コンピューティングデバイス
12  GPU
14  シャッフラー回路
16  CPU
20  ローカルメモリ
22  ユーザインターフェース
24  メモリコントローラ
26  ディスプレイインターフェース
28  ディスプレイ
30  システムメモリ
32  システムバス
38  コントローラ回路
42  PL
44  ALU
46  バンク
48  MUX
50  入力インターフェース
52  出力インターフェース
54  DEMUX
56  GPRF
【図１】
2019521445.tif 000003
【図２】
2019521445.tif 000004
【図３】
2019521445.tif 000005
【図４Ａ】
2019521445.tif 000006
【図４Ｂ】
2019521445.tif 000007
【図４Ｃ】
2019521445.tif 000008
【図４Ｄ】
2019521445.tif 000009
【図４Ｅ】
2019521445.tif 000010
【図４Ｆ】
2019521445.tif 000011
【図４Ｇ】
2019521445.tif 000012
【図４Ｈ】
2019521445.tif 000013
【図４Ｉ】
2019521445.tif 000014
【図４Ｊ】
2019521445.tif 000015
【図４Ｋ】
2019521445.tif 000016
【図４Ｌ】
2019521445.tif 000017
【図４Ｍ】
2019521445.tif 000018
【図４Ｎ】
2019521445.tif 000019
【図４Ｏ】
2019521445.tif 000020
【図４Ｐ】
2019521445.tif 000021
【図４Ｑ】
2019521445.tif 000022
【図４Ｒ】
2019521445.tif 000023
【図５】
2019521445.tif 000024
【図６】
2019521445.tif 000025
【手続補正書】
【提出日】平成31年1月16日(2019.1.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを処理するためのデバイスであって、
複数の処理レーンであって、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、処理レーンと、
前記処理レーンのソースサブセットからデータを受信し、
前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替え、
前記処理レーンのすべてにそれぞれ前記並べ替えられたデータを出力し、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する
ように構成される、シャッフラー回路とを備える、デバイス。
【請求項２】
前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容するように構成される、コントローラ回路をさらに備える、請求項1に記載のデバイス。
【請求項３】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、前記コントローラ回路が、オフセットに基づいて、前記複数のバンクのうちの1つのバンク識別情報と、前記バンクのうちの1つの中の処理レーンのレーン識別情報とを決定するように構成され、前記バンクのうちの1つが、前記決定されたバンク識別情報を有し、前記コントローラ回路が、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記決定されたバンク識別情報およびレーン識別情報に基づいて前記並べ替えられたデータを記憶することを許容するように構成される、請求項2に記載のデバイス。
【請求項４】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、前記ソースサブセットからデータを受信するために、前記シャッフラー回路が1つだけのバンクからデータを受信するように構成され、前記並べ替えられたデータを出力するために、前記シャッフラー回路が出力する前記並べ替えられたデータが前記バンクの各々に出力される、請求項1に記載のデバイス。
【請求項５】
前記シャッフラー回路が、前記命令によって定義されるオフセットに基づいて前記データを並べ替えるように構成される、請求項1に記載のデバイス。
【請求項６】
前記シャッフラー回路が、
前記処理レーンの連続するソースサブセットからデータを受信し、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの各々に命令する前記命令に応答して、前記処理レーンの前記連続するソースサブセットから受信された前記データを並べ替え、
前記並べ替えられたデータを前記処理レーンに出力するように構成され、前記処理レーンの連続する宛先サブセットが、前記並べ替えられたデータを対応するレジスタに記憶する、請求項1に記載のデバイス。
【請求項７】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
前記バンクの各々および前記シャッフラー回路の入力インターフェースに結合されたマルチプレクサと、
前記マルチプレクサを介して、前記処理レーンの前記ソースサブセットを含む前記複数のバンクのうちのあるバンクを前記シャッフラー回路へ選択的に結合するように構成されるコントローラ回路と、
前記バンクの各々および前記シャッフラーの出力インターフェースに結合されるデマルチプレクサとをさらに備え、前記デマルチプレクサが前記並べ替えられたデータを前記バンクにブロードキャストするように構成される、請求項1に記載のデバイス。
【請求項８】
データを受信するために、前記シャッフラー回路が、処理レーンの前記ソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値を受信するように構成され、データを並べ替えるために、前記シャッフラー回路が、処理レーンの前記ソースサブセットの各処理レーンから受信された前記全体のスカラー値またはベクトル値を並べ替えるように構成され、前記並べ替えられたデータを出力するために、前記シャッフラー回路が、前記並べ替えられたデータの前記全体のスカラー値またはベクトル値を前記処理レーンに出力するように構成される、請求項1に記載のデバイス。
【請求項９】
グラフィクス処理装置(GPU)をさらに備え、前記GPUが前記複数の処理レーンを備える、請求項1に記載のデバイス。
【請求項１０】
集積回路、
マイクロプロセッサ、または
ワイヤレス通信デバイスのうちの1つを備える、請求項1に記載のデバイス。
【請求項１１】
データを処理する方法であって、
シャッフラー回路を用いて、複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信するステップであって、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、ステップと、
前記シャッフラー回路を用いて、前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替えるステップと、
前記シャッフラー回路を用いて、前記処理レーンのすべてにそれぞれ前記並べ替えられたデータを出力するステップとを備え、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する、方法。
【請求項１２】
コントローラ回路を用いて、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容するステップをさらに備える、請求項11に記載の方法。
【請求項１３】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
制御回路を用いて、オフセットに基づいて、前記複数のバンクのうちの1つのバンク識別情報と、前記バンクのうちの1つの中の処理レーンのレーン識別情報とを決定するステップであって、前記バンクのうちの1つが、前記決定されたバンク識別情報を有する、ステップとをさらに備え、
前記対応するレジスタが記憶することを許容するステップが、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記決定されたバンク識別情報およびレーン識別情報に基づいて前記並べ替えられたデータを記憶することを許容するステップを備える、請求項12に記載の方法。
【請求項１４】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
前記ソースサブセットからデータを受信するステップが1つだけのバンクからデータを受信するステップを備え、
前記並べ替えられたデータを出力するステップが前記バンクの各々に出力するステップを備える、請求項11に記載の方法。
【請求項１５】
並べ替えるステップが、前記命令によって定義されるオフセットに基づいて前記データを並べ替えるステップを備える、請求項11に記載の方法。
【請求項１６】
前記処理レーンの連続するソースサブセットからデータを受信するステップと、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの各々に命令する前記命令に応答して、前記処理レーンの前記連続するソースサブセットから受信された前記データを並べ替えるステップと、
前記並べ替えられたデータを前記処理レーンに出力するステップとをさらに備え、前記処理レーンの連続する宛先サブセットが、前記並べ替えられたデータを対応するレジスタに記憶する、請求項11に記載の方法。
【請求項１７】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
マルチプレクサを介して、前記処理レーンの前記ソースサブセットを含む前記複数のバンクのうちのあるバンクを前記シャッフラー回路へ選択的に結合するステップと、
デマルチプレクサを介して前記並べ替えられたデータを前記バンクにブロードキャストするステップとをさらに備える、請求項11に記載の方法。
【請求項１８】
データを受信するステップが、処理レーンの前記ソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値を受信するステップを備え、
前記データを並べ替えるステップが、処理レーンの前記ソースサブセットの各処理レーンから受信された前記全体のスカラー値またはベクトル値を並べ替えるステップを備え、
前記並べ替えられたデータを出力するステップが、前記並べ替えられたデータの前記全体のスカラー値またはベクトル値を前記処理レーンに出力するステップを備える、請求項11に記載の方法。
【請求項１９】
データを処理するためのデバイスであって、
複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信するための手段であって、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成される、手段と、
前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替えるための手段と、
前記処理レーンのすべてにそれぞれ前記並べ替えられたデータを出力するための手段であって、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する、手段とを備える、デバイス。
【請求項２０】
前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容するための手段をさらに備える、請求項19に記載のデバイス。
【請求項２１】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
オフセットに基づいて、前記複数のバンクのうちの1つのバンク識別情報と、前記バンクのうちの1つの中の処理レーンのレーン識別情報とを決定するための手段であって、前記バンクのうちの1つが、前記決定されたバンク識別情報を有する、手段をさらに備え、
前記対応するレジスタが記憶することを許容するための前記手段が、前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記決定されたバンク識別情報およびレーン識別情報に基づいて前記並べ替えられたデータを記憶することを許容するための手段を備える、請求項20に記載のデバイス。
【請求項２２】
前記処理レーンが複数のバンクへとグループ化され、前記複数のバンクの各バンクが前記複数の処理レーンの1つまたは複数の処理レーンを備え、
前記ソースサブセットからデータを受信するための前記手段が1つだけのバンクからデータを受信するための手段を備え、
前記並べ替えられたデータを出力するための前記手段が前記バンクの各々に出力するための手段を備える、請求項19に記載のデバイス。
【請求項２３】
並べ替えるための前記手段が、前記命令によって定義されるオフセットに基づいて前記データを並べ替えるための手段を備える、請求項19に記載のデバイス。
【請求項２４】
前記処理レーンの連続するソースサブセットからデータを受信するための手段と、
データを前記処理レーンの別の1つへ出力するように前記処理レーンの各々に命令する前記命令に応答して、前記処理レーンの前記連続するソースサブセットから受信された前記データを並べ替えるための手段と、
前記並べ替えられたデータを前記処理レーンに出力するための手段とをさらに備え、前記処理レーンの連続する宛先サブセットが、前記並べ替えられたデータを対応するレジスタに記憶する、請求項19に記載のデバイス。
【請求項２５】
データを受信するための前記手段が、処理レーンの前記ソースサブセットの各処理レーンに対する全体のスカラー値またはベクトル値を受信するための手段を備え、
前記データを並べ替えるための前記手段が、処理レーンの前記ソースサブセットの各処理レーンから受信された前記全体のスカラー値またはベクトル値を並べ替えるための手段を備え、
前記並べ替えられたデータを出力するための前記手段が、前記並べ替えられたデータの前記全体のスカラー値またはベクトル値を前記処理レーンに出力するための手段を備える、請求項19に記載のデバイス。
【請求項２６】
グラフィクス処理装置(GPU)をさらに備え、前記GPUが前記複数の処理レーンを備える、請求項19に記載のデバイス。
【請求項２７】
前記デバイスが、
集積回路、
マイクロプロセッサ、または
ワイヤレス通信デバイスのうちの1つを備える、請求項19に記載のデバイス。
【請求項２８】
実行されると、データを処理するためのデバイスの1つまたは複数の回路に、
複数の処理レーンのうちの処理レーンのソースサブセットからデータを受信させ、前記処理レーンの各々が前記データを処理するための回路を備え、前記処理レーンが、シングル・インストラクション・マルチプル・データ(SIMD)構造で構成され、
前記処理レーンの別の1つへデータを出力するように前記処理レーンの少なくともいくつかに命令する命令に応答して、前記処理レーンの前記ソースサブセットから受信された前記データを並べ替えさせ、
前記処理レーンのすべてへそれぞれ前記並べ替えられたデータを出力させ、前記処理レーンの宛先サブセットが対応するレジスタに前記並べ替えられたデータを記憶し、前記処理レーンの前記宛先サブセット以外の前記処理レーンが前記受信された並べ替えられたデータを廃棄する
命令を備える、コンピュータ可読記憶媒体。
【請求項２９】
前記1つまたは複数の回路に、
前記処理レーンの前記宛先サブセットの前記対応するレジスタが前記並べ替えられたデータを記憶することを許容させる命令をさらに備える、請求項28に記載のコンピュータ可読記憶媒体。
【国際調査報告】
2019521445.tif 000026
2019521445.tif 000027