(57)【要約】  画像データを複数の画像サンプルストリームにフォーマットするための例示的なプリプロセッサ回路は、画像データ（８０２）の複数行（８１４）を記憶し、複数行のうちのある行を出力するように構成された第１のバッファ（７０５）と、第１のバッファ（７０５）に連結され、第１のバッファ（７０５）によって出力された行（８１４）に対応する複数の画像サンプルを記憶するための複数の記憶位置（７０９）を含む第２のバッファ（７０８）と、複数のシフトレジスタ（７１２）と、複数の接続（７１８）を含む相互接続ネットワーク（７１０）とを含み、各接続（７１８）は、複数のシフトレジスタ（７１２）の各シフトレジスタを複数の記憶位置（７０９）のうち２つ以上の記憶位置に連結し、複数の記憶位置（７０９）のうち１つ以上の記憶位置は、複数の接続（７１８）のうち２つ以上の接続に連結され、複数の接続（７１８）に基づいて複数の画像サンプルを複数のシフトレジスタ（７１２）にロード（１６０８）し、複数のシフトレジスタ（７１２）をシフト（１６１６）することによって、複数の画像サンプルストリームを出力するように構成された制御回路（７１４）とを含む。
2020537788.tif 000002
【特許請求の範囲】
【請求項１】
画像データを複数の画像サンプルストリームにフォーマットするためのプリプロセッサ回路であって、
前記画像データの複数行を記憶し、前記複数行のうちのある行を出力するように構成された第１のバッファと、
前記第１のバッファに連結され、前記第１のバッファによって出力された前記行に対応する複数の画像サンプルを記憶するための複数の記憶位置を含む第２のバッファと、
複数のシフトレジスタと、
複数の接続を含む相互接続ネットワークとを含み、各接続は、前記複数のシフトレジスタの各シフトレジスタを前記複数の記憶位置のうち２つ以上の記憶位置に連結し、前記複数の記憶位置のうち１つ以上の記憶位置は、前記複数の接続のうち２つ以上の接続に連結され、
前記複数の接続に基づいて前記複数の画像サンプルを前記複数のシフトレジスタにロードし、前記複数のシフトレジスタをシフトすることによって、前記複数の画像サンプルストリームを出力するように構成された制御回路とを含む、プリプロセッサ回路。
【請求項２】
前記複数の接続は、複数の第１の接続であり、
前記相互接続ネットワークは、複数のマルチプレクサを含み、
各マルチプレクサは、前記複数の第１の接続の各々に連結された第１の入力と、前記複数のシフトレジスタの各々に連結された出力とを含む、請求項１に記載のプリプロセッサ回路。
【請求項３】
前記相互接続ネットワークは、複数の第２の接続を含み、
前記第２の接続の各々は、前記複数の記憶位置のうち２つ以上の記憶位置を前記複数のマルチプレクサの各々の第２の入力に連結し、
前記複数の記憶位置のうち１つ以上の記憶位置は、前記複数の第２の接続のうち２つ以上に連結されている、請求項２に記載のプリプロセッサ回路。
【請求項４】
前記制御回路は、前記複数のマルチプレクサを制御して、前記複数の第１の接続または前記複数の第２の接続のうち１つの接続を選択するように、前記相互接続ネットワークのモードを設定するように構成されている、請求項３に記載のプリプロセッサ回路。
【請求項５】
各接続は、前記複数のシフトレジスタの各シフトレジスタを異なるパターンの前記複数の記憶位置に連結する、請求項１に記載のプリプロセッサ回路。
【請求項６】
前記複数の接続のうち第１の接続を介して前記複数のシフトレジスタのうち第１のシフトレジスタに連結された前記複数の記憶位置のパターンは、前記複数の接続のうち第２の接続を介して前記複数のシフトレジスタのうち第２のシフトレジスタに連結された前記複数の記憶位置のパターンと重複する、請求項５に記載のプリプロセッサ回路。
【請求項７】
前記異なるパターンの前記複数の記憶位置は、前記画像データとフィルタとの間の畳み込みパラメータによって定義され、
前記パラメータは、前記フィルタの幅、水平ストライド、および水平拡張を含む、請求項５に記載のプリプロセッサ回路。
【請求項８】
集積回路であって、
請求項１から７のいずれか１項に記載のプリプロセッサ回路を含み、
画像データを記憶するメモリにアクセスするように構成されたメモリコントローラと、
前記画像プリプロセッサに連結され、前記複数の画像サンプルストリームを処理するように構成されたプロセッサとをさらに含む、集積回路。
【請求項９】
前記プロセッサは、データ処理ユニットのシストリックアレイである、請求項８に記載の集積回路。
【請求項１０】
画像データを複数の画像サンプルストリームにフォーマットする方法であって、
前記画像データの複数行および前記複数行のうち出力された行を、第１のバッファに記憶することと、
前記第１のバッファによって出力された前記行に対応する複数の画像サンプルを、複数の記憶位置を有する第２のバッファに記憶することと、
相互接続ネットワークの複数の接続に基づいて、前記複数の画像サンプルを複数のシフトレジスタにロードすることとを含み、各接続は、前記複数のシフトレジスタの各シフトレジスタを前記複数の記憶位置のうち２つ以上の記憶位置に連結し、前記複数の記憶位置のうち１つ以上の記憶位置は、前記複数の接続のうち２つ以上の接続に連結され、
前記複数のシフトレジスタをシフトすることによって、前記複数の画像サンプルストリームを出力することを含む、方法。
【請求項１１】
各接続は、前記複数のシフトレジスタの各シフトレジスタを異なるパターンの前記複数の記憶位置に連結する、請求項１０に記載の方法。
【請求項１２】
前記異なるパターンの前記複数の記憶位置は、前記画像データとフィルタとの間の畳み込みパラメータによって定義され、
前記パラメータは、前記フィルタの幅、水平ストライド、および水平拡張を含む、請求項１１に記載の方法。
【請求項１３】
前記複数の接続は、複数の第１の接続であり、
前記相互接続ネットワークは、複数のマルチプレクサを含み、
各マルチプレクサは、前記複数の第１の接続の各々に連結された第１の入力と、前記複数のシフトレジスタの各々に連結された出力とを含む、請求項１０に記載の方法。
【請求項１４】
前記相互接続ネットワークは、複数の第２の接続を含み、
前記第２の接続の各々は、前記複数の記憶位置のうち２つ以上の記憶位置を前記複数のマルチプレクサの各々の第２の入力に連結し、
前記複数の記憶位置のうち１つ以上の記憶位置は、前記複数の第２の接続のうち２つ以上に連結されている、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本開示の実施例は、一般的に、コンピューティングシステムおよび電子回路に関し、特に、汎用化画像処理の画像前処理に関する。
【背景技術】
【０００２】
背景
機械学習は、明示的にプログラムすることなく、コンピューティングシステムを動作させる科学である。従来の機械学習は、様々なクラスタリングおよび分類技術、例えば、Ｋ平均法、線形およびロジスティック回帰、確率勾配降下法、相関ルール学習法を含む。深層学習は、機械学習の新しい分野である。深層学習は、非線形処理ユニットの複数の層を用いて、特徴の抽出および変換を実行するための機械学習アルゴリズムである。深層学習アルゴリズムは、監視なし学習アルゴリズム（例えば、パターン分析）であってもよく、または監視あり学習アルゴリズム（例えば、分類）であってもよい。深層学習アルゴリズムは、人工ニューラルネットワーク（ＡＮＮ）（以下、「ニューラルネットワーク」と呼ぶ）の層を用いて実装することができる。
【０００３】
一般的に、ニューラルネットワークは、図形に連結されたノード（「ニューロン」）の集合である。ニューラルネットワーク内のノードは、重み付き入力の合計を計算し、必要に応じて合計にバイアスを加える。ノードの出力は、最終的な合計の関数（「活性化関数」と呼ばれる）である。活性化関数の例は、シグモイド関数、双曲線正接（ｔａｎｈ）関数、正規化線形ユニット（ＲｅＬＵ）関数、および恒等関数を含む。多くの場合、ニューラルネットワークモデルは、特定のトポロジーを定義するノードの層、対応する重みおよびバイアスに編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
【０００４】
一般的に、ニューラルネットワークは、入力層と出力層とを含み、必要に応じて入力層と出力層との間に１つ以上の隠れ層を含むことができる。深層学習アプリケーションに使用されるニューラルネットワークは、通常多くの隠れ層を含むため、深層ニューラルネットワーク（ＤＮＮ）と呼ばれる。ニューラルネットワークの層は、高密度に接続されてもよく（例えば、一層の各ノードは、前の層の全てのノードに接続されている）、低密度に接続されてもよい（例えば、一層の各ノードは、前の層の一部のノードのみに接続されている）。畳み込みニューラルネットワーク（ＣＮＮ）とは、畳み込み層と呼ばれる低密度に接続された１つ以上の層を含むＤＮＮの一種である。ＣＮＮは、画像またはビデオデータの処理に適している。他の種類のＤＮＮは、音声およびテキストデータの処理に適したリカレントニューラルネットワーク（ＲＮＮ）を含む。
【０００５】
畳み込み演算は、いくつかの手法を使用して実行することができ、通常、大量のデジタルシグナルプロセッサ（ＤＳＰ）を使用すること、オンチップバッファを必要とすることおよび／またはデータアクセスパターンによって制限される。１つの例示的な畳み込み手法は、ＤＳＰアレイに供給するサンプルのシフトレジスタを作成する。この手法は、畳み込みウィンドウが入力画像の列と行をスキップするため、ストライドまたは拡張された畳み込みを使用できないという点で制限されている。これは、サンプルを順番に循環するように使用されたシフトレジスタと、入力画像のサンプルをスキップまたはジャンプするストライド（stride）または拡張（dilation）との間の競合が原因である。したがって、汎用化畳み込みを並列に計算するための改良アーキテクチャを提供することが望ましい。
【発明の概要】
【課題を解決するための手段】
【０００６】
概要
画像の前処理手法を説明する。一例において、画像データを複数の画像サンプルストリームにフォーマットするためのプリプロセッサ回路は、画像データの複数行を記憶し、複数行のうちのある行を出力するように構成された第１のバッファと、第１のバッファに連結され、第１のバッファによって出力された行に対応する複数の画像サンプルを記憶するための複数の記憶位置を含む第２のバッファと、複数のシフトレジスタと、複数の接続を含む相互接続ネットワークとを含み、各接続は、複数のシフトレジスタの各シフトレジスタを複数の記憶位置のうち２つ以上の記憶位置に連結し、複数の記憶位置のうち１つ以上の記憶位置は、複数の接続のうち２つ以上の接続に連結され、複数の接続に基づいて複数の画像サンプルを複数のシフトレジスタにロードし、複数のシフトレジスタをシフトすることによって、複数の画像サンプルストリームを出力するように構成された制御回路とを含む。
【０００７】
いくつかの実施形態において、複数の接続は、複数の第１の接続であってもよい。相互接続ネットワークは、複数のマルチプレクサを含んでもよい。各マルチプレクサは、複数の第１の接続の各々に連結された第１の入力と、複数のシフトレジスタの各々に連結された出力とを含んでもよい。
【０００８】
いくつかの実施形態において、相互接続ネットワークは、複数の第２の接続を含んでもよい。第２の接続の各々は、複数の記憶位置のうち２つ以上の記憶位置を複数のマルチプレクサの各々の第２の入力に連結することができる。複数の記憶位置のうち１つ以上の記憶位置は、複数の第２の接続のうち２つ以上に連結されることができる。
【０００９】
いくつかの実施形態において、制御回路は、複数のマルチプレクサを制御して、複数の第１の接続または複数の第２の接続のうち１つの接続を選択するように、相互接続ネットワークのモードを設定するように構成されてもよい。
【００１０】
いくつかの実施形態において、各接続は、複数のシフトレジスタの各シフトレジスタを異なるパターンの複数の記憶位置に連結することができる。
【００１１】
いくつかの実施形態において、複数の接続のうち第１の接続を介して複数のシフトレジスタのうち第１のシフトレジスタに連結された複数の記憶位置のパターンは、複数の接続のうち第２の接続を介して複数のシフトレジスタのうち第２のシフトレジスタに連結された複数の記憶位置のパターンと重複することができる。
【００１２】
いくつかの実施形態において、異なるパターンの複数の記憶位置は、画像データとフィルタとの間の畳み込みパラメータによって定義されてもよく、パラメータは、フィルタの幅、水平ストライド（stride）、および水平拡張（dilation）を含んでもよい。
【００１３】
別の例において、集積回路（ＩＣ）は、画像データを記憶するメモリにアクセスするように構成されたメモリコントローラと、メモリコントローラに連結され、画像データを取得し、画像データから複数の画像サンプルストリームを生成するように構成された画像プリプロセッサと、画像プリプロセッサに連結され、複数の画像サンプルストリームを処理するように構成されたプロセッサとを含む。画像プリプロセッサは、画像データの複数行を記憶し、複数行のうちのある行を出力するように構成された第１のバッファと、第１のバッファに連結され、第１のバッファによって出力された行に対応する複数の画像サンプルを記憶するための複数の記憶位置を含む第２のバッファと、複数のシフトレジスタと、複数の接続を含む相互接続ネットワークとを含み、各接続は、複数のシフトレジスタの各シフトレジスタを複数の記憶位置のうち２つ以上の記憶位置に連結し、複数の記憶位置のうち１つ以上の記憶位置は、複数の接続のうち２つ以上の接続に連結され、複数の接続に基づいて複数の画像サンプルを複数のシフトレジスタにロードし、複数のシフトレジスタをシフトすることによって、複数の画像サンプルストリームを出力するように構成された制御回路とを含む。
【００１４】
いくつかの実施形態において、複数の接続は、複数の第１の接続であってもよい。相互接続ネットワークは、複数のマルチプレクサを含んでもよい。各マルチプレクサは、複数の第１の接続の各々に連結された第１の入力と、複数のシフトレジスタの各々に連結された出力とを含んでもよい。
【００１５】
いくつかの実施形態において、相互接続ネットワークは、複数の第２の接続を含んでもよい。第２の接続の各々は、複数の記憶位置のうち２つ以上の記憶位置を複数のマルチプレクサの各々の第２の入力に連結することができる。複数の記憶位置のうち１つ以上の記憶位置は、複数の第２の接続のうち２つ以上に連結されることができる。
【００１６】
いくつかの実施形態において、制御回路は、複数のマルチプレクサを制御して、複数の第１の接続または複数の第２の接続のうち１つの接続を選択するように、相互接続ネットワークのモードを設定するように構成されてもよい。
【００１７】
いくつかの実施形態において、各接続は、複数のシフトレジスタの各シフトレジスタを異なるパターンの複数の記憶位置に連結することができる。
【００１８】
いくつかの実施形態において、複数の接続のうち第１の接続を介して複数のシフトレジスタのうち第１のシフトレジスタに連結された複数の記憶位置のパターンは、複数の接続のうち第２の接続を介して複数のシフトレジスタのうち第２のシフトレジスタに連結された複数の記憶位置のパターンと重複することができる。
【００１９】
いくつかの実施形態において、異なるパターンの複数の記憶位置は、画像データとフィルタとの間の畳み込みパラメータによって定義されてもよく、パラメータは、フィルタの幅、水平ストライド、および水平拡張を含んでもよい。
【００２０】
一部の実施形態において、プロセッサは、データ処理ユニットのシストリックアレイであってもよい。
【００２１】
別の例において、画像データを複数の画像サンプルストリームにフォーマットする方法は、画像データの複数行および複数行のうち出力された行を、第１のバッファに記憶することと、第１のバッファによって出力された行に対応する複数の画像サンプルを、複数の記憶位置を有する第２のバッファに記憶することと、相互接続ネットワークの複数の接続に基づいて、複数の画像サンプルを複数のシフトレジスタにロードすることとを含み、各接続は、複数のシフトレジスタの各シフトレジスタを複数の記憶位置のうち２つ以上の記憶位置に連結し、複数の記憶位置のうち１つ以上の記憶位置は、複数の接続のうち２つ以上の接続に連結され、複数のシフトレジスタをシフトすることによって、複数の画像サンプルストリームを出力することを含む。
【００２２】
いくつかの実施形態において、各接続は、複数のシフトレジスタの各シフトレジスタを異なるパターンの複数の記憶位置に連結することができる。
【００２３】
いくつかの実施形態において、異なるパターンの複数の記憶位置は、画像データとフィルタとの間の畳み込みパラメータによって定義されてもよく、パラメータは、フィルタの幅、水平ストライド、および水平拡張を含んでもよい。
【００２４】
いくつかの実施形態において、複数の接続は、複数の第１の接続であってもよい。相互接続ネットワークは、複数のマルチプレクサを含んでもよい。各マルチプレクサは、複数の第１の接続の各々に連結された第１の入力と、複数のシフトレジスタの各々に連結された出力とを含んでもよい。
【００２５】
いくつかの実施形態において、相互接続ネットワークは、複数の第２の接続を含んでもよい。第２の接続の各々は、複数の記憶位置のうち２つ以上の記憶位置を複数のマルチプレクサの各々の第２の入力に連結することができる。複数の記憶位置のうち１つ以上の記憶位置は、複数の第２の接続のうち２つ以上に連結されることができる。
【００２６】
これらの態様および他の態様は、以下の詳細な説明を参照して理解することができる。
上記の特徴を詳細に理解できるように、添付の図面に示されているいくつかの実現例を参照することによって、上記の概要をより具体的に説明する。理解すべきことは、添付の図面は、典型的な実現例のみを示しており、本発明の範囲を限定するものと見なされるべきではないことである。
【図面の簡単な説明】
【００２７】
【図１】一例に従って、ニューラルネットワークを実装するためのシステムを示すブロック図である。
【図２】一例に従って、コンピューティングシステムを示すブロック図である。
【図３】一例に従って、加速回路を示すブロック図である。
【図４】一例に従って、プログラマブル集積回路（ＩＣ）を示すブロック図である。
【図５】一例に従って、プログラマブルＩＣのフィールドプログラマブルゲートアレイ（ＦＰＧＡ）の実装を示す図である。
【図６】一例に従って、畳み込みプロセッサを示すブロック図である。
【図７】一例に従って、画像プリプロセッサを示すブロック図である。
【図８Ａ】一例に従って、畳み込み演算用の入力画像データ、フィルタデータおよび出力画像データを示す図である。
【図８Ｂ】二次元行列乗算演算による畳み込みを示す図である。
【図９】一例に従って、図７の画像プリプロセッサを用いて、入力画像データを処理する方法を示す図である。
【図１０】一例に従って、図７の画像プリプロセッサをより詳細に示すブロック図である。
【図１１】例示的な入力画像および１組の受容フィールドを示す図である。
【図１２Ａ】一例に従って、相互接続ネットワークの構成を示すブロック図である。
【図１２Ｂ】図１２Ａの例に従って、行バッファとシフトレジスタとの間の接続のロジック構成を示すブロック図である。
【図１３】図１２Ａの例のシフトレジスタによって出力されたサンプルストリームを示す図である。
【図１４Ａ】別の例に従って、相互接続ネットワークの構成を示すブロック図である。
【図１４Ｂ】図１４Ａの例に従って、行バッファとシフトレジスタとの間の接続のロジック構成を示すブロック図である。
【図１５】別の例に従って、行バッファとシフトレジスタとの間の接続のロジック構成を示すブロック図である。
【図１６】一例に従って、図７の画像プリプロセッサの動作方法を示す流れ図である。
【図１７】一例に従って、図７の画像プリプロセッサを設計する方法を示す流れ図である。
【発明を実施するための形態】
【００２８】
詳細な説明
理解を容易にするために、可能な限り、同様の参照番号を用いて、図面に共通の同様の要素を示す。一例の要素を他の例に有利に組み込むことができる。
【００２９】
以下、図面を参照して様々な特徴を説明する。なお、図面は、縮尺通りに描かれている場合と描かれていない場合があり、図面全体を通して、同様の構造または機能を有する要素は、同様の参照番号で示されている。なお、図面は、特徴の説明を容易にすることのみに提供され、請求された発明の網羅的な説明としてまたは請求された発明の範囲に対する制限として意図されていない。また、図示された例は、示されている全ての態様または利点を含む必要がない。特定の例に関連して説明した態様または利点は、必ずしもその例に限定されず、限定するように図示されまたは明確に説明されていない場合、任意の他の例に実現することができる。
【００３０】
画像の前処理手法を説明する。画像プリプロセッサは、マルチプレクサ、バッファおよびシフトレジスタからなるアーキテクチャを含み、クロックサイクルごとに大量のデータサンプルを生成して、畳み込みなどの画像処理を実施することができる。このアーキテクチャは、入力画像データのストライドまたは拡張されたアクセスパターンをサポートする。このアーキテクチャは、畳み込みニューラルネットワーク（ＣＮＮ）の実装に特に有用である大きなシストリックアレイを用いて、畳み込みなどの画像処理を実施することができる。畳み込みのために、アーキテクチャは、入力画像を読み取るメモリレイテンシ（memory latency）と畳み込みサイズとのバランスを取ることによって、最大の効率、最小限のバッファおよび最小限のロジックレベルで畳み込みを実行し、メモリ帯域幅を削減する。このアーキテクチャは、最小の面積ペナルティで様々な畳み込みフィルタサイズをサポートすることができ、畳み込みフィルタサイズを動的に変更するＣＮＮに有利である。アーキテクチャのこれらの特徴およびさらなる特徴は、図面を参照して以下で説明される。
【００３１】
図１は、一例に従って、ニューラルネットワークを実装するためのシステム１００を示すブロック図である。システム１００は、コンピュータシステム１０２および１つ以上のコンピュータシステム１０８を含む。コンピュータシステム１０２は、１つ以上の設計ツール１０４を提供するためのソフトウェアを実行するように構成された従来のコンピューティングコンポーネントを含む。各コンピュータシステム１０８は、１つ以上のニューラルネットワーク１１０を実行する。ニューラルネットワーク１１０は、アプリケーション１１２、加速ライブラリ１１４、および１つ以上のハードウェアアクセラレータ１１６を用いて実装される。
【００３２】
一例において、ハードウェアアクセラレータ１１６は、プログラマブル集積回路（ＩＣ）、例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）を含む。加速ライブラリ１１４は、ハードウェアアクセラレータ１１６と接続するためのアプリケーションプログラミングインターフェイス（ＡＰＩ）を提供する。また、加速ライブラリ１１４は、ニューラルネットワーク層および他の種類のニューラルネットワーク構造の事前定義した実装および最適化した実装を含むニューラルネットワーク機能を提供するライブラリを含むこともできる。したがって、ニューラルネットワーク１１０は、ハードウェアアクセラレータ１１６に実装されたハードウェア部分と、加速ライブラリ１１４に実装されたソフトウェア部分との両方を含むことができる。アプリケーション１１２は、加速ライブラリ１１４のＡＰＩを呼び出し、ハードウェアアクセラレータ１１６をプログラムおよび制御することによって、ニューラルネットワーク１１６を実装する。
【００３３】
設計者は、設計ツール１０４を用いてニューラルネットワーク１１０を定義する。設計ツール１０４は、ハードウェアアクセラレータ１１６をプログラミングするためのファイル（例えば、ＦＰＧＡの構成ビットストリーム）、加速ライブラリ１１４を提供するためのファイル、およびアプリケーション１１２を提供するためのファイルを生成することができる。設計者は、レジスタ転送言語（ＲＴＬ）、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなどのプログラミング言語、またはＲＴＬとプログラマブル言語の組み合わせを使用して、ニューラルネットワーク１１０のハードウェア部分を定義することができる。ユーザは、Ｃ、Ｃ＋＋、ＯｐｅｎＣＬなどのプログラミング言語を使用して、ニューラルネットワーク１１０のソフトウェア部分を定義することができる。設計ツール１０４は、ソフトウェア定義ニューラルネットワークをコンパイルすることによって、ハードウェアアクセラレータ１１６のプログラミングファイルおよび加速ライブラリ１１４のライブラリファイルを生成する。設計者は、クラスライブラリ、テンプレートライブラリなどを提供するライブラリ１０６を使用して、ニューラルネットワーク１１０のハードウェア部分およびソフトウェア部分の開発を支援することができる。
【００３４】
ユーザは、プログラミング言語（例えば、Ｃ、Ｃ＋＋、Pythonなど）を使用して、アプリケーション１１２を定義することができる。ユーザは、例えば、Caffe、TensorFlow、MXNetなどのニューラルネットワークフレームワークおよびライブラリを利用することができる。
【００３５】
図２は、一例に従って、コンピューティングシステム１０８を示すブロック図である。コンピューティングシステム１０８は、ハードウェア２０４と、ハードウェア２０４上で動作するソフトウェア２０６とを含む。ハードウェア２０４は、処理システム２１０、システムメモリ１２１６、記憶装置（ストーレジ）２１８、およびハードウェアアクセラレータ１１６を含む。ソフトウェア２０６は、オペレーティングシステム（ＯＳ）２４４、加速ライブラリ１１４、およびアプリケーション１１２を含む。
【００３６】
処理システム２１０は、マイクロプロセッサ２１２、サポート回路２１４、および周辺バス２１５を含む。マイクロプロセッサ２１２は、任意種類の汎用中央処理装置（ＣＰＵ）、例えば、ｘ８６ベースのプロセッサ、またはＡＲＭ（登録商標）ベースのプロセッサであってもよい。マイクロプロセッサ２１２は、１つ以上のコアおよび関連する回路（例えば、キャッシュメモリ、メモリ管理ユニット（ＭＭＵ）、割り込みコントローラなど）を含むことができる。マイクロプロセッサ２１２は、システムメモリ２１６および／または記憶装置２１８に記憶され、本明細書に記載された１つ以上の演算を実行するプログラムコードを実行するように構成されている。サポート回路２１４は、マイクロプロセッサ２１２、システムメモリ２１６、記憶装置２１８、ハードウェアアクセラレータ１１６、または他の任意の周辺装置の間のデータの流れを管理するように、マイクロプロセッサ２１２と協働する様々な装置を含む。例えば、サポート回路２１４は、チップセット（例えば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど）、電圧レギュレータ、ファームウェア（例えば、ＢＩＯＳ）などを含むことができる。サポート回路２１４は、マイクロプロセッサ２１２と、ハードウェアアクセラレータ１１６などの様々な周辺機器が接続されている周辺バス２１５との間のデータの流れを管理する。いくつかの例において、マイクロプロセッサ２１２は、チップセット（例えば、ノースブリッジ、サウスブリッジなど）の全ての機能または一部の機能を実質的に取り入れたシステムインパッケージ（ＳｉＰ）、システムオンチップ（ＳｏＣ）などであってもよい。周辺バスは、ＰＣＩｅ（Peripheral Component Interconnect Express）などの拡張バス標準を実装することができる。この例において、処理システム２１０は、ハードウェアアクセラレータ１１６とは別個であると図示されている。以下でさらに説明する他の例において、処理システム２１０およびハードウェアアクセラレータ１１６は、システムオンチップ（ＳｏＣ）を用いて、同一の集積回路（ＩＣ）上に実装されてもよい。
【００３７】
システムメモリ２１６は、実行可能な命令およびデータなどの情報を記憶および検索することを可能にする素子である。システムメモリ２１６は、１つ以上のランダムアクセスメモリ（ＲＡＭ）モジュール、例えば、ダブルデータレート（ＤＤＲ）ダイナミックＲＡＭ（ＤＲＡＭ）を含むことができる。記憶装置２１８は、ローカル記憶装置（例えば、１つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスクおよび光ディスク）および／またはコンピューティングシステム１０８と１つ以上のネットワークデータ記憶システムとの通信を可能にする記憶インターフェイスを含む。ハードウェア２０４は、コンピューティングシステムの様々な他の従来の装置および周辺機器、例えば、グラフィックスカード、ユニバーサルシリアルバス（ＵＳＢ）インターフェイスなどを含むことができる。
【００３８】
ハードウェアアクセラレータ１１６は、プログラマブルＩＣ２２８、不揮発性メモリ２２４、およびＲＡＭ２２６を含む。プログラマブルＩＣ２２８は、ＦＰＧＡなどであってもよく、ＦＰＧＡなどを含むＳｏＣであってもよい。ＮＶＭ２２４は、任意種類の不揮発性メモリ、例えばフラッシュメモリを含むことができる。ＲＡＭ２２６は、ＤＤＲ  ＤＲＡＭなどを含むことができる。プログラマブルＩＣ２２８は、ＮＶＭ２２４およびＲＡＭ２２６に連結されている。また、プログラマブルＩＣ２２８は、処理システム２１０の周辺バス２１５に連結されている。
【００３９】
ＯＳ２４４は、当技術分野で知られている任意の汎用オペレーティングシステム、例えば、Linux（登録商標）、Microsoft Windows（登録商標）、Mac OS（登録商標）などであってもよい。加速ライブラリ１１４は、ハードウェアアクセラレータ１１６を命令および制御するためのＡＰＩを提供するドライバおよびライブラリを含む。アプリケーション１１２は、マイクロプロセッサ２１２上で動作しており、ニューラルネットワークを実装するために加速ライブラリ１１４のＡＰＩを呼び出すソフトウェアを含む。
【００４０】
動作時、加速回路２３０を用いて、プログラマブルＩＣ２２８を構成する。加速回路２３０は、通常、ベースプラットフォーム２３０Ａおよびカーネル２３０Ｂを含む。例えば、加速回路２３０は、静的領域２３４およびプログラマブル領域２３６を使用して実装することができる。静的領域２３４は、周辺バス２１５、ＮＶＭ２２４およびＲＡＭ２２６とのインターフェイスを提供するためのサポート回路２４０を含む。プログラマブル領域２３６は、１つ以上のカーネル回路（カーネル）２３８を含むことができる。ベースプラットフォーム２３０Ａは、静的領域２３４を使用して実装され、カーネル２３０Ｂは、プログラマブル領域２３６を使用して実装される。別の例において、ベースプラットフォーム２３０Ａは、プログラマブル領域２３６の一部を使用して実装されてもよい。したがって、いくつかの例において、プログラマブル領域２３６は、いくつかのインターフェイス回路を含む。いくつかの例において、加速回路２３０は、２つ以上のプログラマブル領域２３６を含むことができ、各々のプログラマブル領域２３６は、カーネル２３８を用いて個別に構成されてもよい。
【００４１】
プログラマブル領域２３６の再構成時に、静的領域２３４の回路が一定であるため、静的領域２３４は、「静的」である。一例において、サポート回路２４０は、ＰＣＩｅエンドポイント回路、直接メモリアクセス（ＤＭＡ）コントローラ、相互接続、メモリコントローラ、メモリインターフェイス回路（例えば、ＤＤＲインターフェイス）、（部分的な再構成をサポートするための）デカップラ回路、フラッシュプログラマ、デバッグ回路などを含む。いくつかの例において、プログラマブル領域２３６は、サポート回路２４０を含まない。他の例において、一部のサポート回路は、プログラマブル領域２３６に実装される。このような場合、プログラマブル領域２３６は、「拡張されたプログラマブル領域」と呼ばれる。いずれかの場合、一例において、いくつかのサポート回路２４０、例えば、ＰＣＩｅ回路およびＤＭＡ回路は、常に静的領域２３４に存在する。
【００４２】
図３は、一例に従って、加速回路２３０を示すブロック図である。加速回路２３０は、サポート回路２４０およびカーネル２３８を含む。この例において、サポート回路２４０は、ＰＣＩｅエンドポイント回路（ＰＣＩｅエンドポイント）３０２、ＰＣＩｅ  ＤＭＡコントローラ３０４、相互接続回路（相互接続）３０６、メモリコントローラ３１０、およびメモリインターフェイス３１２を含む。サポート回路２４０は、明瞭性のために省略されている他の回路（例えば、デカップラ回路、デバッグ回路など）を含むことができる。ＰＣＩｅエンドポイント３０２は、周辺バス２１５に接続するための物理インターフェイスを提供する。ＰＣＩｅ  ＤＭＡコントローラ３０４は、ＲＡＭ２２６およびカーネル２３８に対するＤＭＡ操作を容易にする。相互接続３０６は、ＰＣＩｅ  ＤＭＡコントローラ３０４をメモリコントローラ３１０およびカーネル２３８に連結する。メモリコントローラ３１０は、メモリインターフェイス３１２に連結される。メモリインターフェイス３１２は、ＲＡＭ２２６に連結される。
【００４３】
動作時、加速ライブラリ２４６は、ＰＣＩｅ  ＤＭＡコントローラ３０４を介してＲＡＭ２２６に直接にアクセスすることができる。また、加速ライブラリ２４６は、ＰＣＩｅ  ＤＭＡコントローラ３０４を介してカーネル２３８にアクセスすることもできる。カーネル２３８は、メモリコントローラ３１０を介してＲＡＭ２２６にアクセスすることができる。システムメモリ２１６とＲＡＭ２２６との間のＤＭＡ操作によって、ソフトウェア２０６とカーネル２３８との間にデータを交換することができる。
【００４４】
この例において、カーネル２３８は、インターフェイス３３０、３３１および３３２を介して、相互接続３０６と通信する。具体的には、これらのインターフェイスは、第１の読み取りインターフェイス３３０、第２の読み取りインターフェイス３３１、および読み取り／書き込みインターフェイス３３２を含む。例えば、読み取りインターフェイス３３０は、カーネル２３８を制御するための制御インターフェイスとして使用することができる。読み取りインターフェイス３３１を用いて、メモリインターフェイス３１２のうち第１のメモリインターフェイスを介して、ＲＡＭ２２６から読み取ることができる。読み取り／書き込みインターフェイス３３２を用いて、メモリインターフェイス３１２のうち第２のメモリインターフェイスを介して、ＲＡＭ２２６から読み書きすることができる。
【００４５】
カーネル２３８は、相互接続インターフェイス３０４、制御ロジック３４２、および処理回路３４１を含む。処理回路３４１は、ＩＭ２ＣＯＬ回路（ＩＭ２ＣＯＬ）３４４、読み取り制御回路（読み取り制御）３４６、マルチプレクサ３５６、先入れ先出し回路（ＦＩＦＯ）３５８、デジタル信号プロセッサ（ＤＳＰ）アレイ３６２、スケーラ回路（スケーラ）３６４、マックスプール回路（マックスプール）３６６、マルチプレクサ３６８、ＦＩＦＯ３５４、書き込み制御回路（書き込み制御）３５２、キャッシュ３４８、読み取り制御回路（読み取り制御）３５０、およびＦＩＦＯ３６０を含む。相互接続インターフェイス３４０は、インターフェイス３３０、３３１および３３２、制御ロジック３４２、および処理回路３４１に連結される。相互接続インターフェイス３４０は、制御ロジック３４２とインターフェイス３３０との間の通信および処理回路３４１とインターフェイス３３１および３３２との間の通信を容易にするために、スイッチ、クロックコンバータなどを含むことができる。
【００４６】
この例において、相互接続インターフェイス３４０は、ＩＭ２ＣＯＬ回路３４４の入力、読み取り制御回路３４６の入力、キャッシュ３４８の入力、および書き込み制御回路３５２の入力に連結されている。ＩＭ２ＣＯＬ回路３４４の出力および読み取り制御回路３４６の出力は、マルチプレクサ３５６の入力に連結されている。マルチプレクサ３５６の出力は、ＦＩＦＯ３５８の入力に連結されている。ＦＩＦＯ３５８の出力は、ＤＳＰアレイ３６２の第１の入力に連結されている。キャッシュ３４８の出力は、読み取り制御回路３５０の入力に連結されている。読み取り制御回路３５０の出力は、ＦＩＦＯ３６０の入力に連結されている。ＦＩＦＯ３６０の出力は、ＤＳＰアレイ３６２の第２の入力に連結されている。ＤＳＰの出力アレイ３６２は、スケーラ３６４の入力に連結されている。スケーラ３６４の出力は、マックスプール回路３６６の入力およびマルチプレクサ３６８の入力に連結されている。マックスプール回路３６６の出力は、マルチプレクサ３６８の別の入力に連結されている。マルチプレクサ３６８の出力は、ＦＩＦＯ３５４の入力に連結されている。ＦＩＦＯ３５４の出力は、書き込み制御回路３５２に連結されている。
【００４７】
動作時、ＤＳＰアレイ３６２は、ニューラルネットワークを実装するための行列乗算演算を実行する。ＤＳＰアレイ３６２の入力は、ＦＩＦＯ３５８から入力活性化マトリックスを受信し、ＦＩＦＯ３６０から重みマトリックスを受信する。入力活性化マトリックスは、読み取り制御回路３４６を用いて、ＲＡＭ２２６から直接に読み取ることができる。代替的には、入力活性化マトリックスは、ＩＭ２ＣＯＬ回路３４４によってＲＡＭ２２６から読み出され、処理されてから、ＤＳＰアレイ３６２に入力されてもよい。ＩＭ２ＣＯＬ回路３４４の実施形態は、以下で説明する。重み行列は、読み取り制御回路３５０によってＲＡＭ２２６から読み出され、キャッシュ３４８にキャッシュされてもよい。スケーラ３６４は、ＤＳＰアレイ３６２の出力をスケーリングすることができる。マックスプール回路３６６は、スケーリングされたＤＳＰアレイ３６２の出力に対してマックスプーリング機能を実施することができる。一例において、マックスプール回路９６６は、ＣＬＢまたは他の構成可能なロジックを使用して実装される。マックスプール回路３６６またはスケーラ３６４の出力は、ＦＩＦＯ３５４に記憶することができる。書き込み制御回路３５２は、ＦＩＦＯ内のデータをＲＡＭ２２６に書き込む。制御ロジック３４２は、処理回路３４１内の様々な回路、例えば、ＩＭ２ＣＯＬ回路３４４、読み取り制御回路３４６、マルチプレクサ３５６および３６８、読み取り制御回路３５０、スケーラ３６４、マックスプール回路３６６、および書き込み制御回路３５２を制御する。
【００４８】
図４は、一例に従って、プログラマブルＩＣ２２８を示すブロック図である。プログラマブルＩＣ２２８は、プログラマブルロジック３、構成ロジック２５、および構成メモリ２６を含む。プログラマブルＩＣ２２８は、ＮＶＭ２２４、ＲＡＭ２２６および他の回路２９などの外部回路に連結されてもよい。プログラマブルロジック３は、ロジックセル３０、サポート回路３１、およびプログラマブル相互接続３２を含む。ロジックセル３０は、複数の入力の一般的な論理機能を実装するように構成され得る回路を含む。サポート回路３１は、トランシーバ、入力／出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。ロジックセルおよびサポート回路３１は、プログラマブル相互接続３２を介して相互接続することができる。ロジックセル３０をプログラミングするための情報、サポート回路３１のパラメータを設定するための情報、およびプログラマブル相互接続３２をプログラミングするための情報は、構成ロジック２５によって構成メモリ２６に保存される。構成ロジック２５は、不揮発性メモリ２２４または任意の他のソース（例えば、ＤＲＡＭ２８または他の回路２９）から構成データを取得することができる。いくつかの例において、プログラマブルＩＣ２２８は、処理システム２を含む。処理システム２は、マイクロプロセッサ、メモリ、サポート回路、ＩＯ回路などを含むことができる。例えば、処理システム２は、処理システム２１０と同様の回路を含むことができる。いくつかの例において、処理システム２は、処理システム２１０を置換することができる。このような場合、コンピューティングシステム１０８の全体は、プログラマブルＩＣ２２８を用いて実装され、ソフトウェア２０６は、処理システム２上で動作する。
【００４９】
図５は、多くの異なるプログラマブルタイル、例えば、トランシーバ３７、構成可能なロジックブロック（ＣＬＢ）３３、ランダムアクセスメモリブロック（ＢＲＡＭ）３４、入力／出力ブロック（ＩＯＢ）３６、構成およびクロックロジック（構成／クロック）４２、デジタル信号処理ブロック（ＤＳＰ）３５、専用の入力／出力ブロック（Ｉ／Ｏ）４１（例えば、構成ポートおよびクロックポート）、およびデジタルクロックマネージャ、アナログデジタルコンバータ、システム監視ロジックなどの他のプログラマブルロジック３９を含むプログラマブルＩＣ２２８のＦＰＧＡ実装を示している。また、ＦＰＧＡは、ＰＣＩｅインターフェイス４０、アナログデジタルコンバータ（ＡＤＣ）３８などを含むことができる。
【００５０】
一部のＦＰＧＡにおいて、各プログラマブルタイルは、少なくとも１つのプログラマブル相互接続素子（ＩＮＴ）４３を含むことができる。図５の上部の例示によって示すように、プログラマブル相互接続素子４３は、同一のタイル内のプログラマブルロジック要素の入出力端子４８への接続を有する。また、各プログラマブル相互接続素子４３は、同一のタイルまたは他のタイル内の隣接するプログラマブル相互接続素子の相互接続セグメント４９への接続を含むことができる。さらに、各プログラマブル相互接続素子４３は、ロジックブロック（図示せず）間の一般的なルーティングリソースの相互接続セグメント５０への接続を含むことができる。一般的なルーティングリソースは、相互接続セグメント（例えば、相互接続セグメント５０）のトラックを含むロジックブロック（図示せず）と相互接続セグメントを接続するためのスイッチブロック（図示せず）との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント（例えば、相互接続セグメント５０）は、１つ以上のロジックブロックを跨ることができる。プログラマブル相互接続素子４３は、一般的なルーティングリソースと共に、図示されたＦＰＧＡのプログラマブル相互接続構造（プログラマブル相互接続）を実装する。
【００５１】
一実装例において、ＣＬＢ３３は、ユーザロジックを実装するようにプログラムできる構成可能なロジック素子（ＣＬＥ）４４と、単一のプログラマブル相互接続素子（ＩＮＴ）４３とを含むことができる。ＢＲＡＭ３４は、１つ以上のプログラマブル相互接続素子に加えて、ＢＲＡＭロジック要素（ＢＲＬ）４５を含むことができる。通常、タイルに含まれる相互接続素子の数は、タイルの高さに依存する。図示の例において、ＢＲＡＭタイルは、５つのＣＬＢと同様の高さを有するが、他の数（例えば、４つ）のＣＬＢと同様の高さを有してもよい。ＤＳＰタイル３５は、適切な数のプログラマブル相互接続素子に加えて、ＤＳＰロジック素子（ＤＳＰＬ）４６を含むことができる。ＩＯＢ３６は、例えば、１つのプログラマブル相互接続素子４３に加えて、２つの入力／出力ロジック素子（ＩＯＬ）４７を含むことができる。当業者には明らかなように、例えば、Ｉ／Ｏロジック素子４７に接続された実際のＩ／Ｏパッドは、一般的には、入力／出力ロジック素子４７の領域に限定されない。
【００５２】
図示の例において、（図８に示された）ダイ中央付近の水平領域は、構成、クロック、および他の制御ロジックに使用されている。この水平領域または水平コラムから延在する垂直コラム５１は、ＦＰＧＡの全幅に亘ってクロックおよび構成信号を分配するように使用される。
【００５３】
図５に示された構造を利用する一部のＦＰＧＡは、ＦＰＧＡの大部分を構成する規則的なコラム状構造を乱す追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび／または専用ロジックであってもよい。
【００５４】
なお、図５は、単に例示的なＦＰＧＡ構造を示すことを意図している。例えば、一行内のロジックブロックの数、行の相対幅、行の数および順番、行に含まれるロジックブロックの種類、ロジックブロックの相対サイズ、および図５の上部に示された相互接続／ロジック実装は、単に例示的なものである。例えば、実際のＦＰＧＡにおいて、ユーザロジックの効率的な実装を容易にするために、一般的に、ＣＬＢの２つ以上の隣接する行は、ＣＬＢの出現する箇所に含まれる。隣接するＣＬＢ行の数は、ＦＰＧＡの全体サイズによって変化する。
【００５５】
汎用化画像処理の画像前処理
図６は、一例に従って、畳み込みプロセッサ６００を示すブロック図である。畳み込みプロセッサ６００は、メモリ６０２、画像プリプロセッサ６０４、およびプロセッサ６０６を含む。画像プリプロセッサ６０４およびプロセッサ６０６は、上述した加速回路２３０に実装されてもよい。例えば、プロセッサ６０６は、ＤＳＰアレイ３６２であってもよい。画像プリプロセッサ６０４は、画像プリプロセッサ３４４であってもよい。メモリ６０２は、ハードウェアアクセラレータ１１６内のＲＡＭ２２６であってもよい。以下、図７を参照して、画像プリプロセッサ６０４の例示的な構造を説明する。他の例において、畳み込みプロセッサ６００は、図３に示されている加速回路と異なる構造を有する加速回路または他の種類の回路に実装されてもよい。
【００５６】
動作時、メモリ６０２は、入力画像データ８０２を記憶する。以下、図８Ａを参照して例示的な入力画像データ８０２を説明する。一般的に、入力画像データ８０２は、複数の画像を含み、各画像は、２次元配列のサンプルからなる。画像プリプロセッサ６０４は、外部回路（例えば、制御ロジック３４２）から命令データを受け取る。命令データに応答して、画像プリプロセッサ６０４は、メモリ６０２から画像データ８０２のブロックを取得し、画像ブロックを複数の並列ストリームの画像サンプル（サンプルストリーム）にフォーマットする。各ストリーム中の画像サンプルは、フィルタサイズ、ストライドおよび拡張を含む畳み込みパラメータに基づいて並べられる。以下、ストライドおよび拡張の概念を含め、画像データの畳み込みを簡単に説明する。プロセッサ６０６は、サンプルストリームおよび畳み込みフィルタデータを受け取る。プロセッサ６０６は、入力画像データ８０２および畳み込みフィルタデータの畳み込みをもたらす演算を実行する。プロセッサ６０６は、処理の結果として、出力画像データを生成する。
【００５７】
一例において、プロセッサ６０６は、シストリックアレイに形成されたデータ処理ユニット（ＤＰＵ）６０７を含む。以下でさらに説明するように、畳み込みは、行列乗算を用いて実行することができる。ＤＰＵ６０７は、サンプルストリームおよびフィルタデータに基づいて、積和演算を実行することによって、出力画像データを生成する。他の例において、プロセッサ６０６は、サンプルストリームおよびフィルタデータをベクトルとして処理する１つ以上のコアを有するベクトルプロセッサであってもよい。さらに他の例において、画像プリプロセッサ６０４は、プロセッサ６０６に加えてまたはプロセッサ６０６の代わりに、画像サンプルストリームの他の消費者（consumer）に連結されてもよい（例えば、後の処理のためにメモリに記憶されてもよい）。他の例において、プロセッサ６０６は、畳み込みの代わりに他の演算（例えば、フィルタリング演算）を実行することができる。一般的に、画像プリプロセッサ６０４は、画像サンプルの消費者が特定の演算を実行するために必要とする特定のサンプルパターンを有する画像サンプルストリームを生成する。
【００５８】
図７は、一例に従って、画像プリプロセッサ６０４を示すブロック図である。画像プリプロセッサ６０４は、入力バッファ回路（入力バッファ）７０５、行バッファ回路（行バッファ）７０８、相互接続ネットワーク７１０、シフトレジスタ回路（シフトレジスタ）７１２、および制御回路７１４を含む。画像プリプロセッサ６０４は、メモリコントローラ７０２を含むことができる。代替的には、メモリコントローラ７０２は、画像プリプロセッサ６０４の外部（例えば、図３に示されたメモリコントローラ３１０の一部）に実装されてもよい。制御回路７１４は、画像プリプロセッサ６０４の外部の他の制御回路（例えば、図３に示された制御ロジック３４２）に連結されてもよい。
【００５９】
一例において、入力バッファ７０５は、読み取り制御回路７０３、入力バッファ７０４１、入力バッファ７０４２、および行セレクタ７０６を含む。読み取り制御回路７０３は、メモリコントローラ７０２と、入力バッファ７０４１および７０４２との間に連結されている。行セレクタ７０６は、入力バッファ７０４１および７０４２と、行バッファ７０８との間に連結されている。動作時、読み取り制御回路７０３は、アドレスデータおよびコマンドデータをメモリコントローラ７０２に送信することによって、メモリ６０２から画像データを取得する。各々の入力バッファ７０４１および７０４２は、複数行の画像データのブロックを記憶するように構成されている。この例において、入力バッファ７０５は、画像データを二重にバッファする。よって、読み取り制御回路７０３は、画像データを入力バッファ７０４１または７０４２の一方にロードすると共に、行セレクタ７０６は、他方の入力バッファ７０４１または７０４２から画像データを読み取ることができる。入力バッファ７０５は、図７に示されるものとは異なる構造を含むことができる（例えば、入力バッファ７０５は、１つのバッファであってもよく、３つのバッファであってもよい）。一般的に、入力バッファ７０５は、行バッファ７０８にロードされるいくつかの画像行を有する画像データのブロックを記憶する。
【００６０】
行バッファ７０８は、複数の記憶位置を含む。例えば、行バッファ７０８は、複数のレジスタを含み、各レジスタは、画像データの行に対応するサンプルを記憶するように構成されている。行バッファ７０８は、画像データの行を記憶するのに十分な記憶位置を含む。行バッファ７０８に記憶されたサンプルは、相互接続ネットワーク７１０を介してシフトレジスタ７１２にロードされる。各シフトレジスタ７１２は、行バッファ７０８の異なるパターンの記憶位置にアクセスして、画像サンプルストリームを生成する。相互接続ネットワーク７１０は、各シフトレジスタ７１２と、行バッファ７０８内の特定のパターンの記憶位置との間の接続を含む。以下でさらに説明するように、シフトレジスタ７１２に連結された記憶位置のパターンは、実行されている畳み込み演算のフィルタ幅、ストライドおよび拡張に応じて、重複してもよく、非連続であってもよい。異なるフィルタ幅、ストライドおよび拡張によって、行バッファ７０８とシフトレジスタ７１２との間のアクセスパターンが異なる。
【００６１】
一例において、相互接続ネットワーク７１０は、各シフトレジスタ７１２の単一のアクセスパターンをサポートする。このような例において、相互接続ネットワーク７１０は、接続を実装するためのワイヤのみを含む。他の例において、相互接続ネットワーク７１０は、各シフトレジスタ７１２の複数のアクセスパターンをサポートする。このような例において、相互接続ネットワーク７１０は、異なるアクセスパターンを実装するための異なる接続を選択するためのマルチプレクサを含むことができる。シフトレジスタ７１２は、他の回路（例えば、プロセッサ６０６）によって利用される画像サンプルストリームを出力する。
【００６２】
制御回路７１４は、入力バッファ７０５、行バッファ７０８、およびシフトレジスタ７１２に連結されている。また、制御回路７１４は、命令入力を含む。制御回路７１４は、外部制御ロジック（例えば、制御ロジック３４２）から命令を受け取ることができる。制御回路７１４は、イネーブル信号、クロック信号などを入力バッファ７０５、行バッファ７０８およびシフトレジスタ７１２の各々に提供することによって、本明細書に記載の演算を実行することができる。命令入力は、メモリ６０２から画像データを取得するためのアドレスデータを提供することができる。制御回路７１４は、アドレスデータを読み取り制御回路７０３に提供することができる。制御回路７１４は、行クロックを行バッファ７０８に提供することによって、画像データの行を行バッファ７０８の記憶位置にロードする。制御回路７１４は、サンプルクロックをシフトレジスタ７１２に提供することによって、画像サンプルをシフトアウトする。一例において、（例えば、相互接続ネットワーク７１０がマルチプレクサを含む場合）制御回路７１４は、相互接続ネットワーク７１０に連結されてもよい。制御回路７１４は、モード選択信号を相互接続ネットワーク７１０内のマルチプレクサに提供することによって、各シフトレジスタ７１２のアクセスパターンを選択することができる。
【００６３】
図８Ａは、一例に従って、畳み込み演算用の入力画像データ８０２、フィルタデータ８０４および出力画像データ８０６を示す。畳み込み演算は、例えばＣＮＮの特定の層に対して実行することができる。入力画像データ８０２は、複数のチャネル（ＩＤ）の各々において、各々が幅（ＩＷ）および高さ（ＩＨ）を有する２次元画像を含む。したがって、入力画像データ８０２は、ＩＷ×ＩＨ×ＩＤ個の画像サンプルを含む。例えば、入力画像データ８０２は、赤、緑および青（ＲＧＢ）チャネルの各々において、２２７×２２７個の画像（すなわち、２２７×２２７×３）を含むことができる。別の例において、ＣＮＮの内側畳み込み層は、（例えば、９６個のチャネルを有し、各チャネルが５５×５５個の画像を有する場合）５５×５５×９６個の入力画像データを含むことができる。各画像８０８は、２次元行列Ａ＝（ａｉｊ）ＩＨ×ＩＷによって表すことができる。各画像８０８は、ＩＨ個の行８１４を含む。以下で説明するように、画像プリプロセッサ６０４は、行ごとに画像８０８を処理する。
【００６４】
場合によって、各画像８０８の左端および右端にゼロ値サンプルの列および／または各画像８０８の上端および下端にゼロ値サンプルの行をパディングすることができる。このパディングは、数字ＰＨおよびＰＷで示され、ＰＨは、パディングの高さを表し、ＰＷは、パディングの幅を表す。例えば、ＰＨ＝ＰＷ＝０は、パディングしないことを表す。ＰＨ＝ＰＷ＝１は、ゼロ値サンプルのリングが画像サンプルを囲むことを意味する。ＰＨ＝１は、１行のゼロ値サンプルが上端に追加され、１行のゼロ値サンプルが下端に追加されることを意味する。ＰＷ＝２は、２列のゼロ値サンプルが右端に追加され、２列のゼロ値サンプルが左端に追加されることを意味する。
【００６５】
フィルタデータ８０４は、３次元フィルタ８０４１・・・８０４ＯＤを含み、各々の３次元フィルタは、幅（ＦＷ）、高さ（ＦＨ）および深さ（ＩＤ）を有する。各々の３次元フィルタ８０４１・・・８０４ＯＤは、入力画像データ８０２と畳み込むことによって、出力画像データ８０６の各々のチャネルを生成する。したがって、３次元フィルタ８０４１・・・８０４ＯＤの数は、出力画像の深さ（ＯＤ）に等しい。また、各３次元フィルタ８０４１・・・８０４ＯＤの深さは、入力画像データ８０２の深さ（ＩＤ）と一致する。例えば、ＣＮＮの畳み込み層は、１１×１１×３というサイズを有する９６個の３次元フィルタを含むことができる。各フィルタ８０４１・・・８０４ＯＤの２次元断面は、２次元行列Ｂ＝（ｂｉｊ）ＦＨ×ＦＷで表すことができる。
【００６６】
出力画像データ８０６は、複数（ＯＤ）のチャネルにおいて、各々が幅（ＯＷ）および高さ（ＩＨ）を有する２次元画像を含む。したがって、出力画像データ８０６は、体積ＯＷ×ＯＨ×ＯＤを形成する。例えば、出力画像データ８０６は、９６個のチャネルを含み、各チャネルは、５５×５５個の画像を有する。各画像８１６は、２次元行列Ｃ＝（ｃｉｊ）ＯＨ×ＯＷで表すことができる。各画像８１６は、ＯＨ個の行を含む。
【００６７】
ＯＨおよびＯＷの値は、フィルタの寸法（ＦＨ、ＦＷ）、入力画像のパディング（ＰＨ、ＰＷ）、水平ストライド（Ｓｈ）、垂直ストライド（Ｓｖ）、水平拡張（Ｄｈ）、および垂直拡張（Ｄｖ）に依存する。具体的には
【００６８】
【数１】
2020537788.tif 000003
【００６９】
画像全体の処理を保証するために、式（ＩＨ＋２ＰＨ−（（Ｄｖ＋１）（ＦＨ−１）＋１））の値をＳｖの倍数として求め、式（ＩＷ＋２ＰＷ−（（Ｄｈ＋１）（ＦＷ−１）＋１））の値をＳｈの倍数として求める必要がある。
【００７０】
出力画像８１２内の出力サンプルは、本明細書において「受容フィールド」と呼ばれる各入力画像８０８内の入力サンプルの近傍に依存する。各受容フィールドは、ＦＨ×ＦＷ個の入力サンプルを含む。出力画像８１２内の所定の出力サンプルｃｉｊは、当該サンプルの受容フィールドのベクトルと所定のフィルタのベクトルとの間の点乗積をとることによって計算される。したがって、所定の出力サンプルｃｉｊの受容フィールドは、ＩＤ×ＦＨ×ＦＷ個のサンプルに等しい数の入力サンプルを含む。受容フィールドのサイズは、フィルタの寸法（ＦＨ、ＦＷ）に依存する。受容フィールドの入力サンプルおよび受容フィールドが互いに重複する度合は、畳み込みのストライドおよび拡張パラメータと、入力画像データのパディングとに依存する。
【００７１】
図８Ｂは、２次元行列乗算演算による畳み込みを示す。フィルタマトリクス９０２は、ＯＤ個の行および（ＩＤ×ＦＨ×ＦＷ）個の列を有する。フィルタマトリクス９０２において、各フィルタ８０４１・・・８０４ＯＤは、（ＩＤ×ＦＨ×ＦＷ）個の要素を有するベクトルに変換される。ベクトル化された各フィルタは、フィルタ行列９０６の行９０８になる。
【００７２】
出力画像マトリクス９０６は、ＯＤ個の行および（ＯＨ×ＯＷ）個の列を有する。出力画像マトリクス９０６の各行９１２は、出力画像８１２をベクトル化したものである。出力画像マトリクス９０６は、出力画像データ８０６のＯＤ個のチャネルを表すＯＤ個の行を含む。
【００７３】
入力画像マトリックス９０４は、ＩＤ×ＦＨ×ＦＷ個の行およびＯＨ×ＯＷ個の列を有する。入力画像マトリクス９０４は、各列９１０が所定の出力サンプルの受容フィールドを含むように形成される。したがって、入力画像マトリックス９０４は、フィルタのサイズ（ＦＨ、ＦＷ）およびパディング（ＰＨ、ＰＷ）ならびに畳み込みに選択されたストライドおよび拡張に依存する。
【００７４】
１つの手法において、プロセッサは、行列９０２、９０４および９０６を生成し、行列乗算演算を実行することによって、畳み込みを実行することができる。しかしながら、このような手法は、ＩＭ２ＣＯＬプロセスを用いて、大きな入力画像マトリクス９０４を生成する必要がある。入力画像マトリックス９０４は、冗長データを含む（例えば、画像サンプルは、定義された受容フィールドの重複に従った特定のパターンに従って、列間で繰り返される）。例えば、２２７×２２７×３個の画像サンプルを有する入力画像データ（例えば、パディングなしで２２７ピクセルの高さおよび幅を有するＲＧＢ画像）を検討する。さらに、フィルタが１１×１１×３個であり、ストライドが４であると仮定する。このような例において、入力画像データ８０２は、１５４５８７個の画像サンプルを含み、入力画像マトリックス９０４は、１０９８０７５個の画像サンプルを含む。各画像サンプルが１バイトである場合、入力画像マトリックス９０４の生成には、約１ＭＢの一時記憶が必要になる。言うまでもなく、入力サンプルのサイズが大きくなるほど、多くの一時記憶が必要になる。さらに、入力画像行列９０４の計算は、畳み込み演算を実行する前に、入力画像データ８０２を完全に走査する必要がある。本明細書においてさらに説明するように、画像プリプロセッサ６０４は、入力画像マトリックス９０４を計算する必要性を回避するため、必要のメモリリソースを大幅に低減する。さらに、画像プリプロセッサ６０４は、畳み込みの計算と並行して、入力画像データ８０２をフォーマットする。
【００７５】
図９は、一例に従って、画像プリプロセッサ６０４を用いて、入力画像データ８０２を処理する方法を示す。上記の例で説明したように、入力画像データ８０２は、複数の画像８０２（例えば、画像８０２１・・・８０２ＩＤ）を含む。入力画像データ８０２は、行優先形式でメモリ６０２に記憶することができる。入力バッファ７０５は、入力画像データ８０２を１ブロックずつ読み出す。一例において、各ブロックの画像データは、ＫＨ個の行８１４を含む。図７の例において、入力バッファ７０５は、入力画像データを２重にバッファする。したがって、前処理の開始時に、読み取り制御回路７０３は、画像８０８１の行８１４１・・・８１４ＫＨを含むブロックＢ１を入力バッファ７０４１にロードする。読み取り制御回路７０３は、（例えば、制御回路７１４から受信された）垂直ストライド（Ｓｖ）を決定し、行８１４Ｓｖ・・・８１４ＫＨ＋Ｓｖを含む第２のブロックＢ２を入力バッファ７０４２にロードする。
【００７６】
行セレクタ７０６は、バッファ７０４１からの画像データ行を行バッファ７０８にロードし、読み取り制御回路７０３は、ブロックＢ２を入力バッファ７０４２にロードする。行セレクタ７０６は、（例えば、制御回路７１４によって生成された）行クロックに従って、画像データ行を行バッファ７０８にロードする。行セレクタ７０６は、入力バッファ７０４２の読み取りに切り替える前に、入力バッファ７０４１内のＫＨ行を走査する。入力バッファ７０４２に切り替えると、読み取り制御回路７０３は、ブロックＢ３（明示的に図示せず）から新しい行を入力バッファ７０４２にロードする。なお、垂直ストライド（Ｓｖ）に応じて、読み取り制御回路７０３は、ＫＨ未満の行を読み出し、画像８０８１内のブロックＢ３および任意の後続ブロックを用いて、入力バッファ７０４１を更新することができる。ブロックＢ３は、ブロックＢ１と共通の行を含むため、新しい行のみが入力バッファ７０４１に追加される。例えば、ＫＨ＝１１およびＳｖ＝４の場合、ブロックＢ３の最初の３行（例えば、行８１４９．．．８１４１１）は、ブロックＢ１の最後の３行であり、再利用することができる。同様のことは、入力バッファ７０４１に記憶された後続の奇数番号の各ブロックにも適用する。また、同様のことは、入力バッファ７０４２に記憶されたブロックＢ２の後続の偶数番号の各ブロックにも適用する。一般的に、最初の２つのブロックＢ１およびＢ２の後、読み取り制御回路７０３は、入力バッファ７０４１または入力バッファ７０４２から最小の（ＫＨ、２×Ｓｖ）行を読み取る。図９にさらに示すように、読み取り制御回路７０３は、入力画像８０８当たりにＯＨ個のブロック（Ｂ１・・・ＢＯＨ）を読み取る。
【００７７】
図９の例において、入力バッファ７０４１および７０４２の高さがＫＨであると仮定している。いくつかの例において、入力バッファ７０４１および７０４２は、ＫＨを超える数の行を記憶することができる。例えば、画像プリプロセッサ６０４が複数のモードをサポートするように構成されている場合、入力バッファ７０４１および７０４２は、モードの数ＫＨ以上の行を記憶することができる。入力バッファ７０４１および７０４２がＫＨよりも多くの行を記憶することができる場合、ブロックの高さは、ＫＨよりも大きくなる。これによって、後続のサイクルにバッファを更新するためにメモリ６０２から読み取る必要のある行が少なくなる。
【００７８】
図９の例において、１つの入力画像８０８が、行幅ＩＷに従って行ごとに処理されると仮定している。入力バッファ７０４１、７０４２および行バッファ７０８は、ＩＷを超える数の画像サンプルを記憶することができる。例えば、画像プリプロセッサ６０４がＡｌｅｘＮｅｔ  ＣＮＮの各畳み込み層の畳み込みをサポートするように構成されている場合を検討する。第１の畳み込み層において、入力画像は、２２７×２２７（高さおよび幅）である。第２の畳み込み層において、入力画像は、５５×５５（高さおよび幅）である。第３の畳み込み層において、入力画像は、２７×２７（高さおよび幅）である。第４および第５の畳み込み層において、入力画像は、１３×１３である。入力バッファ７０４１、７０４２および行バッファ７０８は、第１の畳み込み層をサポートするために少なくとも２２７個の画像サンプルを記憶するように構成される。第１の層の後の畳み込み層の場合、入力画像は、交互にメモリ６０２に記憶される。これによって、画像プリプロセッサ６０４によって処理されている「画像」は、連結を有する行（例えば、２つの５５個サンプル行の連結、４つの２７個サンプル行の連結）を有する。
【００７９】
図９の例において、垂直拡張（Ｄｖ）がゼロ（すなわち、拡張なし）であると仮定している。垂直拡張がゼロではない場合、各ブロックＢ１・・・ＢＯＨは、ＫＨ個の行を含むが、行のインデックスは、拡張の大きさによって異なる。例えば、垂直拡張（Ｄｖ）が１に設定されている場合、ブロックＢ１は、行８０４１、８０４３、８０４５、・・・、８０４２ＫＷ−１を含み、ブロックＢ２は、行８０４５、８０４７、８０４９、・・・、８０４２ＫＷ−１＋Ｓｖを含む。
【００８０】
図１０は、一例に従って、プロセッサ６０６をより詳細に示すブロック図である。行バッファ７０８は、記憶位置（例えば、レジスタ）７０９１・・・７０９Ｔを含み、Ｔは、正の整数である。Ｔの数値は、少なくともＣＮＮの最大ＩＷをサポートするように選択することができる（例えば、ＡｌｅｘＮｅｔ  ＣＮＮの場合、Ｔ≧２２７）。各記憶位置７０９は、Ｍビットの画像サンプル（例えば、Ｍ＝８、Ｍ＝１６）を記憶する。各記憶位置７０９は、行バッファ７０８に対応する出力ｄ１・・・ｄＴを介してアクセス可能である。各出力ｄ１・・・ｄＴは、Ｍビットの出力である。
【００８１】
シフトレジスタ７１２は、シフトレジスタ７１２１・・・７１２Ｖを含み、Ｖは、正の整数である。Ｖの数値は、ＣＮＮの少なくとも最大のＯＷ（例えば、ＡｌｅｘＮｅｔ  ＣＮＮの場合、Ｖ≧５５）またはより小さいＯＷ値の整数倍をサポートするように選択することができる。これにより、画像プリプロセッサ６０４は、出力画像の全体行の画像データをプロセッサ６０６に供給することができる。各シフトレジスタ７１２は、記憶位置（例えば、レジスタ）７１３１・・・７１３Ｕを含み、Ｕは、正の整数である。一例において、Ｕの数値は、少なくとも最大のフィルタ幅（ＦＷ）をサポートするように選択される（例えば、ＡｌｅｘＮｅｔ  ＣＮＮの場合、Ｕ＝１１）。各記憶位置７１３は、Ｍビットの画像サンプルを記憶する。記憶位置７１３は、各々の入力ｓｒ１・・・ｓｒＶから並列にロードされる。各入力ｓｒ１・・・ｓｒＶは、各々のシフトレジスタ７１２１・・・７１２Ｖの記憶位置７１３の並列ロードをサポートするように、幅Ｕ×Ｍを有する。各シフトレジスタ７１２は、Ｍビットの画像のサンプルストリームを出力する。したがって、画像プリプロセッサ６０４は、シフトレジスタ７１２１・・・７１２Ｖによって各々出力されるＶ個のサンプルストリームを生成する。
【００８２】
相互接続ネットワーク７１０は、出力ｄ１・・・ｄＴと入力ｓｒ１・・・ｓｒＶとの間に配置される。相互接続ネットワーク７１０は、接続７１８を含み、必要に応じてマルチプレクサ７２０を含む。一例において、相互接続ネットワーク７１０は、単一のモード（例えば、行バッファ７０８の１つのアクセスパターン）をサポートする。このような場合、マルチプレクサ７２０は、設けられない。各接続７１８は、入力ｓｒ１を異なるパターンの出力ｄ１・・・ｄＴに連結する。一例において、選択したフィルタサイズ、水平ストライドおよび水平拡張に基づいて、異なるパターンは、重複する。別の例において、相互接続ネットワーク７１０は、複数のモード（例えば、行バッファ７０８の複数のアクセスパターン）をサポートする。このような場合、ネットワーク７１５は、マルチプレクサ７２０を含む。各マルチプレクサ７２０の出力は、対応する出力ｓｒ１・・・ｓｒＶに連結される。マルチプレクサ７２０の入力は、接続７１８に連結される。各マルチプレクサ７２０の各入力は、異なるアクセスパターンに基づいて、異なるセットの入力ｄ１・・・ｄＴに接続される。以下、相互接続ネットワーク７１０の例示的な構造をさらに説明する。
【００８３】
図１１は、例示的な入力画像１１０２および１組の受容フィールド１１０４を示す。入力画像１１０２は、幅５および高さ５（すなわち、５×５画像）を有する。画像１１０２は、行列Ａ＝（ａｉｊ）５×５によって定義され、式中、ａｉｊは、入力サンプルである。図示の例において、畳み込みパラメータは、３×３のフィルタ寸法（ＦＨ、ＦＷ）、２の水平ストライド（Ｓｈ）、および０の水平拡張（Ｄｈ）を含む。このようなパラメータの場合、出力画像の高さ（ＯＨ）および出力画像の幅（ＯＷ）は、いずれも２である（すなわち、ＯＨ＝ＯＷ＝２）。出力画像は、行列Ｃ＝（ｃｉｊ）２×２によって定義され、式中、ｃｉｊは、出力サンプル（図１１には明示的に図示せず）である。出力サンプルｃ１，１は、入力画像１１０２の最初の３行および最初の３列の入力サンプルを含む受容フィールド１１０４１，１を有する。出力サンプルｃ１，２は、入力画像１１０２の最初の３行および最後の３列の入力サンプルを含む受容フィールド１１０４１，２を有する。出力サンプルｃ２、１は、最後の３行および最初の３列の入力サンプルを含む受容フィールド１１０４２，１を有する。出力サンプルｃ２，２は、最後の３行および最後の３列の入力サンプルを含む受容フィールド１１０４２，２を有する。
【００８４】
図１２Ａは、一例に従って、相互接続ネットワーク７１０の構成を示すブロック図である。相互接続ネットワーク７１０は、同様の畳み込みパラメータ（例えば、フィルタ３×３、ストライド２、および拡張０）を有する図１１の例に示された画像１１０２を処理するように構成されている。相互接続ネットワーク７１０は、単一のモードをサポートするため、マルチプレクサ７２０は、必要とされず、設けられない。
【００８５】
この例において、行バッファ７０８は、入力画像１１０２の一行の５つのサンプルを記憶するために、少なくとも５つの記憶位置７０９１・・・７０９５を含む。シフトレジスタ７１２は、出力画像のＯＷと一致するように、少なくとも２つのシフトレジスタ７１２１および７１２２を含む。入力ｓｒ１は、接続７１８１を介して出力ｄ１・・・ｄ３に連結されている。接続７１８１は、出力ｄ１・・・ｄ３に各々連結されている３本のワイヤを含む。入力ｓｒ２は、接続７１８２を介して出力ｄ３・・・ｄ５に連結されている。接続７１８２は、出力ｄ３・・・ｄ５に各々連結されている３本のワイヤを含む。したがって、各行サイクルにおいて、ｄ１・・・ｄ３からの画像サンプルは、シフトレジスタ７１２１に並列にロードされ、ｄ３・・・ｄ５からの画像サンプルは、シフトレジスタ７１２２に並列にロードされる。
【００８６】
図１２Ｂは、図１２Ａの例に従って、行バッファ７０８とシフトレジスタ７１２との間の接続のロジック配置を示すブロック図である。相互接続ネットワーク７１０は、重複する行出力パターン１２０２を形成する。重複する行出力パターン１２０２は、出力パターン１２０２１と、出力パターン１２０２２とを含む。出力パターン１２０２１は、出力ｄ１・・・ｄ３を提供する記憶位置７０９のパターンを含む。出力パターン１２０２２は、出力ｄ３・・・ｄ５を提供する記憶位置７０９のパターンを含む。出力パターン１２０２１は、接続７１８１によってシフトレジスタ７１２１の入力ｓｒ１に連結されている。出力パターン１２０２２は、接続７１８２によってシフトレジスタ７１２２の入力ｓｒ２に連結されている。出力パターン１２０２１と１２０２２は、出力ｄ３によって重複する。出力パターン１２０２は、例に使用された畳み込みパラメータの結果である（例えば、フィルタ３×３、ストライド２、および拡張０）。
【００８７】
図１３は、図１２Ａの例のシフトレジスタ７１２１および７１２２によって出力されたサンプルストリームを示している。シフトレジスタ７１２１は、サンプルストリーム１３０２１を出力する。シフトレジスタ７１２２は、サンプルストリーム１３０２２を出力する。入力画像１１０２は、図１１の例に示されたものと同様である。サンプルストリーム１３０２１は、受容フィールド１１０４１，１のサンプルおよび後続の受容フィールド１１０４２，１のサンプルを含む。サンプルストリーム１３０２２は、受容フィールド１１０４１，２のサンプルおよび後続の受容フィールド１１０４２，２のサンプルを含む。各行サイクルにおいて、特定のストリームは、特定の受容フィールドの行を含む。３つの行サイクルの後、特定のストリームは、全ての受容フィールドを含む。６つの行サイクルの後、並列のストリーム１３０２１および１３０２２は、全ての受容フィールド１１０４を出力する。ストリーム１３０２１および１３０２２のサンプルパターンは、図１２Ａに示された接続７１８１および７１８２によって実装されたアクセスパターンの結果である。なお、ストリーム１３０２１および１３０２２は、全ての受容フィールド１１０４を事前に計算および記憶することなく、全ての受容フィールド１１０４を出力する。むしろ、画像プリプロセッサ６０４は、元の入力画像１１０２の６行を処理して、ストリーム１３０２１および１３０２２を生成する。プロセッサ６０６は、画像プリプロセッサ６０４によるストリームの生成に並行して、畳み込み演算を開始する。ストリーム１３０２１および１３０２２は、フィルタベクトルを用いたド点乗積演算に適したフォーマットである。
【００８８】
図１４Ａは、別の例に従って、相互接続ネットワーク７１０の構成を示すブロック図である。相互接続ネットワーク７１０は、幅（ＩＷ）が８である画像（例えば、８×８画像）を処理するように構成されている。相互接続ネットワーク７１０は、２つの異なるモードをサポートする。モードＡにおいて、フィルタサイズは、３×３であり、ストライドは、２であり、拡張は、０である。モードＢにおいて、フィルタサイズは、５×５であり、ストライドは、３であり、拡張は、０である。相互接続ネットワーク７１０は、複数のモードをサポートするため、マルチプレクサ７２０を含む。
【００８９】
この例において、行バッファ７０８は、入力画像の一行の８つのサンプルを記憶するために、少なくとも８つの記憶位置７０９１・・・７０９８を含む。シフトレジスタ７１２は、出力画像のＯＷと一致するように、少なくとも２つのシフトレジスタ７１２１および７１２２を含む。入力ｓｒ１は、マルチプレクサ７２０１の出力に連結されている。入力ｓｒ２は、マルチプレクサ７２０２の出力に連結されている。マルチプレクサ７２０１および７２０２の各々は、２つの入力ＩＡおよびＩＢと、モード選択入力（モード）とを含む。マルチプレクサ７２０１のポートＩＡは、接続７１８Ａ１を介して出力ｄ１・・・ｄ３に連結されている。接続７１８Ａ１は、出力ｄ１・・・ｄ３に各々連結されている３つのワイヤを含む。マルチプレクサ７２０２のポートＩＡは、接続７１８Ａ２を介して出力ｄ３・・・ｄ５に連結されている。接続７１８Ａ２は、出力ｄ３・・・ｄ５に各々連結されている３つのワイヤを含む。モードＡの場合、各行サイクルにおいて、ｄ１・・・ｄ３からの画像サンプルは、シフトレジスタ７１２１に並列にロードされ、ｄ３・・・ｄ５からの画像サンプルは、シフトレジスタ７１２２に並列にロードされる。
【００９０】
マルチプレクサ７２０１のポートＩＢは、接続７１８Ｂ１を介して出力ｄ１・・・ｄ５に連結されている。接続７１８Ｂ１は、出力ｄ１・・・ｄ５に各々連結されている５本のワイヤを含む。マルチプレクサ７２０２のポートＩＢは、接続７１８Ｂ２を介して出力ｄ４・・・ｄ８に連結されている。接続７１８Ｂ２は、出力ｄ４・・・ｄ８に各々連結されている５本のワイヤを含む。モードＢの場合、各行サイクルにおいて、ｄ１・・・ｄ５からの画像サンプルは、シフトレジスタ７１２１に並列にロードされ、ｄ４・・・ｄ８からの画像サンプルは、シフトレジスタ７１２２に並列にロードされる。
【００９１】
図１４Ｂは、図１４Ａの例に従って、行バッファ７０８とシフトレジスタ７１２との間の接続のロジック構成を示すブロック図である。相互接続ネットワーク７１０は、モードＡにおいて重複する行出力パターン１２０２Ａを形成し、モードＢにおいて重複する行出力パターン１２０２Ｂを形成する。重複する行出力パターン１２０２Ａは、出力パターン１２０２Ａ１および出力パターン１２０２Ａ２を含む。出力パターン１２０２Ａ１は、出力ｄ１・・・ｄ３を提供する記憶位置７０９のパターンを含む。出力パターン１２０２Ａ２は、出力ｄ３・・・ｄ５を提供する記憶位置７０９のパターンを含む。出力パターン１２０２Ａ１は、接続７１８Ａ１によってマルチプレクサ７２０１の入力ＩＡに連結されている。出力パターン１２０２Ａ２は、接続７１８Ａ２によってマルチプレクサ７２０２の入力ＩＡに連結されている。出力パターン１２０２Ａ１および１２０２Ａ２は、出力ｄ３によって重複する。出力パターン１２０２Ａは、モードＡに使用された畳み込みパラメータの結果である（例えば、フィルタ３×３、ストライド２、および拡張０）。
【００９２】
重複する行出力パターン１２０２Ｂは、出力パターン１２０２Ｂ１および出力パターン１２０２Ｂ２を含む。出力パターン１２０２Ｂ１は、出力ｄ１・・・ｄ５を提供する記憶位置７０９のパターンを含む。出力パターン１２０２Ｂ２は、出力ｄ４・・・ｄ８を提供する記憶位置７０９のパターンを含む。出力パターン１２０２Ｂ１は、接続７１８Ｂ１によってマルチプレクサ７２０１の入力ＩＢに連結されている。出力パターン１２０２Ｂ２は、接続７１８Ｂ２によってマルチプレクサ７２０２の入力ＩＢに連結されている。出力パターン１２０２Ｂ１および１２０２Ｂ２は、出力ｄ４およびｄ５によって重複する。出力パターン１２０２Ｂは、モードＢに使用された畳み込みパラメータの結果である（例えば、フィルタ５×５、ストライド３、および拡張０）。
【００９３】
図１５は、別の例に従って、行バッファ７０８とシフトレジスタ７１２との間の接続のロジック構成を示すブロック図である。相互接続ネットワーク７１０は、幅（ＩＷ）が８である画像（例えば、８×８画像）を処理するように構成され、３つの異なるモードをサポートする。相互接続ネットワーク７１０は、モードＡ、ＢおよびＣにおいて、重複する行出力パターン１２０２Ａ、１２０２Ｂおよび１２０２Ｃを各々形成する。モードＡおよびＢは、図１４Ｂの例と同様であり、上記で詳細に説明されている。モードＣは、フィルタサイズ３×３、ストライド２、拡張１を含む畳み込みパラメータによって定義される。
【００９４】
重複する行出力パターン１２０２Ｃは、出力パターン１２０２Ｃ１および出力パターン１２０２Ｃ２を含む。出力パターン１２０２Ｃ１は、出力ｄ１、ｄ３およびｄ５を提供する記憶位置７０９のパターンを含む。出力パターン１２０２Ｃ２は、出力ｄ３、ｄ５およびｄ７を提供する記憶位置７０９のパターンを含む。出力パターン１２０２Ｃ１は、接続７１８Ｃ１によってマルチプレクサ７２０１の入力ＩＣに連結されている。出力パターン１２０２Ｃ２は、接続７１８Ｃ２によってマルチプレクサ７２０２の入力ＩＣに連結されている。出力パターン１２０２Ｃ１および１２０２Ｃ２は、出力ｄ３およびｄ５によって重複する。出力パターン１２０２Ｃは、モードＣに使用された畳み込みパラメータの結果である（例えば、フィルタ３×３、ストライド２、および拡張１）。
【００９５】
図１２Ａ、１４Ａおよび１５に示された相互接続ネットワーク７１０の例示的な構成は、説明のために簡略化されている。この構成は、より大きな画像幅および異なる畳み込みパラメータに応じて拡張することができる。単一のモードをサポートする場合、相互接続ネットワーク７１０は、畳み込みパラメータに関連する特定のアクセスパターンを実装するために、行バッファ７０８とシフトレジスタ７１２との間に接続されたワイヤのみを含む。複数のモードをサポートする場合、相互接続ネットワーク７１０は、２つ以上のモードに関連する２つ以上の入力を有するマルチプレクサを含む。
【００９６】
図１６は、一例に従って、画像プリプロセッサ６０４の動作方法１６００を示す流れ図である。方法１６００は、省略可能なステップ１６０２から開始する。複数の動作モードが可能である場合、制御回路７１４は、ステップ１６０２において、動作モードを選択する。制御回路７１４が１つの動作モードのみを含む場合、ステップ１６０２は、省略される。ステップ１６０４において、制御回路７１４は、入力バッファ７０４１をロードすると共に、入力バッファ７０４２をロードする。例えば、制御回路７１４は、制御信号（イネーブル信号、クロック信号、アドレスデータなど）を読み取り制御回路７０３に提供する。上述したように、読み取り制御回路７０３は、画像データのブロックを入力バッファ７０４１および７０４２にロードする。
【００９７】
ステップ１６０６において、制御回路７１４は、選択したた行を行バッファ７０８にロードする。例えば、制御回路７１４は、制御信号（イネーブル信号、クロック信号など）を行セレクタ回路７０６に提供することによって、行を選択して、行バッファ７０８にロードする。行バッファ７０８は、行クロックに従ってロードされる。
【００９８】
ステップ１６０８において、制御回路７１４は、相互接続ネットワーク７１０を通じて行バッファ７０８の内容をシフトレジスタ７１２に並列にロードする。相互接続ネットワーク７１０は、選択した（または唯一の）モードのアクセスパターンを実装する。
【００９９】
ステップ１６０８から、方法１６００は、後続のステップを同時に実行する。ステップ１６１６において、制御回路７１４は、シフトレジスタ７１２からの画像サンプルをシフトアウトすることによって、サンプルストリームを生成する。サンプルは、サンプルクロックに従ってシフトアウトされる。同時に、ステップ１６１０において、行セレクタ７０６は、処理されるさらなる行が現在の画像ブロックに存在するか否かを判断する。さらに行が存在する場合、方法１６００は、ステップ６１４に進み、行セレクタ７０６は、選択した行を行バッファ７０８にロードする。さらなる行が存在しない場合、方法１６００は、ステップ１６１２に進み、行セレクタ７０６は、入力バッファを切り替え、読み取り制御回路７０３は、新しい画像データを以前に使用した入力バッファにロードする。方法１６００は、ステップ１６０８に戻り、繰り返される。
【０１００】
図１７は、一例に従って、画像プリプロセッサ６０４を設計するための方法１７００を示す流れ図である。方法１７００は、設計ツール１０４を使用して、コンピュータシステム１０２などのコンピュータシステム上で実行することができる。方法１７００は、ステップ１７０２から始まる。ステップ１７０２において、設計ツール１０４は、１つ以上の畳み込み層のフィルタ、ストライドおよび拡張パラメータを識別する。ステップ１７０４において、設計ツールは、ステップ１７０２において識別されたパラメータセットに基づいて、行バッファ７０８のアクセスパターンを決定する。ステップ１７０６において、設計ツール１０４は、決定されたアクセスパターンに基づいて、行バッファ７０８の記憶位置７０９をシフトレジスタ７１２に接続するように、相互接続ネットワーク７１０を生成する。省略可能なステップ１７０８において、設計ツール１０４は、複数のアクセスパターンをサポートするように、マルチプレクサ７２０を相互接続ネットワーク７１０に追加する。
【０１０１】
上記は、特定の例に関するものであるが、本発明の基本的な範囲から逸脱することなく、他の例およびさらなる例を考案することができ、本発明の範囲は、以下の特許請求の範囲によって決定される。
【図１】
2020537788.tif 000004
【図２】
2020537788.tif 000005
【図３】
2020537788.tif 000006
【図４】
2020537788.tif 000007
【図５】
2020537788.tif 000008
【図６】
2020537788.tif 000009
【図７】
2020537788.tif 000010
【図８Ａ】
2020537788.tif 000011
【図８Ｂ】
2020537788.tif 000012
【図９】
2020537788.tif 000013
【図１０】
2020537788.tif 000014
【図１１】
2020537788.tif 000015
【図１２Ａ】
2020537788.tif 000016
【図１２Ｂ】
2020537788.tif 000017
【図１３】
2020537788.tif 000018
【図１４Ａ】
2020537788.tif 000019
【図１４Ｂ】
2020537788.tif 000020
【図１５】
2020537788.tif 000021
【図１６】
2020537788.tif 000022
【図１７】
2020537788.tif 000023
【手続補正書】
【提出日】令和1年11月6日(2019.11.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
画像データを複数の画像サンプルストリームにフォーマットするためのプリプロセッサ回路であって、
前記画像データの複数行を記憶し、前記複数行のうちのある行を出力するように構成された第１のバッファと、
前記第１のバッファに連結され、各々が前記第１のバッファによって出力された前記行の画像サンプルを記憶するための複数の記憶位置を含む第２のバッファと、
複数のシフトレジスタと、
複数の接続を含む相互接続ネットワークとを含み、各接続は、前記複数のシフトレジスタの各シフトレジスタを前記複数の記憶位置のうち２つ以上の記憶位置に連結し、前記複数の記憶位置のうち１つ以上の記憶位置は、各接続がシフトレジスタを前記第２バッファ内の異なるパターンの記憶位置に連結するように、前記複数の接続のうち２つ以上の接続に連結され、
前記複数の接続に基づいて前記複数の画像サンプルを前記複数のシフトレジスタにロードし、前記複数のシフトレジスタをシフトすることによって、前記複数の画像サンプルストリームを出力するように構成された制御回路とを含む、プリプロセッサ回路。
【請求項２】
前記複数の接続は、複数の第１の接続であり、
前記相互接続ネットワークは、複数のマルチプレクサを含み、
各マルチプレクサは、前記複数の第１の接続の各々に連結された第１の入力と、前記複数のシフトレジスタの各々に連結された出力とを含む、請求項１に記載のプリプロセッサ回路。
【請求項３】
前記相互接続ネットワークは、複数の第２の接続を含み、
前記第２の接続の各々は、前記複数の記憶位置のうち２つ以上の記憶位置を前記複数のマルチプレクサの各々に連結された第２の入力に連結し、
前記複数の記憶位置のうち１つ以上の記憶位置は、前記複数の第２の接続のうち２つ以上に連結されている、請求項２に記載のプリプロセッサ回路。
【請求項４】
前記制御回路は、前記複数のマルチプレクサを制御して、前記複数の第１の接続または前記複数の第２の接続のうち１つの接続を選択するように、前記相互接続ネットワークのモードを設定するように構成されている、請求項３に記載のプリプロセッサ回路。
【請求項５】
各接続は、前記複数のシフトレジスタの各シフトレジスタを異なるパターンの前記複数の記憶位置に連結する、請求項１に記載のプリプロセッサ回路。
【請求項６】
前記複数の接続のうち第１の接続を介して前記複数のシフトレジスタのうち第１のシフトレジスタに連結された前記複数の記憶位置のパターンは、前記複数の接続のうち第２の接続を介して前記複数のシフトレジスタのうち第２のシフトレジスタに連結された前記複数の記憶位置のパターンと重複する、請求項５に記載のプリプロセッサ回路。
【請求項７】
前記異なるパターンの前記複数の記憶位置は、前記画像データとフィルタとの間の畳み込みを示すパラメータによって定義され、
前記パラメータは、前記フィルタの幅、水平ストライド、および水平拡張を含む、請求項５に記載のプリプロセッサ回路。
【請求項８】
集積回路であって、
請求項１から７のいずれか１項に記載のプリプロセッサ回路を含み、
画像データを記憶するメモリにアクセスするように構成されたメモリコントローラと、
前記画像プリプロセッサに連結され、前記複数の画像サンプルストリームを処理するように構成されたプロセッサとをさらに含む、集積回路。
【請求項９】
前記プロセッサは、データ処理ユニットのシストリックアレイである、請求項８に記載の集積回路。
【請求項１０】
画像データを複数の画像サンプルストリームにフォーマットする方法であって、
前記画像データの複数行および前記複数行のうち出力された行を、第１のバッファに記憶することと、
前記第１のバッファによって出力された前記行に対応する複数の画像サンプルを、複数の記憶位置を有する第２のバッファに記憶することと、
相互接続ネットワークの複数の接続に基づいて、前記複数の画像サンプルを複数のシフトレジスタにロードすることとを含み、各接続は、前記複数のシフトレジスタの各シフトレジスタを前記複数の記憶位置のうち２つ以上の記憶位置に連結し、前記複数の記憶位置のうち１つ以上の記憶位置は、各接続がシフトレジスタを前記第２バッファ内の異なるパターンの記憶位置に連結するように、前記複数の接続のうち２つ以上の接続に連結され、
前記複数のシフトレジスタをシフトすることによって、前記複数の画像サンプルストリームを出力することを含む、方法。
【請求項１１】
各接続は、前記複数のシフトレジスタの各シフトレジスタを異なるパターンの前記複数の記憶位置に連結する、請求項１０に記載の方法。
【請求項１２】
前記異なるパターンの前記複数の記憶位置は、前記画像データとフィルタとの間の畳み込みを示すパラメータによって定義され、
前記パラメータは、前記フィルタの幅、水平ストライド、および水平拡張を含む、請求項１１に記載の方法。
【請求項１３】
前記複数の接続は、複数の第１の接続であり、
前記相互接続ネットワークは、複数のマルチプレクサを含み、
各マルチプレクサは、前記複数の第１の接続の各々に連結された第１の入力と、前記複数のシフトレジスタの各々に連結された出力とを含む、請求項１０に記載の方法。
【請求項１４】
前記相互接続ネットワークは、複数の第２の接続を含み、
前記第２の接続の各々は、前記複数の記憶位置のうち２つ以上の記憶位置を前記複数のマルチプレクサの各々に連結された第２の入力に連結し、
前記複数の記憶位置のうち１つ以上の記憶位置は、前記複数の第２の接続のうち２つ以上に連結されている、請求項１３に記載の方法。
【国際調査報告】
2020537788.tif 000024
2020537788.tif 000025
2020537788.tif 000026