(57)【要約】  回路装置が、ＭＡＣ回路（２００−０、２００−１、２００−２、２００−１５、２００−ｎ、２０１−０、２０１−１、２０１−２、２０１−１５、２０１−ｎ、２０２−０、２０２−１、２０２−２、２０２−１５、２０２−ｎ、２３１−０、２３１−１、２３１−２、２３１−１５、２３１−ｎ）のアレイ（１０６）を含み、各ＭＡＣ回路が、複数のカーネルの記憶のために構成されたキャッシュ（３３２）を含む。ＭＡＣ回路は、第１のレート（７１８）においてＩＦＭのデータ要素の第１のセットを受信するように構成される。ＭＡＣ回路は、第１のＭＡＣサイクル（７１０）中に、データ要素の第１のセットと、第１のＯＦＭ深度インデックスに関連するカーネルのうちの第１のカーネルとに対して第１のＭＡＣ演算を実施することであって、ＭＡＣサイクルのレートが第１のレートよりも速い、第１のＭＡＣ演算を実施することを行うように構成される。ＭＡＣ回路は、第１のＭＡＣサイクルに連続的に続く第２のＭＡＣサイクル（７１０）中に、データ要素の第１のセットと、第２のＯＦＭ深度インデックスに関連するカーネルのうちの第２のカーネルとに対して第２のＭＡＣ演算を実施するように構成される。【選択図】図２
2021531572.tif 000002
【特許請求の範囲】
【請求項１】
積和（ＭＡＣ）回路のアレイ
を備える回路装置であって、各ＭＡＣ回路が、複数のカーネルの記憶のために構成されたキャッシュを含み、前記ＭＡＣ回路は、
第１のレートにおいて入力特徴マップ（ＩＦＭ）のデータ要素の第１のセットを受信することと、
第１のＭＡＣサイクル中に、前記データ要素の前記第１のセットと、第１の出力特徴マップ（ＯＦＭ）深度インデックス（ｄ２）に関連する前記カーネルのうちの第１のカーネル（Ｈ）とに対して第１のＭＡＣ演算を実施することであって、ＭＡＣサイクルのレートが前記第１のレートよりも速い、第１のＭＡＣ演算を実施することと、
前記第１のＭＡＣサイクルに連続的に続く第２のＭＡＣサイクル中に、前記データ要素の前記第１のセットと、第２のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第２のカーネル（Ｈ）とに対して第２のＭＡＣ演算を実施することと
を行うように構成された、回路装置。
【請求項２】
前記アレイに結合され、
前記キャッシュ中の前記第１のカーネルの第１のアドレスを受信することと、
前記第１のアドレスに基づいて前記キャッシュ中の前記第２のカーネルの第２のアドレスを生成することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に提供することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に提供することと
を行うように構成された、制御回路をさらに備える、請求項１に記載の回路装置。
【請求項３】
前記制御回路は、前記第１のアドレスがブロックデータ転送の開始アドレスにマッピングされたことに応答して、前記第２のアドレスを生成するために、前記第１のアドレスを固定値だけ増分するように構成され、
前記制御回路は、前記第１のアドレスがブロックデータ転送の終了アドレスにマッピングされたことに応答して、前記第２のアドレスを生成するために、前記第１のアドレスを固定値だけ減分するように構成された、
請求項２に記載の回路装置。
【請求項４】
前記アレイの前記ＭＡＣ回路が、前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記データ要素の前記第１のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施するように構成された、請求項１から３のいずれか一項に記載の回路装置。
【請求項５】
前記アレイの前記ＭＡＣ回路が、前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記データ要素の前記第１のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施するように構成され、前記回路装置は、前記アレイに結合され、
前記キャッシュ中の前記カーネルのうちの前記第１のカーネルの第１のアドレスを受信することと、
前記第１のアドレスに基づいて前記キャッシュ中の前記カーネルのうちの前記第２のカーネルの第２のアドレスを生成することと、
前記第１のアドレスに基づいて前記キャッシュ中の前記カーネルのうちの前記第３のカーネルの第３のアドレスを生成することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に提供することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に提供することと、
前記第３のＭＡＣサイクル中に前記第３のアドレスを前記ＭＡＣ回路に提供することと
を行うように構成された、第１の制御回路をさらに備える、請求項１から３のいずれか一項に記載の回路装置。
【請求項６】
前記アレイの前記ＭＡＣ回路が、前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記データ要素の前記第１のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施するように構成され、前記回路装置は、前記アレイに結合され、
前記キャッシュ中の前記カーネルのうちの前記第１のカーネルの第１のアドレスを受信することと、
第２のアドレスを生成するために、前記第１のアドレスを固定値だけ増分することと、
第３のアドレスを生成するために、前記第２のアドレスを前記固定値だけ増分することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に提供することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に提供することと、
前記第３のＭＡＣサイクル中に前記第３のアドレスを前記ＭＡＣ回路に提供することと
を行うように構成された、第１の制御回路をさらに備える、請求項１から３のいずれか一項に記載の回路装置。
【請求項７】
前記アレイの前記ＭＡＣ回路が、前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記データ要素の前記第１のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施するように構成され、前記回路装置は、
前記アレイに結合され、
前記キャッシュ中の前記カーネルのうちの前記第１のカーネルの第１のアドレスを受信することと、
第２のアドレスを生成するために、前記第１のアドレスを固定値だけ増分することと、
第３のアドレスを生成するために、前記第２のアドレスを前記固定値だけ増分することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に提供することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に提供することと、
前記第３のＭＡＣサイクル中に前記第３のアドレスを前記ＭＡＣ回路に提供することと
を行うように構成された、第１の制御回路と、
前記アレイに結合され、
前記第１のレートに等しいかまたは前記第１のレートよりも速い入力レートにおいて、前記ＩＦＭの前記データ要素の前記第１のセットおよび前記ＩＦＭの前記データ要素の第２のセットを受信することと、
入力制御信号に応答して、前記データ要素の前記第２のセットを前記ＭＡＣ回路に提供することを少なくともＭＡＣサイクルだけ遅延させることと
を行うように構成された、第２の制御回路と
をさらに備える、請求項１から３のいずれか一項に記載の回路装置。
【請求項８】
前記アレイの前記ＭＡＣ回路が、
前記第１のレートよりも遅い第２のレートにおいて、前記ＩＦＭの前記データ要素の第２のセットを受信することと、
前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記データ要素の前記第２のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することと、
前記第３のＭＡＣサイクルに連続的に続く第４のＭＡＣサイクル中に、前記データ要素の前記第２のセットと、第４のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第４のカーネル（Ｈ）とに対して第４のＭＡＣ演算を実施することと、
前記第４のＭＡＣサイクルに連続的に続く第５のＭＡＣサイクル中に、前記データ要素の前記第２のセットと、第５のＯＦＭ深度インデックス（ｄ２）に関連する前記カーネルのうちの第５のカーネル（Ｈ）とに対して第５のＭＡＣ演算を実施することと
を行うように構成された、請求項１から３のいずれか一項に記載の回路装置。
【請求項９】
第１のレートにおいて、入力特徴マップ（ＩＦＭ）のデータ要素の第１のセットを積和（ＭＡＣ）回路のアレイに入力することと、
第１のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第１のセットと、前記ＭＡＣ回路のキャッシュに記憶された第１のカーネル（Ｈ）とに対して第１のＭＡＣ演算を実施することであって、前記第１のカーネルが第１の出力特徴マップ（ＯＦＭ）深度インデックス（ｄ２）に関連し、ＭＡＣサイクルのレートが前記第１のレートよりも速い、第１のＭＡＣ演算を実施することと、
前記第１のＭＡＣサイクルに連続的に続く第２のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第１のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第２のカーネル（Ｈ）とに対して第２のＭＡＣ演算を実施することであって、前記第２のカーネルが第２のＯＦＭ深度インデックス（ｄ２）に関連する、第２のＭＡＣ演算を実施することと
を含む、方法。
【請求項１０】
前記キャッシュ中の前記第１のカーネルの第１のアドレスを、前記アレイに結合された制御回路に入力することと、
前記制御回路によって、前記第１のアドレスに基づいて前記キャッシュ中の前記第２のカーネルの第２のアドレスを生成することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に入力することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に入力することと
をさらに含む、請求項９に記載の方法。
【請求項１１】
前記第２のアドレスを生成することは、前記第１のアドレスがデータブロック転送の開始アドレスにマッピングされたことに応答して、前記第１のアドレスを固定値だけ増分することを含み、
前記第２のアドレスを生成することは、前記第１のアドレスがデータブロック転送の終了アドレスにマッピングされたことに応答して、前記第１のアドレスを固定値だけ減分することを含む、
請求項１０に記載の方法。
【請求項１２】
前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第１のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することであって、前記第３のカーネルが第３のＯＦＭ深度インデックス（ｄ２）に関連する、第３のＭＡＣ演算を実施することをさらに含む、請求項９から１１のいずれか一項に記載の方法。
【請求項１３】
前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第１のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することであって、前記第３のカーネルが第３のＯＦＭ深度インデックス（ｄ２）に関連する、第３のＭＡＣ演算を実施することと、
前記キャッシュ中の前記カーネルのうちの前記第１のカーネルの第１のアドレスを、前記アレイに結合された第１の制御回路に入力することと、
前記第１の制御回路によって、前記第１のアドレスに基づいて前記キャッシュ中の前記第２のカーネルの第２のアドレスを生成することと、
前記第１の制御回路によって、前記第１のアドレスに基づいて前記キャッシュ中の前記第３のカーネルの第３のアドレスを生成することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に入力することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に入力することと、
前記第３のＭＡＣサイクル中に前記第３のアドレスを前記ＭＡＣ回路に入力することと
をさらに含む、請求項９から１１のいずれか一項に記載の方法。
【請求項１４】
前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第１のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することであって、前記第３のカーネルが第３のＯＦＭ深度インデックス（ｄ２）に関連する、第３のＭＡＣ演算を実施することと、
前記キャッシュ中の前記カーネルのうちの前記第１のカーネルの第１のアドレスを、前記アレイに結合された第１の制御回路に入力することと、
前記第１の制御回路によって、前記第１のアドレスに基づいて前記キャッシュ中の前記第２のカーネルの第２のアドレスを生成することと、
前記第１の制御回路によって、前記第１のアドレスに基づいて前記キャッシュ中の前記第３のカーネルの第３のアドレスを生成することと、
前記第１のＭＡＣサイクル中に前記第１のアドレスを前記ＭＡＣ回路に入力することと、
前記第２のＭＡＣサイクル中に前記第２のアドレスを前記ＭＡＣ回路に入力することと、
前記第３のＭＡＣサイクル中に前記第３のアドレスを前記ＭＡＣ回路に入力することと、
前記第１のレートに等しいかまたは前記第１のレートよりも速い入力レートにおいて、前記ＩＦＭの前記データ要素の前記第１のセットおよび前記ＩＦＭの前記データ要素の第２のセットを、前記アレイに結合された第２の制御回路に入力することと、
前記第２の制御回路によって、前記第２の制御回路への入力制御信号に応答して、前記データ要素の前記第２のセットを前記ＭＡＣ回路に入力することを少なくともＭＡＣサイクルだけ遅延させることと
をさらに含む、請求項９から１１のいずれか一項に記載の方法。
【請求項１５】
前記第１のレートよりも遅い第２のレートにおいて、前記ＩＦＭの前記データ要素の第２のセットを前記アレイの前記ＭＡＣ回路に入力することと、
前記第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第２のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することであって、前記第３のカーネルが第３のＯＦＭ深度インデックス（ｄ２）に関連する、第３のＭＡＣ演算を実施することと、
前記第３のＭＡＣサイクルに連続的に続く第４のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第２のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第４のカーネル（Ｈ）とに対して第４のＭＡＣ演算を実施することであって、前記第４のカーネルが第４のＯＦＭ深度インデックス（ｄ２）に関連する、第４のＭＡＣ演算を実施することと、
前記第４のＭＡＣサイクルに連続的に続く第５のＭＡＣサイクル中に、前記ＭＡＣ回路によって、前記データ要素の前記第２のセットと、前記ＭＡＣ回路の前記キャッシュに記憶された第５のカーネル（Ｈ）とに対して第５のＭＡＣ演算を実施することであって、前記第５のカーネルが第５のＯＦＭ深度インデックス（ｄ２）に関連する、第５のＭＡＣ演算を実施することと
をさらに含む、請求項９から１１のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、積和（ＭＡＣ：ｍｕｌｔｉｐｌｙ−ａｎｄ−ａｃｃｕｍｕｌａｔｅ）回路のアレイの連続するＭＡＣサイクル中に異なるカーネルを使用してデータのセットに対してＭＡＣ演算を実施することに関する。
【背景技術】
【０００２】
ニューラルネットワークなどの処理回路が、様々な異なる問題に対するソリューションを提供する。畳み込みニューラルネットワーク（ＣＮＮ：ｃｏｎｖｏｌｕｔｉｏｎａｌ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ）が、たとえば、画像処理のために使用され得る。ＣＮＮは、グラフィックス処理ユニット（ＧＰＵ）を使用して実装され、いくつかの同様のタスクをグループ化することと、タスクのグループをバッチとして計算することとによって計算コストを低減するためにバッチ処理手法を使用する。スケーラブルな数のストリーミングマルチプロセッサ（ＳＭ）の内部の複数のストリーミングプロセッサ（ＳＰ）コアを並列に使用することによって、タスクのバッチが計算され得る。ＧＰＵのコントローラの実装コストはいくつかのタスクにわたって償還され得るが、ＧＰＵが、ＣＮＮの計算効率を維持するためにバッチモードでタスクを一緒に処理する前にすべてのタスクが準備ができるのを待たなければならないので、バッチサイズが増加するにつれて、ＣＮＮのレイテンシは増加することになる。
【０００３】
限定はしないが、デジタル信号プロセッサ（ＤＳＰ）、汎用コンピュータプロセッサ、プログラマブル集積回路、プログラマブル論理デバイス（ＰＬＤ）、およびシステムオンチップ（ＳｏＣ）デバイスを含む、ＣＮＮを実装することができる様々な異なる回路がある。ＰＬＤは、指定された論理関数を実施するようにプログラムされ得るプログラマブル集積回路（ＩＣ）のタイプである。ＰＬＤの１つのタイプ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、プログラマブルタイルのアレイを含むことができる。これらのプログラマブルタイルは、たとえば、入出力ブロック（ＩＯＢ）、構成可能論理ブロック（ＣＬＢ）、専用ブロックランダムアクセスメモリ（ＢＲＡＭ）、乗算器、デジタル信号処理ブロック（ＤＳＰ）、プロセッサ、クロックマネージャ、遅延ロックループ（ＤＬＬ）、周辺構成要素相互接続（ＰＣＩ）などのバスまたはネットワークインターフェース、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、イーサネットなどを含むことができる、様々なタイプの論理ブロックを備える。いくつかのデバイスは、単一のＩＣチップ上のコンピュータシステム全体として効果的に働くのに十分な構成要素および機能性を含む。そのような機能性をもつデバイスは、ＳｏＣと呼ばれることがある。いくつかのＳｏＣデバイスは、様々なＰＬＤによって提供されるプログラマブル論理と同様であるプログラマブル論理を含むことができる。
【０００４】
従来の実装形態は、しばしば、処理ユニットとメモリとの間のボトルネックという欠点がある。したがって、データは、処理回路を十分に利用するのに十分高速に提供されないことがある。
【発明の概要】
【０００５】
回路装置（ｃｉｒｃｕｉｔ  ａｒｒａｎｇｅｍｅｎｔ）が積和（ＭＡＣ）回路のアレイを含み、各ＭＡＣ回路が、複数のカーネルの記憶のために構成されたキャッシュを含む。ＭＡＣ回路は、第１のレートにおいて入力特徴マップ（ＩＦＭ：ｉｎｐｕｔ  ｆｅａｔｕｒｅ  ｍａｐ）のデータ要素の第１のセットを受信するように構成される。ＭＡＣ回路は、第１のＭＡＣサイクル中に、データ要素の第１のセットと、第１の出力特徴マップ（ＯＦＭ：ｏｕｔｐｕｔ  ｆｅａｔｕｒｅ  ｍａｐ）深度インデックス（ｄ２）に関連するカーネルのうちの第１のカーネル（Ｈ）とに対して第１のＭＡＣ演算を実施することであって、ＭＡＣサイクルのレートが第１のレートよりも速い、第１のＭＡＣ演算を実施することを行うように構成される。ＭＡＣ回路は、第１のＭＡＣサイクルに連続的に続く第２のＭＡＣサイクル中に、データ要素の第１のセットと、第２のＯＦＭ深度インデックス（ｄ２）に関連するカーネルのうちの第２のカーネル（Ｈ）とに対して第２のＭＡＣ演算を実施することを行うように構成される。
【０００６】
回路装置は、アレイに結合された制御回路を含むことができる。制御回路は、キャッシュ中の第１のカーネルの第１のアドレスを受信することと、第１のアドレスに基づいてキャッシュ中の第２のカーネルの第２のアドレスを生成することと、第１のＭＡＣサイクル中に第１のアドレスをＭＡＣ回路に提供することと、第２のＭＡＣサイクル中に第２のアドレスをＭＡＣ回路に提供することとを行うように構成される。
【０００７】
制御回路はまた、第１のアドレスがブロックデータ転送の開始アドレスにマッピングされたことに応答して、第２のアドレスを生成するために、第１のアドレスを固定値だけ増分するように構成され得る。
【０００８】
制御回路はまた、第１のアドレスがブロックデータ転送の終了アドレスにマッピングされたことに応答して、第２のアドレスを生成するために、第１のアドレスを固定値だけ減分するように構成され得る。
【０００９】
アレイのＭＡＣ回路は、第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、データ要素の第１のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連するカーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施するように構成され得る。
【００１０】
第１の制御回路がアレイに結合され得る。第１の制御回路は、キャッシュ中のカーネルのうちの第１のカーネルの第１のアドレスを受信することと、第１のアドレスに基づいてキャッシュ中のカーネルのうちの第２のカーネルの第２のアドレスを生成することと、第１のアドレスに基づいてキャッシュ中のカーネルのうちの第３のカーネルの第３のアドレスを生成することと、第１のＭＡＣサイクル中に第１のアドレスをＭＡＣ回路に提供することと、第２のＭＡＣサイクル中に第２のアドレスをＭＡＣ回路に提供することと、第３のＭＡＣサイクル中に第３のアドレスをＭＡＣ回路に提供することとを行うように構成される。
【００１１】
第１の制御回路はまた、第２のアドレスを生成するために、第１のアドレスを固定値だけ増分することと、第３のアドレスを生成するために、第２のアドレスを固定値だけ増分することとを行うように構成され得る。
【００１２】
回路装置は、アレイに結合された第２の制御回路を含むことができる。第２の制御回路は、第１のレートに等しいかまたは第１のレートよりも速い入力レートにおいて、ＩＦＭのデータ要素の第１のセットおよびＩＦＭのデータ要素の第２のセットを受信することと、入力制御信号に応答して、データ要素の第２のセットをＭＡＣ回路に提供することを少なくともＭＡＣサイクルだけ遅延させることとを行うように構成される。
【００１３】
アレイのＭＡＣ回路は、第１のレートよりも遅い第２のレートにおいて、ＩＦＭのデータ要素の第２のセットを受信することと、第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、データ要素の第２のセットと、第３のＯＦＭ深度インデックス（ｄ２）に関連するカーネルのうちの第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することと、第３のＭＡＣサイクルに連続的に続く第４のＭＡＣサイクル中に、データ要素の第２のセットと、第４のＯＦＭ深度インデックス（ｄ２）に関連するカーネルのうちの第４のカーネル（Ｈ）とに対して第４のＭＡＣ演算を実施することと、第４のＭＡＣサイクルに連続的に続く第５のＭＡＣサイクル中に、データ要素の第２のセットと、第５のＯＦＭ深度インデックス（ｄ２）に関連するカーネルのうちの第５のカーネル（Ｈ）とに対して第５のＭＡＣ演算を実施することとを行うように構成され得る。
【００１４】
回路装置のアレイは、アレイのＭＡＣ回路の各列に結合された複数のコンテキスト切替えアキュムレータを含むことができる。複数のコンテキスト切替えアキュムレータは、記憶された値を、アキュムレータに直接結合されたＭＡＣ回路の出力と累算することと、アキュムレータに直接結合されたＭＡＣ回路の出力で初期化することとを行うように構成される。
【００１５】
方法が、第１のレートにおいて、入力特徴マップ（ＩＦＭ）のデータ要素の第１のセットを積和（ＭＡＣ）回路のアレイに入力することを含む。本方法は、第１のＭＡＣサイクル中に、ＭＡＣ回路によって、データ要素の第１のセットと、ＭＡＣ回路のキャッシュに記憶された第１のカーネル（Ｈ）とに対して第１のＭＡＣ演算を実施することであって、第１のカーネルが第１の出力特徴マップ（ＯＦＭ）深度インデックス（ｄ２）に関連し、ＭＡＣサイクルのレートが第１のレートよりも速い、第１のＭＡＣ演算を実施することを含む。本方法は、第１のＭＡＣサイクルに連続的に続く第２のＭＡＣサイクル中に、ＭＡＣ回路によって、データ要素の第１のセットと、ＭＡＣ回路のキャッシュに記憶された第２のカーネル（Ｈ）とに対して第２のＭＡＣ演算を実施することであって、第２のカーネルが第２のＯＦＭ深度インデックス（ｄ２）に関連する、第２のＭＡＣ演算を実施することを含む。
【００１６】
本方法は、キャッシュ中の第１のカーネルの第１のアドレスを、アレイに結合された制御回路に入力することと、制御回路によって、第１のアドレスに基づいてキャッシュ中の第２のカーネルの第２のアドレスを生成することと、第１のＭＡＣサイクル中に第１のアドレスをＭＡＣ回路に入力することと、第２のＭＡＣサイクル中に第２のアドレスをＭＡＣ回路に入力することとを含むことができる。
【００１７】
第２のアドレスを生成することは、第１のアドレスがデータブロック転送の開始アドレスにマッピングされたことに応答して、第１のアドレスを固定値だけ増分することを含むことができる。
【００１８】
第２のアドレスを生成することは、第１のアドレスがデータブロック転送の終了アドレスにマッピングされたことに応答して、第１のアドレスを固定値だけ減分することを含むことができる。
【００１９】
本方法は、第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、ＭＡＣ回路によって、データ要素の第１のセットと、ＭＡＣ回路のキャッシュに記憶された第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することであって、第３のカーネルが第３のＯＦＭ深度インデックス（ｄ２）に関連する、第３のＭＡＣ演算を実施することを含むことができる。
【００２０】
本方法は、キャッシュ中のカーネルのうちの第１のカーネルの第１のアドレスを、アレイに結合された第１の制御回路に入力することと、第１の制御回路によって、第１のアドレスに基づいてキャッシュ中の第２のカーネルの第２のアドレスを生成することと、第１の制御回路によって、第１のアドレスに基づいてキャッシュ中の第３のカーネルの第３のアドレスを生成することと、第１のＭＡＣサイクル中に第１のアドレスをＭＡＣ回路に入力することと、第２のＭＡＣサイクル中に第２のアドレスをＭＡＣ回路に入力することと、第３のＭＡＣサイクル中に第３のアドレスをＭＡＣ回路に入力することとを含むことができる。
【００２１】
第２のアドレスを生成することは、第１のアドレスを固定値だけ増分することと、第２のアドレスを固定値だけ増分することとを含むことができる。
【００２２】
本方法は、第１のレートに等しいかまたは第１のレートよりも速い入力レートにおいて、ＩＦＭのデータ要素の第１のセットおよびＩＦＭのデータ要素の第２のセットを、アレイに結合された第２の制御回路に入力することと、第２の制御回路によって、第２の制御回路への入力制御信号に応答して、データ要素の第２のセットをＭＡＣ回路に入力することを少なくともＭＡＣサイクルだけ遅延させることとを含むことができる。
【００２３】
本方法は、第１のレートよりも遅い第２のレートにおいて、ＩＦＭのデータ要素の第２のセットをアレイのＭＡＣ回路に入力することと、第２のＭＡＣサイクルに連続的に続く第３のＭＡＣサイクル中に、ＭＡＣ回路によって、データ要素の第２のセットと、ＭＡＣ回路のキャッシュに記憶された第３のカーネル（Ｈ）とに対して第３のＭＡＣ演算を実施することであって、第３のカーネルが第３のＯＦＭ深度インデックス（ｄ２）に関連する、第３のＭＡＣ演算を実施することと、第３のＭＡＣサイクルに連続的に続く第４のＭＡＣサイクル中に、ＭＡＣ回路によって、データ要素の第２のセットと、ＭＡＣ回路のキャッシュに記憶された第４のカーネル（Ｈ）とに対して第４のＭＡＣ演算を実施することとを含むことができる。第４のカーネルは第４のＯＦＭ深度インデックス（ｄ２）に関連する。本方法は、第４のＭＡＣサイクルに連続的に続く第５のＭＡＣサイクル中に、ＭＡＣ回路によって、データ要素の第２のセットと、ＭＡＣ回路のキャッシュに記憶された第５のカーネル（Ｈ）とに対して第５のＭＡＣ演算を実施することであって、第５のカーネルが第５のＯＦＭ深度インデックス（ｄ２）に関連する、第５のＭＡＣ演算を実施することを含むことができる。
【００２４】
本方法は、アレイのＭＡＣ回路の各列に結合された複数のコンテキスト切替えアキュムレータによって、記憶された値を、アキュムレータに直接結合されたＭＡＣ回路の出力と累算することと、アキュムレータに直接結合されたＭＡＣ回路の出力でアキュムレータを初期化することとを含むことができる。
【００２５】
他の特徴は、以下の発明を実施するための形態および特許請求の範囲の考慮から認識されよう。
【００２６】
回路装置および方法の様々な態様および特徴は、以下の発明を実施するための形態を検討し、以下の図面を参照すると明らかになろう。
【図面の簡単な説明】
【００２７】
【図１】コントローラと、制御ギアボックスと、データギアボックスと、ＭＡＣ回路のアレイとを含む例示的な回路装置のブロック図である。
【図２】ＭＡＣ回路の例示的なアレイのブロック図である。
【図３】図２のＭＡＣ回路のアレイの例示的なＭＡＣ回路のブロック図である。
【図４】例示的なＯＦＭ深度スプリッティングを利用する図２のアレイのブロック図である。
【図５Ａ】カーネルの行および列インデックス（ｕ，ｖ）によって反復される第１のＯＦＭパスｐ０＝０についての左下ＭＡＣ回路の乗算出力値ＭＵＬシーケンスを示す図である。
【図５Ｂ】ＩＦＭ位相インデックスｎｉによって反復される第１のＯＦＭパスｐ０＝０についての左下ＭＡＣ回路の乗算出力値ＭＵＬシーケンスを示す図である。
【図５Ｃ】カーネルの行および列インデックス（ｕ，ｖ）によって反復される第１のＯＦＭパスｐ０＝０の左上ＭＡＣ回路についての累算出力値ＭＡＣシーケンスを示す図である。
【図５Ｄ】ＩＦＭ位相インデックスｎｉによって反復される第１のＯＦＭパスｐ０＝０の左上ＭＡＣ回路についての累算出力値ＭＡＣシーケンスを示す図である。
【図６Ａ】ＯＦＭの行および列インデックス（ｒ，ｃ）によって反復される最左アキュムレータのＯＦＭ出力シーケンスを示す図である。
【図６Ｂ】ＯＦＭ深度インデックスｄ２によって反復される最左アキュムレータのＯＦＭ出力シーケンスを示す図である。
【図７】例示的な制御ギアボックスのブロック図である。
【図８】ＭＡＣ回路中のカーネルキャッシュの例示的なレイアウトを示す図である。
【図９】例示的なデータギアボックスのブロック図である。
【図１０】ＯＦＭパスが２つのＯＦＭ位相を含む、図１の回路装置の例示的なタイミング図である。
【図１１】ＯＦＭパスが３つのＯＦＭ位相を含む、図１の回路装置の例示的なタイミング図である。
【図１２】ＯＦＭパスが３つのＯＦＭ位相を含むことから２つのＯＦＭ位相を含むことに切り替わる、図１の回路装置の例示的なタイミング図である。
【図１３】例示的な入力活性化関数ユニット（ＩＡＦＵ：ｉｎｐｕｔ  ａｃｔｉｖａｔｉｏｎ  ｆｕｎｃｔｉｏｎ）を示す図である。
【図１４】開示される回路およびプロセスが実装され得る、プログラマブル集積回路（ＩＣ）を示す図である。
【発明を実施するための形態】
【００２８】
以下の説明では、本明細書で提示される特定の例について説明するために、多数の具体的な詳細が記載される。しかしながら、１つまたは複数の他の例および／またはこれらの例の変形形態が、下記のすべての具体的な詳細なしに実施され得ることは、当業者に明らかであろう。他の事例では、本明細書の例の説明を不明瞭にしないように、よく知られている特徴は詳細に説明されていない。説明しやすいように、同じ要素または同じ要素の追加のインスタンスを指すために、異なる図において同じ参照番号が使用され得る。
【００２９】
畳み込みニューラルネットワーク（ＣＮＮ）などのニューラルネットワークの計算効率を改善することは、計算複雑さおよび計算速度の増加に付随し得る。計算効率は、ニューラルネットワークの積和（ＭＡＣ）回路の計算速度に等しい周波数において演算するコントローラを使用することによって改善され得、それにより、ＭＡＣ回路ができる限りビジーに保たれることが可能になる。しかしながら、ＭＡＣ回路の速度に適応するために、コントローラは、ＭＡＣ回路の計算複雑さに比例するアドレス生成の複雑さを扱うことが可能でなければならない。コントローラの論理複雑さと速度の両方を増加させることは、実装のコストを指数関数的に増加させる。しかしながら、制御回路の論理がＭＡＣレートにおいて演算する場合でも、コントローラによってデータがＭＡＣ回路に提供されるレートは、メモリなどの他の回路によって限定され得る。
【００３０】
開示される回路装置および方法は、ＭＡＣ回路のコントローラのより遅い演算周波数を維持しながら、ＭＡＣ処理周波数（以下、ＭＡＣレートと呼ばれる）において演算しながら、ＣＮＮのＭＡＣ回路のアレイをできる限りビジーに保つための手法を提供する。ＭＡＣレートは、ＭＡＣ回路に提供されるクロック信号に基づき得る。ＣＮＮの畳み込み（ＣＯＮＶ）層および全結合（ＦＣ）層がＭＡＣ演算を実施する。様々な他の算術演算が、正規化線形ユニット（ＲｅＬＵ：ｒｅｃｔｉｆｉｅｄ  ｌｉｎｅａｒ  ｕｎｉｔ）、プーリング、および正規化（ｎｏｒｍａｌｉｚａｔｉｏｎ）など、ＣＮＮの他の層において実施され得る。本明細書で使用される「ＭＡＣ回路」は、乗算器回路と、アキュムレータ回路と、ＭＡＣ演算において使用されるべきカーネルの記憶のために構成されたキャッシュとの組合せを指す。畳み込み演算が並列に実施され得るので、ＭＡＣ回路のアレイは、畳み込み演算を並列に実施し、ＣＮＮの計算速度を増加させるために使用され得る。アレイのスループットを最大にするために、ＭＡＣ回路の処理サイクル（以下、ＭＡＣサイクルと呼ばれる）は十分に利用され、ＭＡＣレートは最大にされる。
【００３１】
開示される手法の計算効率の増加は、ＭＡＣ回路に提供されるアドレスおよび制御パターンの複雑さを増加させる。開示される手法の実装形態は、ＭＡＣ回路のグローバルメモリおよび／またはキャッシュからデータを読み取り、および／またはＭＡＣ回路のグローバルメモリおよび／またはキャッシュにデータを書き込むためのアレイについての特殊なアドレスパターンを生成する、１つまたは複数の制御回路を含む。制御回路は、ＭＡＣ回路のデータをアドレス指定し、演算のタイミングをとるための特殊な制御パターンを生成する。
【００３２】
開示される手法は、活性化特徴深度をスプリットすることによって、各ＭＡＣ回路中のある数（Ｍ）の並列スレッドを時分割多重化する。制御回路（または「コントローラ」）が、ＭＡＣレートにおいてＭ個のスレッドについてのアドレスおよび制御パターンを生成する。本明細書で使用される「スレッド」は、出力特徴マップの深度インデックスにおける値の計算を指す。アドレスおよび制御パターンは、以下、制御ギアボックスと呼ばれる、別の制御回路によって、ＭＡＣ回路のキャッシュに直接マッピングされた（１つまたは複数の）メモリアドレスに変換され、アドレスおよび制御パターンは、ＭＡＣ回路の処理サイクルごとに更新される。以下、データギアボックスと呼ばれる、別の制御回路は、メモリからのデータ読取りであるレートを、データがＭＡＣ回路に提供される別のレートに適応させる。いくつかの事例では、データギアボックスは、データが読み取られるレートよりも遅いレートにおいて、データをＭＡＣ回路に提供する。いくつかの事例では、制御ギアボックスとデータギアボックスとが制御ワードとアドレスとデータとをＭＡＣ回路に提供するレートは、所与の時点においてＭＡＣ回路中でインターリーブされる並列スレッドの数（Ｍ）に応じて動的に変化する。たとえば、開示される手法は、ＭＡＣ回路中の２つの並列スレッドをインターリーブすることからＭＡＣ回路中の３つの並列スレッドに切り替わることができ、その逆も同様である。
【００３３】
複数のカーネルについてのアドレスが、複数の連続するＭＡＣ演算が、連続するＭＡＣサイクル中にデータ要素のセットに対して実施されることになるように、ＭＡＣ回路の各々のキャッシュ中で記憶され、インターリーブされる。ＭＡＣ演算は、データと制御ワードとアドレスとがＭＡＣ回路に提供されるレートよりも速いレートにおいて実施されるが、コントローラの演算周波数は一定のままである。コントローラは、ＭＡＣレートに正比例する周波数（たとえば、１／Ｍ）において動作する。
【００３４】
開示される手法は、バランスのとれたパイプラインを提供し、リタイミングを容易にするために、レイテンシ（たとえば、サイクルタイムトレードオフ）から制御回路についての初期論理深度を推定する。
【００３５】
図１は、コントローラ１０８と、制御ギアボックス１１０と、データギアボックス１０４と、ＭＡＣ回路のアレイ１０６とを含む例示的な回路装置１００のブロック図を示す。コントローラ１０８は、グローバルメモリ１０２との間のデータアクセスについてのアドレスパターンを生成する。データギアボックス１０４は、グローバルメモリ１０２とＭＡＣ回路のアレイ１０６とに結合される。データギアボックス１０４は、グローバルメモリ１０２から読み取られたデータに関して、コントローラ１０８とアレイ１０６との間のレート適応を実施する。制御ギアボックス１１０は、コントローラ１０８とアレイ１０６とに結合される。制御ギアボックス１１０は、コントローラ１０８からのアドレスおよび制御ワードに関してコントローラ１０８とアレイ１０６との間のレート適応を実施する。アレイ１０６から出力されたデータは、グローバルメモリ１０２に書き込まれる。データギアボックス１０４と制御ギアボックス１１０とアレイ１０６との例示的な演算が、以下の図４〜図１２に関連して説明される。
【００３６】
図２は、ＭＡＣ回路の例示的なアレイのブロック図を示す。図２に示されているアレイは、図１に示されているアレイ１０６に類似することがある。アレイ１０６は、ｍ＋１行とｎ＋１列とにおいて配置されたＭＡＣ回路を含む。アレイ１０６の行０はＭＡＣ回路２００−０、２００−１、２００−２、．．．２００−ｎを含み、アレイ１０６の行１はＭＡＣ回路２０１−０、２０１−１、２０１−２、．．．２０１−ｎを含み、アレイ１０６の行ｍはＭＡＣ回路２３１−０、２３１−１、２３１−２、．．．２３１−ｎを含む。
【００３７】
本開示の少なくとも１つの実装形態では、アレイ１０６の各列は、Ｍ個の時分割多重化されたスレッドに専用である、列のそれぞれの最上ＭＡＣ回路に結合されたＭ個のコンテキスト切替え並列アキュムレータを含む。アキュムレータ２２２−０は、アレイ１０６の列０のＭＡＣ回路２３１−０に結合され、アキュムレータ２２２−１は、列１のＭＡＣ回路２３１−１に結合され、アキュムレータ２２２−２は、列２のＭＡＣ回路２３１−２に結合され、アキュムレータ２２２−ｎは、列ｎのＭＡＣ回路２３１−ｎに結合される。各アキュムレータは、アレイ１０６からの各スレッドについての各累算部分ドット積値を一緒に記憶および加算して、各スレッドについての最終ドット積値を得る。
【００３８】
少なくとも１つの実装形態では、出力活性化関数ユニット（ＯＡＦＵ：ｏｕｔｐｕｔ  ａｃｔｉｖａｔｉｏｎ  ｆｕｎｃｔｉｏｎ  ｕｎｉｔ）が、アレイ１０６のそれぞれの列のアキュムレータに結合される。ＯＡＦＵ２２４−０はアキュムレータ２２２−０に結合され、ＯＡＦＵ２２４−１はアキュムレータ２２４−１に結合され、ＯＡＦＵ２２４−２はアキュムレータ２２２−２に結合され、ＯＡＦＵ２２４−ｎはアキュムレータ２２２−ｎに結合される。各ＯＡＦＵは、ＲｅＬＵ、プーリング、および正規化など、１つまたは複数の活性化関数を、アキュムレータから出力された値に適用する。ＯＡＦＵの出力は、図１に示されているグローバルメモリ１０２などのグローバルメモリに転送され得る。
【００３９】
少なくとも１つの実装形態では、アレイ１０６の各行は、行の最左ＭＡＣ回路に結合された入力活性化関数ユニット（ＩＡＦＵ）を含む。ＩＡＦＵ２２０−０は、アレイの行０のＭＡＣ回路２００−０に結合され、ＩＡＦＵ２２０−１は、行１のＭＡＣ回路２０１−０に結合され、ＩＡＦＵ２２０−ｍは、行ｍのＭＡＣ回路２３１−０に結合される。各ＩＡＦＵは、１つまたは複数の活性化関数を、グローバルメモリ１０２から読み取られたデータに適用する。データは、図１に示されているデータギアボックス１０４によってＩＡＦＵに提供されるＩＦＭデータであり得る。ＩＡＦＵは、ＯＡＦＵがバイパスされるか、またはプーリング演算が、ＭＡＣ回路に入力されるデータとＭＡＣ回路から出力されるデータの両方に適用されるとき、可能にされ得る。ＩＡＦＵからの出力は、ＭＡＣ回路に直接転送されるか、またはグローバルメモリ１０２に転送（たとえば、ループ）されてバックし得る。グローバルメモリ１０２にループバックすることは、以下の図１３に関連してさらに説明される。ＩＡＦＵがバイパスされる場合、入力データはＭＡＣ回路に直接供給される。
【００４０】
図２に示されているように、アレイ１０６に入力されたデータは、行の各ＭＡＣ回路に対して水平方向に左から右にシフトされる。ＭＡＣ回路から出力された累算値は、列のＭＡＣ回路を通して垂直方向に下から上にシフトされる。
【００４１】
制御ギアボックス１１０などの制御ギアボックスは、各スレッドについてカーネルアクセスおよびＭＡＣ演算を実施するために、アドレスおよび制御１０１をアレイに提供する。アドレスおよび制御１０１は、ＭＡＣ回路のすべてによって共有され、各ＭＡＣサイクルで、下から上におよび左から右にシフトされる。アドレスおよび制御１０３は、各ＭＡＣサイクルで、垂直方向に下から上にシフトされ、すべてのＩＡＦＵによって共有される。アドレスおよび制御１０５は、各ＭＡＣサイクルで、水平方向に左から右にシフトされ、Ｍ個の並列アキュムレータ間のコンテキスト切替えを制御するためにすべてのアキュムレータによって共有される。アドレスおよび制御１０７は、各ＭＡＣサイクルで、水平方向に左から右にシフトされ、すべてのＯＡＦＵによって共有される。
【００４２】
図２に示されているブロック図およびその構成要素の配置およびサイズは、アレイ１０６の物理的構成要素の配置またはサイズを限定しない。図２は、左から右への、および下から上へのデータフローを示しているが、本開示の実装形態はそのように限定されない。
【００４３】
図３は、図２のＭＡＣ回路のアレイの例示的なＭＡＣ回路のブロック図を示す。図３はアレイ１０６のＭＡＣ回路２０１−０を示しているが、図３に示されている構造は、アレイ１０６の各ＭＡＣ回路に適用可能である。ＭＡＣ回路２０１−０は、乗算回路３３０と、加算回路３３４と、カーネルキャッシュ３３２とを含む。乗算回路３３０と加算回路３３４とは、協働して、ＭＡＣ演算を実施する。乗算回路３３０は、ＭＡＣ回路２０１−０へのデータ入力Ｘと、カーネルキャッシュ３３２から読み取られたカーネルＨとの乗算出力値ＭＵＬを出力する。データＸは、グローバルメモリ１０２からのデータ、またはＩＡＦＵ２２０−１の出力のいずれかである。データＸは、行１の右の隣接するＭＡＣ回路（たとえば、２０１−１）にシフトされる。カーネルＨは、特定のＭＡＣ演算についての重みを含む。アドレスおよび制御１０３は、カーネルキャッシュ３３２からカーネルＨを読み取るために、制御ギアボックス１１０によってＭＡＣ回路２０１−１に提供される。
【００４４】
加算回路３３４は、乗算出力値ＭＵＬと、下の隣接するＭＡＣ回路（たとえば、２００−０）からの累算値との和を出力する。加算回路３３４の出力は、上の隣接するＭＡＣ回路（たとえば、２０１−０）の加算回路に入力される。行０のＭＡＣ回路について、加算回路に入力された累算値は、０またはバイアス値のいずれかとして初期化され得る。最上行ｍのＭＡＣ回路について、加算回路の出力は、行ｍのＭＡＣ回路の上にＭＡＣ回路がないので、グローバルメモリ１０２、アキュムレータ（たとえば、２２４−０）、またはＯＡＦＵ（たとえば、２２２−０）に出力される。
【００４５】
アレイ１０６は、アレイ１０６のＭＡＣ回路に入力されたデータＸが入力特徴マップ（ＩＦＭ）のデータであり得、アレイ１０６から出力されたデータが出力特徴マップ（ＯＦＭ）のデータであり得るようなＣＮＮの一部であり得る。特定のＯＦＭ深度インデックスｄ２についてのアレイ１０６の出力は、式１として書かれ得る。
2021531572.tif 000003
ここで、Ｄ１は活性化入力特徴次元の深度（たとえば、ＩＦＭの数）であり、Ｄ２は活性化出力特徴次元の深度（たとえば、ＯＦＭの数）であり、Ｘは、Ｘ［ｒ，ｃ，ｄ１］としてインデックス付けされたランク３活性化入力であり、ここで、ｄ１∈［０，Ｄ１−１］はＩＦＭ深度インデックスであり、ｒ∈［０，Ｈ１−１］およびｃ∈［０，Ｗ１−１］は、それぞれ、２次元（２Ｄ）ＩＦＭの行インデックスおよび列インデックスであり、Ｈは、Ｈ［ｕ，ｖ，ｄ１，ｄ２］としてインデックス付けされたランク４重み入力であり、ここで、（ｄ１，ｄ２）はＩＦＭ深度インデックスｄ１とＯＦＭ深度ｄ２との交差部におけるカーネルを指し、ｕ∈［０，Ｆｙ−１］およびｖ∈［０，Ｆｘ−１］は、それぞれ、２Ｄカーネルの行インデックスおよび列インデックスであり、ここで、Ｆｙはカーネルの高さであり、Ｆｘはカーネルの幅であり、Ｓｘは列に沿ったストライドであり、Ｓｙは行に沿ったストライドであり、Ｙは、Ｙ［ｒ，ｃ，ｄ２］としてインデックス付けされたランク３活性化出力であり、ここで、ｄ２∈［０，Ｄ２−１］はＯＦＭ深度インデックスであり、ｒ∈［０，Ｈ２−１］およびｃ∈［０，Ｗ２−１］は、それぞれ、２Ｄ  ＯＦＭの行インデックスおよび列インデックスであり、ｃｏｎｖ２ｄ（）は２Ｄ畳み込み演算子である。畳み込み演算は、式２で説明されるようなドット積演算を実施する。
2021531572.tif 000004
【００４６】
特定の行および列インデックス（ｒ，ｃ）についてのＯＦＭは、式４として説明される。
2021531572.tif 000005
【００４７】
ＩＦＭ深度Ｄ１は、ＩＦＭ深度インデックスｄ１が式４として表され得るような複数のＩＦＭ位相に分割され得る。
2021531572.tif 000006
ここで、Ｎ１は、ＭＡＣ回路のアレイの高さ（たとえば、アレイの各列中のＭＡＣ回路の数）であり、ｎｉはＩＦＭ位相インデックス
2021531572.tif 000007
であり、
2021531572.tif 000008
はアレイの行インデックスである。ＩＦＭ深度Ｄ１またはＯＦＭ深度Ｄ２を超えるカーネルの重みは、式５に示されているように、０になるように制約される。
Ｈ［：，：，ｄ１，ｄ２］＝０  ：  ｄ１≧Ｄ１またはｄ２≧Ｄ２である場合    （５）
【００４８】
したがって、式３は、式６として書き直され得る。
2021531572.tif 000009
ここで、ＭＡＣは、ＭＡＣ［ｒ，ｃ，ｕ，ｖ，ｄ２，ｎｉ］としてインデックス付けされた１つの列に沿ったＮ１個のＭＡＣ回路にわたってある時間に累算されたランク６値であり、（ｄ２，ｎｉ）は、ＩＦＭ［ｎｉＮ１，ｎｉＮ１＋Ｎ１−１］とＯＦＭ深度インデックスｄ２との交差部におけるすべてのカーネルを指し、ｕ∈［０，Ｆｙ−１］およびｖ∈［０，Ｆｘ−１］は、それぞれ、２Ｄカーネルの行インデックスおよび列インデックスであり、ｒ∈［０，Ｈ２−１］およびｃ∈［０，Ｗ２−１］は、それぞれ、２Ｄ  ＯＦＭの行インデックスおよび列インデックスであり、ここで、Ｈ２はＯＦＭの高さであり、Ｗ２はＯＦＭの幅である。ＭＡＣは、式７に示されているように表され得る。
2021531572.tif 000010
ここで、ＭＵＬは、ある時間におけるＭＡＣ回路の乗算回路の出力である。ＭＵＬは、
2021531572.tif 000011
としてインデックス付けされたランク７値であり、ここで、
2021531572.tif 000012
は、ＩＦＭ深度インデックスｄ１とＯＦＭ深度インデックスｄ２との交差部におけるカーネルを指す。ＭＡＣは、式８に示されているように表され得る。
2021531572.tif 000013
【００４９】
再び図２および図３を参照すると、アドレスおよび制御１０１は、インデックス
2021531572.tif 000014
におけるカーネルキャッシュ３３２からのカーネルＨにアクセスするために使用される。カーネルＨは、乗算出力値
2021531572.tif 000015
を生成するためにＩＦＭデータＸを乗算される。各行からのすべての乗算出力値
2021531572.tif 000016
が、アレイ１０６のＭＡＣ回路（たとえば、２００−０、２０１−０、．．．、２３１−０）の列中の加算カスケードチェーンに沿って累算された後に、最上ＭＡＣ回路（たとえば、２３１−０）は、最上ＭＡＣ回路の加算出力においてＭＡＣ［ｒ，ｃ，ｕ，ｖ，ｄ２，ｎｉ］を生成する。次いで、アキュムレータ（たとえば、２２０−０）は、ＭＡＣを記憶し、
2021531572.tif 000017
を実施して、ＯＦＭの特定の行および列インデックス（ｒ，ｃ）についての最終ドット積値を得る。
【００５０】
ＭＡＣサイクルごとに異なるＯＦＭ深度インデックスについての乗算演算を実施することによって、Ｍ個の並列スレッドが、タイミング共有によって１つのＭＡＣ回路内にグループ化され得る。乗算出力値
2021531572.tif 000018
は、異なるＯＦＭ深度インデックスｄ２について、ＭＡＣサイクルごとに連続的に更新される。ＯＦＭ深度Ｄ２は、ＯＦＭ深度インデックスｄ２が式９に示されているように表され得るような複数のＯＦＭ位相に分割される。
2021531572.tif 000019
ここで、Ｎ２は、ＭＡＣ回路のアレイの幅（たとえば、アレイの各行中のＭＡＣ回路の数）であり、ｎ０はＯＦＭ位相インデックス
2021531572.tif 000020
であり、
2021531572.tif 000021
はアレイの列インデックスである。
【００５１】
異なるＯＦＭ深度インデックスｄ２が同じ列インデックス
2021531572.tif 000022
を有する場合、それは、ＭＡＣ演算が、列インデックス
2021531572.tif 000023
のＭＡＣ回路によって、異なるＯＦＭ深度インデックスｄ２に対応する異なるＯＦＭ位相中で実施されることを意味する。ＯＦＭ位相のサブセットが、ＯＦＭパスとして一緒にグループ化される。複数のＯＦＭ位相が一緒に時分割多重化される。１よりも大きい任意の整数が、２または３で均等に割り切れるので、複数のＯＦＭ位相インデックスｎ０は、式１０で説明されるように、ＯＦＭパスインデックスｐ０として一緒にグループ化され得る。
2021531572.tif 000024
【００５２】
いくつかの実装形態では、ＯＦＭパスは、２つのＯＦＭ位相および／または３つのＯＦＭ位相を含む。
2021531572.tif 000025
が奇数の整数である場合、すべてのＯＦＭパスは２つのＯＦＭ位相を含む。
2021531572.tif 000026
が、１よりも大きい偶数の整数である場合、最後のＯＦＭパスを除くすべてのＯＦＭパスは、２つのＯＦＭ位相を含み、最後のＯＦＭパスは３つのＯＦＭ位相を含む。
【００５３】
図４は、例示的なＯＦＭ深度スプリッティングを利用する図２のアレイ１０６のブロック図を示す。以下の例は、以下の表１中のパラメータに基づく。
2021531572.tif 000027
【００５４】
ＩＦＭ位相の数は
2021531572.tif 000028
であり、したがって、４つのＩＦＭ位相（ｎｉ∈［０，３］）がある。ＯＦＭ位相の数は
2021531572.tif 000029
であり、したがって、１３個のＯＦＭ位相（ｎ０∈［０，１２］）がある。１３個のＯＦＭ位相は、６つのＯＦＭパス（ｐ０∈［０，５］）にスプリットされる。
2021531572.tif 000030
は、１よりも大きい偶数の整数（１２）であるので、最初の５つのＯＦＭパス（ｐ０∈［０，４］）の各々は、最初の１０個のＯＦＭ位相（ｎ０∈［０，９］）のうちの２つを含む。第６および最後のＯＦＭパス（ｐ０＝５）は、３つのＯＦＭ位相（ｎ０∈［１０，１２］）を含む。したがって、２つのスレッドまたは３つのスレッドのいずれかが、ＭＡＣ回路中でインターリーブした。
【００５５】
各ＭＡＣ回路は、ある時間における１つのＯＦＭパスｐ０における異なるＯＦＭ深度インデックスｄ２ついての乗算出力値
2021531572.tif 000031
を生成している。たとえば、最左ＭＡＣ回路（たとえば、２００−０（０，０）、２０１−０（１，０）、２０２−０（２，０）、２３１−０（３１，０））は、２つのＭＡＣサイクルごとにパターン
2021531572.tif 000032
、
2021531572.tif 000033
を繰り返すことによって、第１のＯＦＭパスｐ０＝０におけるＯＦＭ深度インデックスｄ２＝０、１６についての乗算出力値ＭＵＬを生成している。
2021531572.tif 000034
は、２つのＭＡＣサイクルのうちの第１のＭＡＣサイクル中に実施され、
2021531572.tif 000035
は、２つのＭＡＣサイクルのうちの第２のＭＡＣサイクル中に実施される。
【００５６】
左上隅ＭＡＣ回路２３１−０（３１，０）は、単一の列に沿って乗算出力値ＭＵＬを加算し、２つのＭＡＣごとにパターンＭＡＣ［ｒ，ｃ，ｕ，ｖ，０，ｎｉ］、ＭＡＣ［ｒ，ｃ，ｕ，ｖ，１６，ｎｉ］を繰り返すことによって、第１のＯＦＭパスｐ０＝０におけるＯＦＭ深度インデックスｄ２＝０、１６についてのＭＡＣ出力値を生成する。ＭＡＣ［ｒ，ｃ，ｕ，ｖ，０，ｎｉ］は、２つのＭＡＣサイクルのうちの第１のＭＡＣサイクル中に実施され、ＭＡＣ［ｒ，ｃ，ｕ，ｖ，１６，ｎｉ］は、２つのＭＡＣサイクルのうちの第２のＭＡＣサイクル中に実施される。複数のＭＡＣサイクルにわたって、左上隅アキュムレータ（たとえば、２２２−０）は、時間インターリーブ様式でＯＦＭの特定の行および列インデックス（ｒ，ｃ）について
2021531572.tif 000036
および
2021531572.tif 000037
を実施することによって、２つの連続するＭＡＣサイクルのバーストにおける第１のＯＦＭパスｐ０＝０におけるＯＦＭ深度インデックスｄ２＝０、１６についての最終ドット積Ｙ［ｒ，ｃ，０］、Ｙ［ｒ，ｃ，１６］を生成する。
【００５７】
2021531572.tif 000038
のシーケンシングは、内部ループが、カーネルの行および列インデックス（ｕ，ｖ）によって反復されるのかＩＦＭ位相インデックスｎｉによって反復されるのかに依存する。３×３カーネルを有する図４の例を続けると、図５Ａは、カーネルの行および列インデックス（ｕ，ｖ）によって反復される第１のＯＦＭパスｐ０＝０についての左下ＭＡＣ回路２００−０（０，０）の乗算出力値ＭＵＬシーケンスを示す。対照的に、図５Ｂは、ＩＦＭ位相インデックスｎｉによって反復される第１のＯＦＭパスｐ０＝０についての左下ＭＡＣ回路２００−０（０，０）の乗算出力値ＭＵＬシーケンスを示す。図５Ｃは、カーネルの行および列インデックス（ｕ，ｖ）によって反復される第１のＯＦＭパスｐ０＝０の左上ＭＡＣ回路２３１−０（３１，０）についての累算出力値ＭＡＣシーケンスを示す。対照的に、図５Ｄは、ＩＦＭ位相インデックスｎｉによって反復される第１のＯＦＭパスｐ０＝０の左上ＭＡＣ回路２３１−０（３１，０）についての累算出力値ＭＡＣシーケンスを示す。
【００５８】
カーネルの次元が１よりも大きい（Ｆｙ＞１およびＦｘ＞１）か、または入力活性化が１よりも大きい（
2021531572.tif 000039
）ので、最上アキュムレータがＯＦＭの特定の行および列インデックス（ｒ，ｃ）についての最終ドット積Ｙ［ｒ，ｃ，ｄ２］を生成するために、複数のＭＡＣサイクルが必要とされ得る。出力有効シーケンスは、バースト長がＯＦＭパスにおけるＯＦＭ位相の数に等しいバーストにおいて出力される。ＯＦＭ出力シーケンス
2021531572.tif 000040
は、内部ループがＯＦＭの行および列インデックス（ｒ，ｃ）またはＯＦＭ深度インデックスｄ２によって反復されるところに依存する。７×７  ＯＦＭを有する図４の例を続けると、図６Ａは、ＯＦＭの行および列インデックス（ｒ，ｃ）によって反復される最左アキュムレータ２２２−０のＯＦＭ出力シーケンスを示す。対照的に、図６Ｂは、ＯＦＭ深度インデックスｄ２によって反復される最左アキュムレータ２２２−０のＯＦＭ出力シーケンスを示す。
【００５９】
図４の例は、２つのＯＦＭ位相を含む５つのＯＦＭパスと、３つのＯＦＭ位相を含む第６のＯＦＭパスとを示しているが、本開示の実装形態はそのように限定されない。ＯＦＭパスは、ＯＦＭ位相の任意のサイズのグループの任意の組合せを含むことができる。しかしながら、ＭＡＣサイクルの利用は最大にされないことがある。一実装形態では、図４の例における１３個のＯＦＭ位相は７つのＯＦＭパス（ｐ０∈［０，６］）にスプリットされ得、各ＯＦＭパスは２つのＯＦＭ位相を含む。２つのスレッドが、１つのＭＡＣ回路中でインターリーブされる。ＭＡＣサイクルは、最初の６つのＯＦＭパス（ｐ０∈［０，５］）中に十分に利用されるが、使用率は最後のＯＦＭパス（ｐ０＝６）中に５０％である。すなわち、２つのスレッドのうちの１つのみが最後のＯＦＭパスにおいて使用される。別の実装形態では、１３個のＯＦＭ位相は４つのＯＦＭパス（ｐ０∈［０，３］）にスプリットされ、各ＯＦＭパスは４つのＯＦＭ位相を含む。コントローラ１０８は、ＭＡＣレートの１／４であるレートにおいて演算する。４つのスレッドが、１つのＭＡＣ回路中でインターリーブされる。ＭＡＣサイクルは、最初の３つのＯＦＭパス（ｐ０∈［０，２］）中に十分に利用されるが、使用率は最後のＯＦＭパス（ｐ０＝３）中に２５％である。すなわち、４つのスレッドのうちの１つのみが最後のＯＦＭパスにおいて使用される。
【００６０】
図７は、例示的な制御ギアボックス１１０のブロック図を示す。制御ギアボックス１１０は、コントローラ１０８とアレイ１０６とに結合された制御回路である。制御ギアボックス１１０は、アレイ１０６へのコントローラ１０８から受信された制御ワード７２０と、アレイ１０６のＭＡＣ回路のキャッシュに記憶されるカーネルについてのアドレス７２２とを提供する。制御ワード７２０および／またはカーネルアドレスがコントローラ１０８から出力されたときと、アレイ１０６のＭＡＣ回路が制御ワード７２０および／またはカーネルアドレス７２２のための準備ができているときとの間の潜在的不整合のために、少なくとも１つの実装形態は、コントローラ１０８とアレイ１０６との間のレート適応を実施するために制御ギアボックス１１０を含む。制御ギアボックス１１０は、コントローラ１０８の演算周波数を示す信号７０８と、ＭＡＣレートを示す別の信号７１０と、制御ワード７２０および／またはカーネルアドレス７２２をアレイ１０６にいつ提供すべきかを指示するコントローラ１０８からの入力制御信号（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６）とを受信する。
【００６１】
再び図４の例を参照すると、コントローラ１０８の演算周波数はＭＡＣレートの１／２である。ＯＦＭパスが２つのＯＦＭ位相を含む場合、ＭＡＣ回路は、２つのＭＡＣサイクルごとに、更新された制御ワード７２０のための準備ができている。ＯＦＭパスが３つのＯＦＭ位相を含む場合、ＭＡＣ回路は、３つのＭＡＣサイクルごとに、更新された制御ワード７２０のための準備ができている。複数のスレッドがＯＦＭパス中に各ＭＡＣ回路中でインターリーブされ、スレッドが、ＭＡＣレートにおいて特定の演算について連続的に処理されるので、特定の演算についての制御ワード（たとえば、書込み可能または読取り可能）は、複数のＭＡＣサイクルについて有効に保たれる（たとえば、複数の要素は、ＭＡＣレートにおいて連続的に読み取られるかまたは書き込まれる）。
【００６２】
開示される手法は、複数のＭＡＣサイクル（たとえば、２つまたは３つのＭＡＣサイクル）の演算期間を有するアトミック演算として制御ワード７２０をＭＡＣ回路に提供することを含む。たとえば、２つまたは３つのスレッドがＭＡＣレートにおいてＭＡＣ回路中でインターリーブされた場合、制御ワード７２０は、２つまたは３つのＭＡＣサイクルごとに更新される。しかしながら、コントローラ１０８がコントローラ１０８の演算周波数において制御ワード７１４を制御ギアボックス１０８に提供することは、ＭＡＣ回路による必要に応じて、制御ギアボックス１１０が制御ワード７２０をアレイ１０６に提供するのに十分である。
【００６３】
図７は、制御ギアボックス１１０の３ワイヤ制御インターフェースを示す。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６はデジタル信号であり得る。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、クロック信号７１０のクロックサイクルを識別する信号である。（以下でさらに説明される）図１０〜図１２のタイミング図に示されているように、クロック信号７１０の偶数クロックサイクルが、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４において「ａ」で示され、奇数サイクルが「ｂ」で示される。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、ＭＡＣサイクル７１０が偶数ＭＡＣサイクルと奇数ＭＡＣサイクルとを交互にするように、「ａ」と「ｂ」とを交互にする。制御ワードに関する制御ギアボックス１１０の演算は、以下の擬似コードで説明され得る。
Ｉｆ（ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ＝‘１’）および（ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ＝現在の位相）
Ｉｆ（ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ＝‘１’）
「ｃｏｎｔｒｏｌ＿ｏｕｔ」を「ｃｏｎｔｒｏｌ＿ｉｎ」で更新し、アトミック演算を開始する
Ｅｌｓｅ
「ｃｏｎｔｒｏｌ＿ｏｕｔ」をデフォルト値で強制する
Ｅｎｄ  ｉｆ
Ｅｎｄ  ｉｆ
【００６４】
「デフォルト値」は、制御ギアボックス１１０に入力されない制御ギアボックスのデフォルトによる内部値を指す。擬似コードは、以下の図１０〜図１２に関連してさらに説明される。
【００６５】
奇数個のスレッドがＭＡＣレートにおいてＭＡＣ回路中でインターリーブされた場合、制御ギアボックス１１０は、アトミック演算期間の後に、偶数ＭＡＣサイクルまたは奇数ＭＡＣサイクルのいずれか中で交互に制御ワード７２０を更新することができる。時々、制御ワード７２０は、偶数ＭＡＣサイクル中で更新され（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ａ」であり）、時々、制御ワード７２０は、奇数ＭＡＣサイクル中で更新される（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ｂ」である）。偶数個のスレッドがインターリーブされた場合、制御ワード７２０は、連続的に、偶数ＭＡＣサイクル中で更新される（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ａ」にとどまる）か、または奇数ＭＡＣサイクル中で更新される（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ｂ」にとどまる）。
【００６６】
スレッドのインターリービングにより、ＭＡＣ回路は、ＭＡＣサイクルごとに異なるカーネルについてのアドレスのための準備ができている（たとえば、ＭＡＣレートにおいて連続するアドレスから読み取られるかまたは連続するアドレスに書き込まれる）。しかしながら、コントローラ１０８は、コントローラ１０８の演算周波数において１つのカーネルについてのベースアドレスを出力する。ＭＡＣサイクルごとにカーネルについてのアドレスをＭＡＣ回路に提供するために、制御ギアボックス１１０は、ベースアドレスがカーネルキャッシュ３３２の物理アドレスにどのようにマッピングされるかに応じて、コントローラ１０８から受信されたベースアドレスを固定値だけ増分または減分する。たとえば、ベースアドレスがブロックデータ転送の開始アドレスにマッピングされた場合、ベースアドレスは固定値だけ増分される。ベースアドレスがブロックデータ転送の終了アドレスにマッピングされた場合、ベースアドレスは固定値だけ減分される。カーネルのアドレスは、ＭＡＣ回路のカーネルキャッシュ３３２中で記憶され、インターリーブされる。コントローラ１０８は、コントローラ１０８の演算周波数においてベースアドレスを生成する。
【００６７】
図８は、ＭＡＣ回路中のカーネルキャッシュの例示的なレイアウトを示す。カーネルの要素は、図３に示されているカーネルキャッシュ３３２など、ＭＡＣ回路のキャッシュの隣接メモリスペース中で記憶され、インターリーブされる。図８は、図４の例のＯＦＭ深度インデックス（ｄ２＝０、１６）に対応するカーネルの要素の記憶のためのキャッシュレイアウトを示す。Ｈ［ｕ，ｖ，ｄ１，ｄ２］は、ＩＦＭ深度インデックスｄ１とＯＦＭ深度ｄ２との交差部（ｄ１，ｄ２）における２次元（２Ｄ）カーネルの行インデックスｕおよび列インデックスｖにおけるカーネル要素を指す。たとえば、Ｈ（０，０，０，０）は、ＩＦＭ深度インデックス０とＯＦＭ深度インデックス０との交差部におけるカーネルの行インデックス０および列インデックス０におけるカーネル要素を指す。第１のカーネルの第１の要素（Ｈ（０，０，０，０））がカーネルキャッシュアドレス０において記憶され、第２のカーネルの第１の要素（Ｈ（０，０，０，１６））がカーネルキャッシュアドレス１において記憶され、第１のカーネルの第２の要素（Ｈ（０，１，０，０））がカーネルキャッシュアドレス２において記憶され、第２のカーネルの第２の要素（Ｈ（０，１，０，１６））がカーネルキャッシュアドレス３において記憶される、などである。カーネルキャッシュアドレスは、図７中のアドレス７２２に対応する。ＯＦＭ深度インデックスｄ２＝０、１６に対応するＯＦＭ位相は、第１のＯＦＭパスｐ０＝０中に各ＭＡＣ回路中でインターリーブされる。２つの異なるカーネルが、２つの連続するＭＡＣサイクル中にそれぞれのＭＡＣ演算のために使用されるこれらの２つのＯＦＭ深度インデックス
2021531572.tif 000041
および
2021531572.tif 000042
に対応する。しかしながら、コントローラ１０８は、ＭＡＣレートにおいてＭＡＣ回路についていくために、ＭＡＣサイクルごとにカーネルのキャッシュアドレスを生成しない。そうではなく、コントローラ１０８は、コントローラ１０８の演算周波数（たとえば、ＭＡＣレートの１／２）においてベースアドレスを生成する。制御ギアボックス１１０は、コントローラ１０８から受信されたベースアドレスに基づいてＭＡＣサイクルごとにカーネルの直接マッピングされたキャッシュアドレスを生成する。３つのＯＦＭ位相を含む最後のＯＦＭパスｐ０＝５について、ベースアドレスは、３つのＭＡＣサイクルごとに更新される。しかしながら、コントローラ１０８の演算周波数は変化せず、コントローラ１０８は、依然として、ＭＡＣレートの１／２において演算する。
【００６８】
たとえば、図８に示されているように、制御ギアボックス１１０は、コントローラ１０８から第１のカーネルの第１の要素（Ｈ（０，０，０，０））についてのベースアドレス０を受信する。ベースアドレス０は、カーネルキャッシュアドレス０にマッピングする。コントローラ１０８からの第１のカーネルの第２の要素（Ｈ（０，１，０，０））についてのベースアドレス１を受信するより前に、制御ギアボックス１１０は、第２のカーネルの第１の要素（Ｈ（０，０，０，１６））についてのカーネルキャッシュアドレス１を生成するために、ベースアドレス０を固定値だけ増分する。ここで、固定値は１である。次いで、制御ギアボックス１１０は、コントローラ１０８から、カーネルキャッシュアドレス２にマッピングする、第１のカーネルの第２の要素（Ｈ（０，１，０，０））についてのベースアドレス１を受信する。制御ギアボックス１１０は、コントローラ１０８から受信された各ベースアドレスについて増分を繰り返す。制御ギアボックス１１０は、コントローラ１０８の演算レートにおいてベースアドレスを受信するが、制御ギアボックス１１０は、ＭＡＣレートにおいてカーネルキャッシュアドレスを出力する。制御ギアボックス１１０は、コントローラ１０８の演算周波数が増加せず、ＭＡＣレートが減少しないように、１つまたは複数の他のカーネルの要素についてのアドレスを生成する。
【００６９】
図８には示されていないが、制御ギアボックス１１０は、単一のベースアドレスから複数のカーネルの要素の複数のカーネルキャッシュアドレスを生成することができる。たとえば、最後のＯＦＭパスｐ０＝５において、制御ギアボックス１１０は、コントローラ１０８から第１のカーネルの第１の要素（Ｈ（０，０，０，１６０））の第１のベースアドレスを受信する。第１のカーネルの第２の要素（Ｈ（０，１，０，１６０））の第２のベースアドレスを受信するより前に、制御ギアボックス１１０は、第２のカーネルの第１の要素（Ｈ（０，０，０，１７６））の第１のカーネルキャッシュアドレスを生成するために、第１のベースアドレスを固定値だけ増分する。また、第２のベースアドレスを受信するより前に、制御ギアボックス１１０は、第３のカーネルの第１の要素（Ｈ（０，０，０，１９２））の第２のカーネルキャッシュアドレスを生成するために、第１のカーネルキャッシュアドレスを固定値だけ増分する。カーネルキャッシュアドレスは、次のベースアドレスがコントローラ１０８から受信される前に、制御ギアボックス１１０によって生成されるが、次のベースアドレスは、制御ギアボックス１１０が前のベースアドレスから生成されたカーネルキャッシュアドレスを出力する前に、制御ギアボックス１１０によって受信され得る。
【００７０】
図９は、例示的なデータギアボックス１０４のブロック図を示す。図１に示されているように、データギアボックス１０４は、コントローラ１０８とグローバルメモリ１０２とアレイ１０６とに結合された制御回路である。データギアボックス１０４は、グローバルメモリ１０２から受信されたデータ（たとえば、ＩＦＭデータ７１８）をアレイ１０６のＭＡＣ回路に提供する。ＩＦＭデータ７１２がグローバルメモリ１０２から出力されたときと、アレイ１０６のＭＡＣ回路がＩＦＭデータ７１８のために準備ができているときとの間の潜在的不整合のために、少なくとも１つの実装形態は、コントローラ１０８とグローバルメモリ１０２とアレイ１０６との間のレート適応を実施するためにデータギアボックス１０４を含む。データギアボックス１０４は、コントローラ１０８および／またはグローバルメモリ１０２の演算周波数を示す信号７０８と、ＭＡＣレートを示す信号７１０と、ＩＦＭデータ７１８をアレイ１０６にいつ提供すべきかを決定するためのコントローラ１０８からの入力制御信号（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６）とを受信する。
【００７１】
再び図４の例を参照すると、コントローラ１０８の演算周波数はＭＡＣレートの１／２である。ＯＦＭパスが２つのＯＦＭ位相を含む場合、ＭＡＣ回路は、２つのＭＡＣサイクルごとに、更新されたＩＦＭデータ７１８のための準備ができている。ＯＦＭパスが３つのＯＦＭ位相を含む場合、ＭＡＣ回路は、３つのＭＡＣサイクルごとに、更新されたＩＦＭデータ７１８のための準備ができている。複数のスレッドがＯＦＭパス中に各ＭＡＣ回路中でインターリーブされ、スレッドは、ＭＡＣレートにおいて特定の演算について連続的に処理されるので、特定のＭＡＣ演算についてのＩＦＭデータ７１８は、複数のＭＡＣサイクルについて有効に保たれる。
【００７２】
開示される手法は、複数のＭＡＣサイクル（たとえば、２つまたは３つのＭＡＣサイクル）の演算期間を有するアトミック演算としてＩＦＭデータ７１８をＭＡＣ回路に提供することを含む。たとえば、２つまたは３つのスレッドがＭＡＣレートにおいてＭＡＣ回路中でインターリーブされたとき、ＩＦＭデータ７１８は、２つまたは３つのＭＡＣサイクルごとに更新される。しかしながら、グローバルメモリ１０２がコントローラ１０８の演算周波数においてＩＦＭデータ７１２をデータギアボックス１０４に提供することは、ＭＡＣ回路による必要に応じて、データギアボックス１０４がＩＦＭデータ７１８をアレイ１０６に提供するのに十分である。
【００７３】
図９は、データギアボックス１０４の３ワイヤ制御インターフェースを示す。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６はデジタル信号であり得る。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、クロック信号７１０のクロックサイクルを識別する信号である。（以下でさらに説明される）図１０〜図１２のタイミング図に示されているように、クロック信号７１０の偶数クロックサイクルが、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４において「ａ」で示され、奇数サイクルが「ｂ」で示される。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、ＭＡＣサイクル７１０が偶数ＭＡＣサイクルと奇数ＭＡＣサイクルとを交互にするように、「ａ」と「ｂ」とを交互にする。データギアボックス１０４の演算は、以下の擬似コードで説明され得る。
Ｉｆ（ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ＝‘１’）および（ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ＝現在の位相）
Ｉｆ（ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ＝‘１’）
「ｄａｔａ＿ｏｕｔ」を「ｄａｔａ＿ｉｎ」で更新し、アトミック演算を開始する
Ｅｌｓｅ
「ｄａｔａ＿ｏｕｔ」をデフォルト値で強制する
Ｅｎｄ  ｉｆ
Ｅｎｄ  ｉｆ
【００７４】
「デフォルト値」は、データギアボックス１０４に入力されないデフォルトによる内部値を指す。擬似コードは、以下の図１０〜図１２に関連してさらに説明される。
【００７５】
奇数個のスレッドがＭＡＣレートにおいてＭＡＣ回路中でインターリーブされた場合、データギアボックス１０４は、アトミック演算期間の後に、偶数ＭＡＣサイクルまたは奇数ＭＡＣサイクルのいずれか中で交互にＩＦＭデータ７１８を更新することができる。時々、ＩＦＭデータ７１８は、偶数ＭＡＣサイクル中で更新され（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ａ」であり）、時々、ＩＦＭデータ７１８は、奇数ＭＡＣサイクル中で更新される（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ｂ」である）。偶数個のスレッドがインターリーブされた場合、ＩＦＭデータ７１８は、連続的に、偶数ＭＡＣサイクル中で更新される（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ａ」にとどまる）か、または奇数ＭＡＣサイクル中で更新される（たとえば、ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は「ｂ」にとどまる）。
【００７６】
図１０は、ＯＦＭパスが２つのＯＦＭ位相を含む、図１の回路装置の例示的なタイミング図を示す。コントローラ１０８の演算周波数７０８は、ＭＡＣレート７１０の１／２である。ＩＦＭデータ７１２は、グローバルメモリ１０２から読み取られ、演算周波数７０８においてデータギアボックス１０４に入力される。制御ワード７１４は、コントローラ１０８によって出力され、演算周波数７０８において制御ギアボックス１１０に入力される。
【００７７】
制御ギアボックス１１０とデータギアボックス１０４とについての上記の擬似コードに従って、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６がハイであるとき、ＩＦＭデータ７１８および制御ワード７２０は、ＭＡＣサイクル７１０に関連する識別子ｐｈａｓｅ＿ｉｄ７１６が制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４と整合する場合、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。図１０では、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６がハイ（たとえば、論理「１」）であり、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、「ａ」（たとえば、偶数ＭＡＣサイクル）を連続的に指示する。したがって、ＩＦＭデータ７１８および制御ワード７２０は、「ａ」に関連するＭＡＣサイクル７１０中に、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。
【００７８】
図１０中のＯＦＭパスが２つのＯＦＭ位相を含むので、２つのカーネルについてのアドレス７２２は各ＯＦＭパスのために必要とされる。カーネルアドレスＡ０はカーネルキャッシュアドレス（たとえば、図８に示されているカーネルキャッシュアドレス０）であり、そのカーネルキャッシュアドレスは、コントローラ１０８によって生成されたベースアドレス（たとえば、ベースアドレス０）と同じであり得る。カーネルアドレスＡ１は、制御ギアボックス１１０によって、カーネルアドレスＡ０に対応するベースアドレスから生成されたカーネルキャッシュアドレスである。
【００７９】
カーネルアドレスＡ０は、第１のＯＦＭパスの第１のＯＦＭ深度インデックスについての第１のカーネルのものであり、カーネルアドレスＡ１は、第１のＯＦＭパスの第２のＯＦＭ深度インデックスについての第２のカーネルのものであり、それらは、第１のＯＦＭパス中にＩＦＭデータＡに対して実施されるＭＡＣ演算のために使用される。カーネルアドレスＢ０は、第２のＯＦＭパスの第１のＯＦＭ深度インデックスについての第３のカーネルのものであり、カーネルアドレスＢ１は、第２のＯＦＭパスの第２のＯＦＭ深度インデックスについてのカーネルのものであり、それらは、第２のＯＦＭパス中にＩＦＭデータＢに対するＭＡＣ演算のために使用される。
【００８０】
図１１は、ＯＦＭパスが３つのＯＦＭ位相を含む、図１の回路装置の例示的なタイミング図を示す。制御ギアボックス１１０とデータギアボックス１０４とについての上記の擬似コードに従って、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６がハイである場合、ＩＦＭデータ７１８および制御ワード７２０は、ＭＡＣサイクル７１０に関連する識別子ｐｈａｓｅ＿ｉｄ７１６が制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４と整合する場合、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。
【００８１】
図１１において、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６は、初めはハイ（たとえば、論理「１」）である。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、初めは「ａ」（たとえば、偶数ＭＡＣサイクル）を指示し、次いで「ｂ」（たとえば、奇数ＭＡＣサイクル）を指示し、次いで、ｄｏ  ｎｏｔ  ｃａｒｅである。ＯＦＭパスが３つのＯＦＭ位相を含むので、コントローラ１０８は、ＩＦＭデータ７１２が、コントローラ１０８の２つの連続する演算サイクル７０８中にグローバルメモリ１０２から読み取られることを引き起こし、次いで、１つのサイクルの間、保持する。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４が初めは「ａ」を指示するので、ＩＦＭデータＡおよび制御ワードＡは、「ａ」に関連するＭＡＣサイクル７１０中に、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。図１０とは対照的に、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４が次いで「ｂ」を指示するので、ＩＦＭデータＢおよび制御ワードＢは、「ｂ」に関連するＭＡＣサイクル７１０中に、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。その結果、ＩＦＭデータＡおよび制御ワードＡは、ＩＦＭデータＢと制御ワードＢとを出力することが、ＭＡＣサイクル７１０の識別子が「ｂ」になるまで遅延させられるので、図１０に示されているように、２つのクロックサイクルの代わりに３つのＭＡＣサイクル７１０の間有効のままである。ＩＦＭデータＣおよび制御ワードＣは、「ａ」に関連するＭＡＣサイクル７１０中に出力され、ＩＦＭデータＤおよび制御ワードＤは、「ｂ」に関連するＭＡＣ７１０中に出力される。
【００８２】
図１１中のＯＦＭパスが３つのＯＦＭ位相を含むので、３つのカーネルについてのアドレスは各ＯＦＭパスのために必要とされる。カーネルアドレスＡ０はカーネルキャッシュアドレス（たとえば、図８に示されているカーネルキャッシュアドレス０）であり、そのカーネルキャッシュアドレスは、コントローラ１０８によって生成されたベースアドレス（たとえば、ベースアドレス０）と同じであり得る。カーネルアドレスＡ１およびＡ２は、制御ギアボックス１１０によって、カーネルアドレスＡ０に対応するベースアドレスから生成されたカーネルキャッシュアドレスである。
【００８３】
カーネルアドレスＡ０は、第１のＯＦＭパスの第１のＯＦＭ深度インデックスについての第１のカーネルのものであり、カーネルアドレスＡ１は、第１のＯＦＭパスの第２のＯＦＭ深度インデックスについての第２のカーネルのものであり、カーネルアドレスＡ２は、第１のＯＦＭパスの第３のＯＦＭ深度インデックスについての第３のカーネルのものであり、それらは、第１のＯＦＭパス中にＩＦＭデータＡに対して実施されるＭＡＣ演算のために使用される。カーネルアドレスＢ０は、第２のＯＦＭパスの第１のＯＦＭ深度インデックスについての第１のカーネルのものであり、カーネルアドレスＢ１は、第２のＯＦＭパスの第２のＯＦＭ深度インデックスについての第２のカーネルのものであり、カーネルアドレスＢ２は、第２のＯＦＭパスの第３のＯＦＭ深度インデックスについての第３のカーネルのものであり、それらは、第２のＯＦＭパス中にＩＦＭデータＢに対するＭＡＣ演算のために使用される。
【００８４】
制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｖｌｄ７０２およびｐｈａｓｅ＿ｕｐｄａｔｅ＿ｅｎ７０６がロー（たとえば、論理「０」）であるとき、デフォルトデータは、データギアボックス１０４と制御ギアボックス１１０とによって出力される。
【００８５】
図１２は、ＯＦＭパスが３つのＯＦＭ位相を含むことから２つのＯＦＭ位相を含むことに切り替わる、図１の回路装置の例示的なタイミング図を示す。最初の３つのＯＦＭパスは３つのＯＦＭ位相を含む。ＩＦＭデータＡおよび制御ワードＡは、「ａ」に関連するＭＡＣサイクル７１０中に、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。ＩＦＭデータＢおよび制御ワードＢは、「ｂ」に関連するＭＡＣサイクル７１０中に、それぞれ、データギアボックス１０４および制御ギアボックス１１０から出力される。ＩＦＭデータＣおよび制御ワードＣは、「ａ」に関連するＭＡＣ７１０中に出力される。
【００８６】
最後の４つのＯＦＭパスは、２つのＯＦＭ位相を含む。したがって、ＩＦＭデータＤおよび制御ワードＤが、それぞれ、データギアボックス１０４および制御ギアボックス１１０に入力されたとき、それぞれ、データギアボックス１０４および制御ギアボックス１１０に入力されたＩＦＭデータ７１２および制御ワード７１４のパターンは、コントローラ１０８の２つの演算サイクル７０８の間読み取られ／生成され、次いで、１つのサイクルの間保持することから、コントローラ１０８の演算サイクル７０８ごとに読み取られ／生成されることに変化する。同様に、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４のパターンは、３つのＯＦＭ位相を含むＯＦＭパスに関連する「ａ、ｂ、ｄｏ  ｎｏｔ  ｃａｒｅ」パターンから、２つのＯＦＭ位相を含むＯＦＭパスに関連する一定の「ｂ」パターンに変化する。制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４は、ＩＦＭデータＤおよび制御ワードＤが、それぞれ、データギアボックス１０４および制御ギアボックス１１０に入力されたとき、制御信号ｐｈａｓｅ＿ｕｐｄａｔｅ＿ｉｄ７０４が「ｂ」を指示したので、常に「ｂ」を指示する。
【００８７】
図１３は、例示的な入力活性化関数ユニット（ＩＡＦＵ）を示す。ＩＡＦＵからの出力がアレイ１０６のＭＡＣ回路に直接入力される場合、活性化入力（
2021531572.tif 000043
）が２つまたは３つのＭＡＣサイクルごとに更新されるので、アレイの各行のＩＡＦＵ内に１つのスレッドのみがある。ＩＡＦＵからの出力がグローバルメモリ１０２にループバックされた場合、スレッドは、アレイのＭＡＣ回路と同様のインターリービング方式に従ってインターリーブされ得る。図１３は、図４の例におけるパラメータに基づくＩＡＦＵについての深度スプリッティング例を示す。４つのＩＦＭ位相ｎｉ∈［０，３］があり、４つのＩＦＭ位相は２つのＩＦＭパスｐｉ∈［０，１］にスプリットされる。各ＩＦＭパスｐ０∈［０，１］は、２つのＩＦＭ位相を含み、したがって、２つのＩＦＭ位相が１つのＩＡＦＵ中でインターリーブされる。各ＩＡＦＵは、ある時間における１つのＩＦＭパス（ｐｉ）における異なるＩＦＭ深度インデックス（ｄ１）ついて出力される活性化関数を生成する。活性化関数が適用された後に活性化深度が変更されないので、ＩＦＭ入力深度シーケンスは、ＯＦＭ出力深度シーケンスと同じである。
【００８８】
図１４は、開示される回路およびプロセスが実装され得る、プログラマブル集積回路（ＩＣ）８００を示す。プログラマブルＩＣは、他のプログラマブルリソースとともに、フィールドプログラマブルゲートアレイ論理（ＦＰＧＡ）を含むシステムオンチップ（ＳＯＣ）とも呼ばれることがある。ＦＰＧＡ論理は、アレイ中のいくつかの異なるタイプのプログラマブル論理ブロックを含み得る。たとえば、図１４は、マルチギガビットトランシーバ（ＭＧＴ：ｍｕｌｔｉ−ｇｉｇａｂｉｔ  ｔｒａｎｓｃｅｉｖｅｒ）８０１、構成可能論理ブロック（ＣＬＢ）８０２、ランダムアクセスメモリブロック（ＢＲＡＭ）８０３、入出力ブロック（ＩＯＢ）８０４、構成およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫＳ）８０５、デジタル信号処理ブロック（ＤＳＰ）８０６、特殊な入出力ブロック（Ｉ／Ｏ）８０７、たとえば、クロックポート、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理８０８を含む、多数の異なるプログラマブルタイルを含むプログラマブルＩＣ８００を示す。また、ＦＰＧＡ論理を有する何らかのプログラマブルＩＣは、専用プロセッサブロック（ＰＲＯＣ）８１０と内部および外部再構成ポート（図示せず）とを含む。
【００８９】
何らかのＦＰＧＡ論理では、各プログラマブルタイルは、プログラマブル相互接続要素（ＩＮＴ）８１１を含み、ＩＮＴ８１１は、各隣接するタイル中の対応する相互接続要素との間の規格化された接続を有する。したがって、プログラマブル相互接続要素は、まとめると、示されているＦＰＧＡ論理のためのプログラマブル相互接続構造を実装する。プログラマブル相互接続要素ＩＮＴ８１１は、図１４の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
【００９０】
たとえば、ＣＬＢ８０２は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素ＣＬＥ８１２と、単一のプログラマブル相互接続要素ＩＮＴ８１１とを含むことができる。ＢＲＡＭ８０３は、１つまたは複数のプログラマブル相互接続要素に加えてＢＲＡＭ論理要素（ＢＲＬ）８１３を含むことができる。典型的には、タイル中に含まれる相互接続要素の数は、タイルの高さに依存する。示されているＢＲＡＭタイルは、５つのＣＬＢと同じ高さを有するが、他の数（たとえば、４つ）も使用され得る。ＤＳＰタイル８０６は、適切な数のプログラマブル相互接続要素に加えてＤＳＰ論理要素（ＤＳＰＬ）８１４を含むことができる。ＩＯＢ８０４は、たとえば、プログラマブル相互接続要素ＩＮＴ８１１の１つのインスタンスに加えて入出力論理要素（ＩＯＬ）８１５の２つのインスタンスを含むことができる。当業者に明らかになるように、たとえばＩ／Ｏ論理要素８１５に接続される実際のＩ／Ｏボンドパッドは、様々な示されている論理ブロックの上に階層化された金属を使用して製造され、典型的に、入出力論理要素８１５のエリアに制限されない。
【００９１】
（図１４で陰影を付けられて示されている）ダイの中心の近くの列状エリアが、構成、クロック、および他の制御論理のために使用される。この列から延びる水平エリア８０９が、プログラマブルＩＣの幅にわたってクロックおよび構成信号を分散させるために使用される。「列状」および「水平」エリアへの言及が、縦方向配向において図面を閲覧することに関係することに留意されたい。
【００９２】
図１４に示されているアーキテクチャを利用するいくつかのプログラマブルＩＣは、プログラマブルＩＣの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび／または専用の論理であり得る。たとえば、図１４に示されているプロセッサブロックＰＲＯＣ８１０は、ＣＬＢおよびＢＲＡＭのいくつかの列にまたがる。
【００９３】
図１４は、例示的なプログラマブルＩＣアーキテクチャを示すことを意図されているにすぎないことに留意されたい。１つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図１４の上部に含まれる相互接続／論理実装形態は、例にすぎない。たとえば、実際のプログラマブルＩＣでは、たとえば、ＣＬＢの２つ以上の隣接する列は、一般的に、ユーザ論理の効率的な実装を容易にするために、ＣＬＢが現れるところならどこでも含まれる。
【００９４】
態様および特徴はいくつかの場合には個々の図で説明され得るが、組合せが明示的に示されないか、または組合せとして明示的に説明されなくても、ある図からの特徴は別の図の特徴と組み合わせられ得ることが諒解されよう。
【００９５】
回路および方法は、畳み込み演算を実施するためのデータをフォーマットするための様々なシステムに適用可能であると考えられる。他の態様および特徴は、本明細書の考慮から当業者に明らかになろう。回路および方法は、ソフトウェアを実行するように構成された１つまたは複数のプロセッサとして、特定用途向け集積回路（ＡＳＩＣ）として、またはプログラマブル論理デバイス上の論理として実装され得る。明細書および図面は例としてのみ考慮されることが意図されており、本発明の真の範囲は以下の特許請求の範囲によって示される。
【図１】
2021531572.tif 000044
【図２】
2021531572.tif 000045
【図３】
2021531572.tif 000046
【図４】
2021531572.tif 000047
【図５Ａ】
2021531572.tif 000048
【図５Ｂ】
2021531572.tif 000049
【図５Ｃ】
2021531572.tif 000050
【図５Ｄ】
2021531572.tif 000051
【図６Ａ】
2021531572.tif 000052
【図６Ｂ】
2021531572.tif 000053
【図７】
2021531572.tif 000054
【図８】
2021531572.tif 000055
【図９】
2021531572.tif 000056
【図１０】
2021531572.tif 000057
【図１１】
2021531572.tif 000058
【図１２】
2021531572.tif 000059
【図１３】
2021531572.tif 000060
【図１４】
2021531572.tif 000061
【国際調査報告】
2021531572.tif 000062
2021531572.tif 000063