IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7495924MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること
<>
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図1
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図2
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図3
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図4
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図5A
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図5B
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図5C
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図5D
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図6A
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図6B
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図7
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図8
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図9
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図10
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図11
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図12
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図13
  • 特許-MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-28
(45)【発行日】2024-06-05
(54)【発明の名称】MAC回路中の異なるカーネルを使用してデータのセットに対して連続するMAC演算を実施すること
(51)【国際特許分類】
   G06F 17/10 20060101AFI20240529BHJP
   G06F 7/50 20060101ALI20240529BHJP
   G06F 7/523 20060101ALI20240529BHJP
   G06N 3/10 20060101ALI20240529BHJP
【FI】
G06F17/10 S
G06F7/50
G06F7/523
G06N3/10
【請求項の数】 11
(21)【出願番号】P 2021501321
(86)(22)【出願日】2019-07-12
(65)【公表番号】
(43)【公表日】2021-11-18
(86)【国際出願番号】 US2019041586
(87)【国際公開番号】W WO2020018369
(87)【国際公開日】2020-01-23
【審査請求日】2022-07-08
(31)【優先権主張番号】16/040,357
(32)【優先日】2018-07-19
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110002077
【氏名又は名称】園田・小林弁理士法人
(72)【発明者】
【氏名】チャン, シアオチエン
(72)【発明者】
【氏名】ウー, エフラム シー.
(72)【発明者】
【氏名】バーマン, デーヴィッド
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許第09779786(US,B1)
【文献】特開2018-073103(JP,A)
【文献】米国特許出願公開第2018/0005074(US,A1)
【文献】安藤 洸太,深層畳込みニューラルネットワークに向けたデータ流再構成型演算器アレイアーキテクチャ,電子情報通信学会技術研究報告 Vol.116 No.53 IEICE Technical Report,日本,一般社団法人電子情報通信学会 The Institute of Electronics,Information and Communication Engineers,2016年05月12日,第116巻 53号,29-34頁,CSNG2016-00467-005
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06F 7/50
G06F 7/523
G06N 3/10
(57)【特許請求の範囲】
【請求項1】
積和(MAC)回路のアレイ
を備える回路装置であって、各MAC回路が、複数のカーネルの記憶のために構成されたキャッシュを含み、前記MAC回路は、
第1の数のMACサイクルまたは第2の数のMACサイクルの間に、入力特徴マップ(IFM)のデータ要素の異なる複数のセットの各セットを受信することと、
第1のMACサイクル中に、前記第1の数のMACサイクルの間に受信した前記データ要素の前記複数のセットの第1のセットと、第1の出力特徴マップ(OFM)深度インデックスに関連する前記カーネルのうちの第1のカーネル(H)とに対して第1のMAC演算を実施することと、
前記第1のMACサイクルに連続的に続く第2のMACサイクル中に、データ要素の前記第1のセットと、第2のOFM深度インデックスに関連する前記カーネルのうちの第2のカーネル(H)とに対して第2のMAC演算を実施することと、
前記第2のMACサイクルに連続的に続く第3、第4および第5のMACサイクル中に、前記第2の数のMACサイクルの間に受信した前記データ要素の第2のセットと、第3、第4および第5の出力特徴マップ(OFM)深度インデックスの各々に関連する前記カーネルのうちの第3、第4および第5のカーネル(H)とに対して第3、第4および第5のMAC演算を実施することと
を行うように構成された、回路装置。
【請求項2】
前記アレイに結合され、
前記キャッシュ中の前記第1のカーネルの第1のアドレスを受信することと、
前記第1のアドレスに基づいて前記キャッシュ中の前記第2のカーネルの第2のアドレスを生成することと、
前記第1のMACサイクル中に前記第1のアドレスを前記MAC回路に提供することと、
前記第2のMACサイクル中に前記第2のアドレスを前記MAC回路に提供することと
を行うように構成された、制御回路をさらに備える、請求項1に記載の回路装置。
【請求項3】
前記制御回路は、前記第1のアドレスがブロックデータ転送の開始アドレスにマッピングされたことに応答して、前記第2のアドレスを生成するために、前記第1のアドレスを固定値だけ増分するように構成され、
前記制御回路は、前記第1のアドレスがブロックデータ転送の終了アドレスにマッピングされたことに応答して、前記第2のアドレスを生成するために、前記第1のアドレスを固定値だけ減分するように構成された、
請求項2に記載の回路装置。
【請求項4】
前記制御回路が、
前記第1のアドレスに基づいて前記キャッシュ中の前記カーネルのうちの前記第3のカーネルの第3のアドレスを生成することと、
前記第3のMACサイクル中に前記第3のアドレスを前記MAC回路に提供することと
を行うように構成された、請求項3に記載の回路装置。
【請求項5】
前記制御回路が、
前記第2のアドレスを生成するために、前記第1のアドレスを固定値だけ増分することと、
前記第3のアドレスを生成するために、前記第2のアドレスを前記固定値だけ増分することと、
を行うように構成された、請求項4に記載の回路装置。
【請求項6】
前記アレイに結合され、
前記キャッシュ中の前記カーネルのうちの前記第1のカーネルの第1のアドレスを受信することと、
第2のアドレスを生成するために、前記第1のアドレスを固定値だけ増分することと、
第3のアドレスを生成するために、前記第2のアドレスを前記固定値だけ増分することと、
前記第1のMACサイクル中に前記第1のアドレスを前記MAC回路に提供することと、
前記第2のMACサイクル中に前記第2のアドレスを前記MAC回路に提供することと、
前記第3のMACサイクル中に前記第3のアドレスを前記MAC回路に提供することと
を行うように構成された、第1の制御回路と、
前記アレイに結合され、
前記IFMの前記データ要素の前記第1のセットおよび前記IFMの前記データ要素の前記第2のセットを受信することと、
入力制御信号に応答して、前記データ要素の前記第2のセットを前記MAC回路に提供することを少なくともMACサイクルだけ遅延させることと
を行うように構成された、第2の制御回路と
を備える、請求項1に記載の回路装置。
【請求項7】
第1の数のMACサイクルまたは第2の数のMACサイクルの間に、入力特徴マップ(IFM)のデータ要素の異なる複数のセットを積和(MAC)回路のアレイに入力することと、
第1のMACサイクル中に、前記MAC回路によって、前記第1の数のMACサイクルの間に受信したデータ要素の前記複数のセットの第1のセットと、前記MAC回路のキャッシュに記憶された複数のカーネルのうちの第1のカーネル(H)とに対して第1のMAC演算を実施することであって、前記第1のカーネルが第1の出力特徴マップ(OFM)深度インデックスに関連する、第1のMAC演算を実施することと、
前記第1のMACサイクルに連続的に続く第2のMACサイクル中に、前記MAC回路によって、前記データ要素の前記第1のセットと、前記複数のカーネルのうちの第2のカーネル(H)とに対して第2のMAC演算を実施することであって、前記第2のカーネルが第2のOFM深度インデックスに関連する、第2のMAC演算を実施することと、
前記第2のMACサイクルに連続的に続く第3、第4および第5のMACサイクル中に、前記第2の数のMACサイクルの間に受信した前記データ要素の第2のセットと、第3、第4および第5の出力特徴マップ(OFM)深度インデックスの各々に関連する前記複数のカーネルのうちの第3、第4および第5のカーネル(H)とに対して第3、第4および第5のMAC演算を実施することと
を含む、方法。
【請求項8】
前記キャッシュ中の前記第1のカーネルの第1のアドレスを、前記アレイに結合された制御回路に入力することと、
前記制御回路によって、前記第1のアドレスに基づいて前記キャッシュ中の前記第2のカーネルの第2のアドレスを生成することと、
前記第1のMACサイクル中に前記第1のアドレスを前記MAC回路に入力することと、
前記第2のMACサイクル中に前記第2のアドレスを前記MAC回路に入力することと
を含む、請求項7に記載の方法。
【請求項9】
前記第2のアドレスを生成することは、前記第1のアドレスがデータブロック転送の開始アドレスにマッピングされたことに応答して、前記第1のアドレスを固定値だけ増分することを含み、
前記第2のアドレスを生成することは、前記第1のアドレスがデータブロック転送の終了アドレスにマッピングされたことに応答して、前記第1のアドレスを固定値だけ減分することを含む、
請求項8に記載の方法。
【請求項10】
第1の制御回路によって、前記第1のアドレスに基づいて前記キャッシュ中の前記第3のカーネルの第3のアドレスを生成することと、
前記第3のMACサイクル中に前記第3のアドレスを前記MAC回路に入力することと
を含む、請求項9に記載の方法。
【請求項11】
前記キャッシュ中の前記複数のカーネルのうちの前記第1のカーネルの第1のアドレスを、前記アレイに結合された第1の制御回路に入力することと、
前記第1の制御回路によって、前記第1のアドレスに基づいて前記キャッシュ中の前記第2のカーネルの第2のアドレスを生成することと、
前記第1の制御回路によって、前記第1のアドレスに基づいて前記キャッシュ中の前記第3のカーネルの第3のアドレスを生成することと、
前記第1のMACサイクル中に前記第1のアドレスを前記MAC回路に入力することと、
前記第2のMACサイクル中に前記第2のアドレスを前記MAC回路に入力することと、
前記第3のMACサイクル中に前記第3のアドレスを前記MAC回路に入力することと、
前記IFMの前記データ要素の前記複数のセットを、前記アレイに結合された第2の制御回路に入力することと、
前記第2の制御回路によって、前記第2の制御回路への入力制御信号に応答して、データ要素の前記複数のセットのうち前記データ要素の1つのセットを前記MAC回路に入力することを少なくともMACサイクルだけ遅延させることと
を含む、請求項7に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、積和(MAC:multiply-and-accumulate)回路のアレイの連続するMACサイクル中に異なるカーネルを使用してデータのセットに対してMAC演算を実施することに関する。
【背景技術】
【0002】
ニューラルネットワークなどの処理回路が、様々な異なる問題に対するソリューションを提供する。畳み込みニューラルネットワーク(CNN:convolutional neural network)が、たとえば、画像処理のために使用され得る。CNNは、グラフィックス処理ユニット(GPU)を使用して実装され、いくつかの同様のタスクをグループ化することと、タスクのグループをバッチとして計算することとによって計算コストを低減するためにバッチ処理手法を使用する。スケーラブルな数のストリーミングマルチプロセッサ(SM)の内部の複数のストリーミングプロセッサ(SP)コアを並列に使用することによって、タスクのバッチが計算され得る。GPUのコントローラの実装コストはいくつかのタスクにわたって償還され得るが、GPUが、CNNの計算効率を維持するためにバッチモードでタスクを一緒に処理する前にすべてのタスクが準備ができるのを待たなければならないので、バッチサイズが増加するにつれて、CNNのレイテンシは増加することになる。
【0003】
限定はしないが、デジタル信号プロセッサ(DSP)、汎用コンピュータプロセッサ、プログラマブル集積回路、プログラマブル論理デバイス(PLD)、およびシステムオンチップ(SoC)デバイスを含む、CNNを実装することができる様々な異なる回路がある。PLDは、指定された論理関数を実施するようにプログラムされ得るプログラマブル集積回路(IC)のタイプである。PLDの1つのタイプ、フィールドプログラマブルゲートアレイ(FPGA)は、プログラマブルタイルのアレイを含むことができる。これらのプログラマブルタイルは、たとえば、入出力ブロック(IOB)、構成可能論理ブロック(CLB)、専用ブロックランダムアクセスメモリ(BRAM)、乗算器、デジタル信号処理ブロック(DSP)、プロセッサ、クロックマネージャ、遅延ロックループ(DLL)、周辺構成要素相互接続(PCI)などのバスまたはネットワークインターフェース、PCI Express(PCIe)、イーサネットなどを含むことができる、様々なタイプの論理ブロックを備える。いくつかのデバイスは、単一のICチップ上のコンピュータシステム全体として効果的に働くのに十分な構成要素および機能性を含む。そのような機能性をもつデバイスは、SoCと呼ばれることがある。いくつかのSoCデバイスは、様々なPLDによって提供されるプログラマブル論理と同様であるプログラマブル論理を含むことができる。
【0004】
従来の実装形態は、しばしば、処理ユニットとメモリとの間のボトルネックという欠点がある。したがって、データは、処理回路を十分に利用するのに十分高速に提供されないことがある。
【発明の概要】
【0005】
回路装置(circuit arrangement)が積和(MAC)回路のアレイを含み、各MAC回路が、複数のカーネルの記憶のために構成されたキャッシュを含む。MAC回路は、第1のレートにおいて入力特徴マップ(IFM:input feature map)のデータ要素の第1のセットを受信するように構成される。MAC回路は、第1のMACサイクル中に、データ要素の第1のセットと、第1の出力特徴マップ(OFM:output feature map)深度インデックス(d)に関連するカーネルのうちの第1のカーネル(H)とに対して第1のMAC演算を実施することであって、MACサイクルのレートが第1のレートよりも速い、第1のMAC演算を実施することを行うように構成される。MAC回路は、第1のMACサイクルに連続的に続く第2のMACサイクル中に、データ要素の第1のセットと、第2のOFM深度インデックス(d)に関連するカーネルのうちの第2のカーネル(H)とに対して第2のMAC演算を実施することを行うように構成される。
【0006】
回路装置は、アレイに結合された制御回路を含むことができる。制御回路は、キャッシュ中の第1のカーネルの第1のアドレスを受信することと、第1のアドレスに基づいてキャッシュ中の第2のカーネルの第2のアドレスを生成することと、第1のMACサイクル中に第1のアドレスをMAC回路に提供することと、第2のMACサイクル中に第2のアドレスをMAC回路に提供することとを行うように構成される。
【0007】
制御回路はまた、第1のアドレスがブロックデータ転送の開始アドレスにマッピングされたことに応答して、第2のアドレスを生成するために、第1のアドレスを固定値だけ増分するように構成され得る。
【0008】
制御回路はまた、第1のアドレスがブロックデータ転送の終了アドレスにマッピングされたことに応答して、第2のアドレスを生成するために、第1のアドレスを固定値だけ減分するように構成され得る。
【0009】
アレイのMAC回路は、第2のMACサイクルに連続的に続く第3のMACサイクル中に、データ要素の第1のセットと、第3のOFM深度インデックス(d)に関連するカーネルのうちの第3のカーネル(H)とに対して第3のMAC演算を実施するように構成され得る。
【0010】
第1の制御回路がアレイに結合され得る。第1の制御回路は、キャッシュ中のカーネルのうちの第1のカーネルの第1のアドレスを受信することと、第1のアドレスに基づいてキャッシュ中のカーネルのうちの第2のカーネルの第2のアドレスを生成することと、第1のアドレスに基づいてキャッシュ中のカーネルのうちの第3のカーネルの第3のアドレスを生成することと、第1のMACサイクル中に第1のアドレスをMAC回路に提供することと、第2のMACサイクル中に第2のアドレスをMAC回路に提供することと、第3のMACサイクル中に第3のアドレスをMAC回路に提供することとを行うように構成される。
【0011】
第1の制御回路はまた、第2のアドレスを生成するために、第1のアドレスを固定値だけ増分することと、第3のアドレスを生成するために、第2のアドレスを固定値だけ増分することとを行うように構成され得る。
【0012】
回路装置は、アレイに結合された第2の制御回路を含むことができる。第2の制御回路は、第1のレートに等しいかまたは第1のレートよりも速い入力レートにおいて、IFMのデータ要素の第1のセットおよびIFMのデータ要素の第2のセットを受信することと、入力制御信号に応答して、データ要素の第2のセットをMAC回路に提供することを少なくともMACサイクルだけ遅延させることとを行うように構成される。
【0013】
アレイのMAC回路は、第1のレートよりも遅い第2のレートにおいて、IFMのデータ要素の第2のセットを受信することと、第2のMACサイクルに連続的に続く第3のMACサイクル中に、データ要素の第2のセットと、第3のOFM深度インデックス(d)に関連するカーネルのうちの第3のカーネル(H)とに対して第3のMAC演算を実施することと、第3のMACサイクルに連続的に続く第4のMACサイクル中に、データ要素の第2のセットと、第4のOFM深度インデックス(d)に関連するカーネルのうちの第4のカーネル(H)とに対して第4のMAC演算を実施することと、第4のMACサイクルに連続的に続く第5のMACサイクル中に、データ要素の第2のセットと、第5のOFM深度インデックス(d)に関連するカーネルのうちの第5のカーネル(H)とに対して第5のMAC演算を実施することとを行うように構成され得る。
【0014】
回路装置のアレイは、アレイのMAC回路の各列に結合された複数のコンテキスト切替えアキュムレータを含むことができる。複数のコンテキスト切替えアキュムレータは、記憶された値を、アキュムレータに直接結合されたMAC回路の出力と累算することと、アキュムレータに直接結合されたMAC回路の出力で初期化することとを行うように構成される。
【0015】
方法が、第1のレートにおいて、入力特徴マップ(IFM)のデータ要素の第1のセットを積和(MAC)回路のアレイに入力することを含む。本方法は、第1のMACサイクル中に、MAC回路によって、データ要素の第1のセットと、MAC回路のキャッシュに記憶された第1のカーネル(H)とに対して第1のMAC演算を実施することであって、第1のカーネルが第1の出力特徴マップ(OFM)深度インデックス(d)に関連し、MACサイクルのレートが第1のレートよりも速い、第1のMAC演算を実施することを含む。本方法は、第1のMACサイクルに連続的に続く第2のMACサイクル中に、MAC回路によって、データ要素の第1のセットと、MAC回路のキャッシュに記憶された第2のカーネル(H)とに対して第2のMAC演算を実施することであって、第2のカーネルが第2のOFM深度インデックス(d)に関連する、第2のMAC演算を実施することを含む。
【0016】
本方法は、キャッシュ中の第1のカーネルの第1のアドレスを、アレイに結合された制御回路に入力することと、制御回路によって、第1のアドレスに基づいてキャッシュ中の第2のカーネルの第2のアドレスを生成することと、第1のMACサイクル中に第1のアドレスをMAC回路に入力することと、第2のMACサイクル中に第2のアドレスをMAC回路に入力することとを含むことができる。
【0017】
第2のアドレスを生成することは、第1のアドレスがデータブロック転送の開始アドレスにマッピングされたことに応答して、第1のアドレスを固定値だけ増分することを含むことができる。
【0018】
第2のアドレスを生成することは、第1のアドレスがデータブロック転送の終了アドレスにマッピングされたことに応答して、第1のアドレスを固定値だけ減分することを含むことができる。
【0019】
本方法は、第2のMACサイクルに連続的に続く第3のMACサイクル中に、MAC回路によって、データ要素の第1のセットと、MAC回路のキャッシュに記憶された第3のカーネル(H)とに対して第3のMAC演算を実施することであって、第3のカーネルが第3のOFM深度インデックス(d)に関連する、第3のMAC演算を実施することを含むことができる。
【0020】
本方法は、キャッシュ中のカーネルのうちの第1のカーネルの第1のアドレスを、アレイに結合された第1の制御回路に入力することと、第1の制御回路によって、第1のアドレスに基づいてキャッシュ中の第2のカーネルの第2のアドレスを生成することと、第1の制御回路によって、第1のアドレスに基づいてキャッシュ中の第3のカーネルの第3のアドレスを生成することと、第1のMACサイクル中に第1のアドレスをMAC回路に入力することと、第2のMACサイクル中に第2のアドレスをMAC回路に入力することと、第3のMACサイクル中に第3のアドレスをMAC回路に入力することとを含むことができる。
【0021】
第2のアドレスを生成することは、第1のアドレスを固定値だけ増分することと、第2のアドレスを固定値だけ増分することとを含むことができる。
【0022】
本方法は、第1のレートに等しいかまたは第1のレートよりも速い入力レートにおいて、IFMのデータ要素の第1のセットおよびIFMのデータ要素の第2のセットを、アレイに結合された第2の制御回路に入力することと、第2の制御回路によって、第2の制御回路への入力制御信号に応答して、データ要素の第2のセットをMAC回路に入力することを少なくともMACサイクルだけ遅延させることとを含むことができる。
【0023】
本方法は、第1のレートよりも遅い第2のレートにおいて、IFMのデータ要素の第2のセットをアレイのMAC回路に入力することと、第2のMACサイクルに連続的に続く第3のMACサイクル中に、MAC回路によって、データ要素の第2のセットと、MAC回路のキャッシュに記憶された第3のカーネル(H)とに対して第3のMAC演算を実施することであって、第3のカーネルが第3のOFM深度インデックス(d)に関連する、第3のMAC演算を実施することと、第3のMACサイクルに連続的に続く第4のMACサイクル中に、MAC回路によって、データ要素の第2のセットと、MAC回路のキャッシュに記憶された第4のカーネル(H)とに対して第4のMAC演算を実施することとを含むことができる。第4のカーネルは第4のOFM深度インデックス(d)に関連する。本方法は、第4のMACサイクルに連続的に続く第5のMACサイクル中に、MAC回路によって、データ要素の第2のセットと、MAC回路のキャッシュに記憶された第5のカーネル(H)とに対して第5のMAC演算を実施することであって、第5のカーネルが第5のOFM深度インデックス(d)に関連する、第5のMAC演算を実施することを含むことができる。
【0024】
本方法は、アレイのMAC回路の各列に結合された複数のコンテキスト切替えアキュムレータによって、記憶された値を、アキュムレータに直接結合されたMAC回路の出力と累算することと、アキュムレータに直接結合されたMAC回路の出力でアキュムレータを初期化することとを含むことができる。
【0025】
他の特徴は、以下の発明を実施するための形態および特許請求の範囲の考慮から認識されよう。
【0026】
回路装置および方法の様々な態様および特徴は、以下の発明を実施するための形態を検討し、以下の図面を参照すると明らかになろう。
【図面の簡単な説明】
【0027】
図1】コントローラと、制御ギアボックスと、データギアボックスと、MAC回路のアレイとを含む例示的な回路装置のブロック図である。
図2】MAC回路の例示的なアレイのブロック図である。
図3図2のMAC回路のアレイの例示的なMAC回路のブロック図である。
図4】例示的なOFM深度スプリッティングを利用する図2のアレイのブロック図である。
図5A】カーネルの行および列インデックス(u,v)によって反復される第1のOFMパスp=0についての左下MAC回路の乗算出力値MULシーケンスを示す図である。
図5B】IFM位相インデックスnによって反復される第1のOFMパスp=0についての左下MAC回路の乗算出力値MULシーケンスを示す図である。
図5C】カーネルの行および列インデックス(u,v)によって反復される第1のOFMパスp=0の左上MAC回路についての累算出力値MACシーケンスを示す図である。
図5D】IFM位相インデックスnによって反復される第1のOFMパスp=0の左上MAC回路についての累算出力値MACシーケンスを示す図である。
図6A】OFMの行および列インデックス(r,c)によって反復される最左アキュムレータのOFM出力シーケンスを示す図である。
図6B】OFM深度インデックスdによって反復される最左アキュムレータのOFM出力シーケンスを示す図である。
図7】例示的な制御ギアボックスのブロック図である。
図8】MAC回路中のカーネルキャッシュの例示的なレイアウトを示す図である。
図9】例示的なデータギアボックスのブロック図である。
図10】OFMパスが2つのOFM位相を含む、図1の回路装置の例示的なタイミング図である。
図11】OFMパスが3つのOFM位相を含む、図1の回路装置の例示的なタイミング図である。
図12】OFMパスが3つのOFM位相を含むことから2つのOFM位相を含むことに切り替わる、図1の回路装置の例示的なタイミング図である。
図13】例示的な入力活性化関数ユニット(IAFU:input activation function)を示す図である。
図14】開示される回路およびプロセスが実装され得る、プログラマブル集積回路(IC)を示す図である。
【発明を実施するための形態】
【0028】
以下の説明では、本明細書で提示される特定の例について説明するために、多数の具体的な詳細が記載される。しかしながら、1つまたは複数の他の例および/またはこれらの例の変形形態が、下記のすべての具体的な詳細なしに実施され得ることは、当業者に明らかであろう。他の事例では、本明細書の例の説明を不明瞭にしないように、よく知られている特徴は詳細に説明されていない。説明しやすいように、同じ要素または同じ要素の追加のインスタンスを指すために、異なる図において同じ参照番号が使用され得る。
【0029】
畳み込みニューラルネットワーク(CNN)などのニューラルネットワークの計算効率を改善することは、計算複雑さおよび計算速度の増加に付随し得る。計算効率は、ニューラルネットワークの積和(MAC)回路の計算速度に等しい周波数において演算するコントローラを使用することによって改善され得、それにより、MAC回路ができる限りビジーに保たれることが可能になる。しかしながら、MAC回路の速度に適応するために、コントローラは、MAC回路の計算複雑さに比例するアドレス生成の複雑さを扱うことが可能でなければならない。コントローラの論理複雑さと速度の両方を増加させることは、実装のコストを指数関数的に増加させる。しかしながら、制御回路の論理がMACレートにおいて演算する場合でも、コントローラによってデータがMAC回路に提供されるレートは、メモリなどの他の回路によって限定され得る。
【0030】
開示される回路装置および方法は、MAC回路のコントローラのより遅い演算周波数を維持しながら、MAC処理周波数(以下、MACレートと呼ばれる)において演算しながら、CNNのMAC回路のアレイをできる限りビジーに保つための手法を提供する。MACレートは、MAC回路に提供されるクロック信号に基づき得る。CNNの畳み込み(CONV)層および全結合(FC)層がMAC演算を実施する。様々な他の算術演算が、正規化線形ユニット(ReLU:rectified linear unit)、プーリング、および正規化(normalization)など、CNNの他の層において実施され得る。本明細書で使用される「MAC回路」は、乗算器回路と、アキュムレータ回路と、MAC演算において使用されるべきカーネルの記憶のために構成されたキャッシュとの組合せを指す。畳み込み演算が並列に実施され得るので、MAC回路のアレイは、畳み込み演算を並列に実施し、CNNの計算速度を増加させるために使用され得る。アレイのスループットを最大にするために、MAC回路の処理サイクル(以下、MACサイクルと呼ばれる)は十分に利用され、MACレートは最大にされる。
【0031】
開示される手法の計算効率の増加は、MAC回路に提供されるアドレスおよび制御パターンの複雑さを増加させる。開示される手法の実装形態は、MAC回路のグローバルメモリおよび/またはキャッシュからデータを読み取り、および/またはMAC回路のグローバルメモリおよび/またはキャッシュにデータを書き込むためのアレイについての特殊なアドレスパターンを生成する、1つまたは複数の制御回路を含む。制御回路は、MAC回路のデータをアドレス指定し、演算のタイミングをとるための特殊な制御パターンを生成する。
【0032】
開示される手法は、活性化特徴深度をスプリットすることによって、各MAC回路中のある数(M)の並列スレッドを時分割多重化する。制御回路(または「コントローラ」)が、MACレートにおいてM個のスレッドについてのアドレスおよび制御パターンを生成する。本明細書で使用される「スレッド」は、出力特徴マップの深度インデックスにおける値の計算を指す。アドレスおよび制御パターンは、以下、制御ギアボックスと呼ばれる、別の制御回路によって、MAC回路のキャッシュに直接マッピングされた(1つまたは複数の)メモリアドレスに変換され、アドレスおよび制御パターンは、MAC回路の処理サイクルごとに更新される。以下、データギアボックスと呼ばれる、別の制御回路は、メモリからのデータ読取りであるレートを、データがMAC回路に提供される別のレートに適応させる。いくつかの事例では、データギアボックスは、データが読み取られるレートよりも遅いレートにおいて、データをMAC回路に提供する。いくつかの事例では、制御ギアボックスとデータギアボックスとが制御ワードとアドレスとデータとをMAC回路に提供するレートは、所与の時点においてMAC回路中でインターリーブされる並列スレッドの数(M)に応じて動的に変化する。たとえば、開示される手法は、MAC回路中の2つの並列スレッドをインターリーブすることからMAC回路中の3つの並列スレッドに切り替わることができ、その逆も同様である。
【0033】
複数のカーネルについてのアドレスが、複数の連続するMAC演算が、連続するMACサイクル中にデータ要素のセットに対して実施されることになるように、MAC回路の各々のキャッシュ中で記憶され、インターリーブされる。MAC演算は、データと制御ワードとアドレスとがMAC回路に提供されるレートよりも速いレートにおいて実施されるが、コントローラの演算周波数は一定のままである。コントローラは、MACレートに正比例する周波数(たとえば、1/M)において動作する。
【0034】
開示される手法は、バランスのとれたパイプラインを提供し、リタイミングを容易にするために、レイテンシ(たとえば、サイクルタイムトレードオフ)から制御回路についての初期論理深度を推定する。
【0035】
図1は、コントローラ108と、制御ギアボックス110と、データギアボックス104と、MAC回路のアレイ106とを含む例示的な回路装置100のブロック図を示す。コントローラ108は、グローバルメモリ102との間のデータアクセスについてのアドレスパターンを生成する。データギアボックス104は、グローバルメモリ102とMAC回路のアレイ106とに結合される。データギアボックス104は、グローバルメモリ102から読み取られたデータに関して、コントローラ108とアレイ106との間のレート適応を実施する。制御ギアボックス110は、コントローラ108とアレイ106とに結合される。制御ギアボックス110は、コントローラ108からのアドレスおよび制御ワードに関してコントローラ108とアレイ106との間のレート適応を実施する。アレイ106から出力されたデータは、グローバルメモリ102に書き込まれる。データギアボックス104と制御ギアボックス110とアレイ106との例示的な演算が、以下の図4図12に関連して説明される。
【0036】
図2は、MAC回路の例示的なアレイのブロック図を示す。図2に示されているアレイは、図1に示されているアレイ106に類似することがある。アレイ106は、m+1行とn+1列とにおいて配置されたMAC回路を含む。アレイ106の行0はMAC回路200-0、200-1、200-2、...200-nを含み、アレイ106の行1はMAC回路201-0、201-1、201-2、...201-nを含み、アレイ106の行mはMAC回路231-0、231-1、231-2、...231-nを含む。
【0037】
本開示の少なくとも1つの実装形態では、アレイ106の各列は、M個の時分割多重化されたスレッドに専用である、列のそれぞれの最上MAC回路に結合されたM個のコンテキスト切替え並列アキュムレータを含む。アキュムレータ222-0は、アレイ106の列0のMAC回路231-0に結合され、アキュムレータ222-1は、列1のMAC回路231-1に結合され、アキュムレータ222-2は、列2のMAC回路231-2に結合され、アキュムレータ222-nは、列nのMAC回路231-nに結合される。各アキュムレータは、アレイ106からの各スレッドについての各累算部分ドット積値を一緒に記憶および加算して、各スレッドについての最終ドット積値を得る。
【0038】
少なくとも1つの実装形態では、出力活性化関数ユニット(OAFU:output activation function unit)が、アレイ106のそれぞれの列のアキュムレータに結合される。OAFU224-0はアキュムレータ222-0に結合され、OAFU224-1はアキュムレータ224-1に結合され、OAFU224-2はアキュムレータ222-2に結合され、OAFU224-nはアキュムレータ222-nに結合される。各OAFUは、ReLU、プーリング、および正規化など、1つまたは複数の活性化関数を、アキュムレータから出力された値に適用する。OAFUの出力は、図1に示されているグローバルメモリ102などのグローバルメモリに転送され得る。
【0039】
少なくとも1つの実装形態では、アレイ106の各行は、行の最左MAC回路に結合された入力活性化関数ユニット(IAFU)を含む。IAFU220-0は、アレイの行0のMAC回路200-0に結合され、IAFU220-1は、行1のMAC回路201-0に結合され、IAFU220-mは、行mのMAC回路231-0に結合される。各IAFUは、1つまたは複数の活性化関数を、グローバルメモリ102から読み取られたデータに適用する。データは、図1に示されているデータギアボックス104によってIAFUに提供されるIFMデータであり得る。IAFUは、OAFUがバイパスされるか、またはプーリング演算が、MAC回路に入力されるデータとMAC回路から出力されるデータの両方に適用されるとき、可能にされ得る。IAFUからの出力は、MAC回路に直接転送されるか、またはグローバルメモリ102に転送(たとえば、ループ)されてバックし得る。グローバルメモリ102にループバックすることは、以下の図13に関連してさらに説明される。IAFUがバイパスされる場合、入力データはMAC回路に直接供給される。
【0040】
図2に示されているように、アレイ106に入力されたデータは、行の各MAC回路に対して水平方向に左から右にシフトされる。MAC回路から出力された累算値は、列のMAC回路を通して垂直方向に下から上にシフトされる。
【0041】
制御ギアボックス110などの制御ギアボックスは、各スレッドについてカーネルアクセスおよびMAC演算を実施するために、アドレスおよび制御101をアレイに提供する。アドレスおよび制御101は、MAC回路のすべてによって共有され、各MACサイクルで、下から上におよび左から右にシフトされる。アドレスおよび制御103は、各MACサイクルで、垂直方向に下から上にシフトされ、すべてのIAFUによって共有される。アドレスおよび制御105は、各MACサイクルで、水平方向に左から右にシフトされ、M個の並列アキュムレータ間のコンテキスト切替えを制御するためにすべてのアキュムレータによって共有される。アドレスおよび制御107は、各MACサイクルで、水平方向に左から右にシフトされ、すべてのOAFUによって共有される。
【0042】
図2に示されているブロック図およびその構成要素の配置およびサイズは、アレイ106の物理的構成要素の配置またはサイズを限定しない。図2は、左から右への、および下から上へのデータフローを示しているが、本開示の実装形態はそのように限定されない。
【0043】
図3は、図2のMAC回路のアレイの例示的なMAC回路のブロック図を示す。図3はアレイ106のMAC回路201-0を示しているが、図3に示されている構造は、アレイ106の各MAC回路に適用可能である。MAC回路201-0は、乗算回路330と、加算回路334と、カーネルキャッシュ332とを含む。乗算回路330と加算回路334とは、協働して、MAC演算を実施する。乗算回路330は、MAC回路201-0へのデータ入力Xと、カーネルキャッシュ332から読み取られたカーネルHとの乗算出力値MULを出力する。データXは、グローバルメモリ102からのデータ、またはIAFU220-1の出力のいずれかである。データXは、行1の右の隣接するMAC回路(たとえば、201-1)にシフトされる。カーネルHは、特定のMAC演算についての重みを含む。アドレスおよび制御103は、カーネルキャッシュ332からカーネルHを読み取るために、制御ギアボックス110によってMAC回路201-1に提供される。
【0044】
加算回路334は、乗算出力値MULと、下の隣接するMAC回路(たとえば、200-0)からの累算値との和を出力する。加算回路334の出力は、上の隣接するMAC回路(たとえば、201-0)の加算回路に入力される。行0のMAC回路について、加算回路に入力された累算値は、0またはバイアス値のいずれかとして初期化され得る。最上行mのMAC回路について、加算回路の出力は、行mのMAC回路の上にMAC回路がないので、グローバルメモリ102、アキュムレータ(たとえば、224-0)、またはOAFU(たとえば、222-0)に出力される。
【0045】
アレイ106は、アレイ106のMAC回路に入力されたデータXが入力特徴マップ(IFM)のデータであり得、アレイ106から出力されたデータが出力特徴マップ(OFM)のデータであり得るようなCNNの一部であり得る。特定のOFM深度インデックスdについてのアレイ106の出力は、式1として書かれ得る。
ここで、Dは活性化入力特徴次元の深度(たとえば、IFMの数)であり、Dは活性化出力特徴次元の深度(たとえば、OFMの数)であり、Xは、X[r,c,d]としてインデックス付けされたランク3活性化入力であり、ここで、d∈[0,D-1]はIFM深度インデックスであり、r∈[0,H-1]およびc∈[0,W-1]は、それぞれ、2次元(2D)IFMの行インデックスおよび列インデックスであり、Hは、H[u,v,d,d]としてインデックス付けされたランク4重み入力であり、ここで、(d,d)はIFM深度インデックスdとOFM深度dとの交差部におけるカーネルを指し、u∈[0,F-1]およびv∈[0,F-1]は、それぞれ、2Dカーネルの行インデックスおよび列インデックスであり、ここで、Fはカーネルの高さであり、Fはカーネルの幅であり、Sは列に沿ったストライドであり、Sは行に沿ったストライドであり、Yは、Y[r,c,d]としてインデックス付けされたランク3活性化出力であり、ここで、d∈[0,D-1]はOFM深度インデックスであり、r∈[0,H-1]およびc∈[0,W-1]は、それぞれ、2D OFMの行インデックスおよび列インデックスであり、conv2d()は2D畳み込み演算子である。畳み込み演算は、式2で説明されるようなドット積演算を実施する。
【0046】
特定の行および列インデックス(r,c)についてのOFMは、式4として説明される。
【0047】
IFM深度Dは、IFM深度インデックスdが式4として表され得るような複数のIFM位相に分割され得る。
ここで、Nは、MAC回路のアレイの高さ(たとえば、アレイの各列中のMAC回路の数)であり、nはIFM位相インデックス
であり、
はアレイの行インデックスである。IFM深度DまたはOFM深度Dを超えるカーネルの重みは、式5に示されているように、0になるように制約される。
H[:,:,d,d]=0 : d≧Dまたはd≧Dである場合 (5)
【0048】
したがって、式3は、式6として書き直され得る。
ここで、MACは、MAC[r,c,u,v,d,n]としてインデックス付けされた1つの列に沿ったN個のMAC回路にわたってある時間に累算されたランク6値であり、(d,n)は、IFM[n,n+N-1]とOFM深度インデックスdとの交差部におけるすべてのカーネルを指し、u∈[0,F-1]およびv∈[0,F-1]は、それぞれ、2Dカーネルの行インデックスおよび列インデックスであり、r∈[0,H-1]およびc∈[0,W-1]は、それぞれ、2D OFMの行インデックスおよび列インデックスであり、ここで、HはOFMの高さであり、WはOFMの幅である。MACは、式7に示されているように表され得る。
ここで、MULは、ある時間におけるMAC回路の乗算回路の出力である。MULは、
としてインデックス付けされたランク7値であり、ここで、
は、IFM深度インデックスdとOFM深度インデックスdとの交差部におけるカーネルを指す。MACは、式8に示されているように表され得る。
【0049】
再び図2および図3を参照すると、アドレスおよび制御101は、インデックス
におけるカーネルキャッシュ332からのカーネルHにアクセスするために使用される。カーネルHは、乗算出力値
を生成するためにIFMデータXを乗算される。各行からのすべての乗算出力値
が、アレイ106のMAC回路(たとえば、200-0、201-0、...、231-0)の列中の加算カスケードチェーンに沿って累算された後に、最上MAC回路(たとえば、231-0)は、最上MAC回路の加算出力においてMAC[r,c,u,v,d,n]を生成する。次いで、アキュムレータ(たとえば、220-0)は、MACを記憶し、
を実施して、OFMの特定の行および列インデックス(r,c)についての最終ドット積値を得る。
【0050】
MACサイクルごとに異なるOFM深度インデックスについての乗算演算を実施することによって、M個の並列スレッドが、タイミング共有によって1つのMAC回路内にグループ化され得る。乗算出力値
は、異なるOFM深度インデックスdについて、MACサイクルごとに連続的に更新される。OFM深度Dは、OFM深度インデックスdが式9に示されているように表され得るような複数のOFM位相に分割される。
ここで、Nは、MAC回路のアレイの幅(たとえば、アレイの各行中のMAC回路の数)であり、nはOFM位相インデックス
であり、
はアレイの列インデックスである。
【0051】
異なるOFM深度インデックスdが同じ列インデックス
を有する場合、それは、MAC演算が、列インデックス
のMAC回路によって、異なるOFM深度インデックスdに対応する異なるOFM位相中で実施されることを意味する。OFM位相のサブセットが、OFMパスとして一緒にグループ化される。複数のOFM位相が一緒に時分割多重化される。1よりも大きい任意の整数が、2または3で均等に割り切れるので、複数のOFM位相インデックスnは、式10で説明されるように、OFMパスインデックスpとして一緒にグループ化され得る。
【0052】
いくつかの実装形態では、OFMパスは、2つのOFM位相および/または3つのOFM位相を含む。
が奇数の整数である場合、すべてのOFMパスは2つのOFM位相を含む。
が、1よりも大きい偶数の整数である場合、最後のOFMパスを除くすべてのOFMパスは、2つのOFM位相を含み、最後のOFMパスは3つのOFM位相を含む。
【0053】
図4は、例示的なOFM深度スプリッティングを利用する図2のアレイ106のブロック図を示す。以下の例は、以下の表1中のパラメータに基づく。
【0054】
IFM位相の数は
であり、したがって、4つのIFM位相(n∈[0,3])がある。OFM位相の数は
であり、したがって、13個のOFM位相(n∈[0,12])がある。13個のOFM位相は、6つのOFMパス(p∈[0,5])にスプリットされる。
は、1よりも大きい偶数の整数(12)であるので、最初の5つのOFMパス(p∈[0,4])の各々は、最初の10個のOFM位相(n∈[0,9])のうちの2つを含む。第6および最後のOFMパス(p=5)は、3つのOFM位相(n∈[10,12])を含む。したがって、2つのスレッドまたは3つのスレッドのいずれかが、MAC回路中でインターリーブした。
【0055】
各MAC回路は、ある時間における1つのOFMパスpにおける異なるOFM深度インデックスdついての乗算出力値
を生成している。たとえば、最左MAC回路(たとえば、200-0(0,0)、201-0(1,0)、202-0(2,0)、231-0(31,0))は、2つのMACサイクルごとにパターン

を繰り返すことによって、第1のOFMパスp=0におけるOFM深度インデックスd=0、16についての乗算出力値MULを生成している。
は、2つのMACサイクルのうちの第1のMACサイクル中に実施され、
は、2つのMACサイクルのうちの第2のMACサイクル中に実施される。
【0056】
左上隅MAC回路231-0(31,0)は、単一の列に沿って乗算出力値MULを加算し、2つのMACごとにパターンMAC[r,c,u,v,0,n]、MAC[r,c,u,v,16,n]を繰り返すことによって、第1のOFMパスp=0におけるOFM深度インデックスd=0、16についてのMAC出力値を生成する。MAC[r,c,u,v,0,n]は、2つのMACサイクルのうちの第1のMACサイクル中に実施され、MAC[r,c,u,v,16,n]は、2つのMACサイクルのうちの第2のMACサイクル中に実施される。複数のMACサイクルにわたって、左上隅アキュムレータ(たとえば、222-0)は、時間インターリーブ様式でOFMの特定の行および列インデックス(r,c)について
および
を実施することによって、2つの連続するMACサイクルのバーストにおける第1のOFMパスp=0におけるOFM深度インデックスd=0、16についての最終ドット積Y[r,c,0]、Y[r,c,16]を生成する。
【0057】
のシーケンシングは、内部ループが、カーネルの行および列インデックス(u,v)によって反復されるのかIFM位相インデックスnによって反復されるのかに依存する。3×3カーネルを有する図4の例を続けると、図5Aは、カーネルの行および列インデックス(u,v)によって反復される第1のOFMパスp=0についての左下MAC回路200-0(0,0)の乗算出力値MULシーケンスを示す。対照的に、図5Bは、IFM位相インデックスnによって反復される第1のOFMパスp=0についての左下MAC回路200-0(0,0)の乗算出力値MULシーケンスを示す。図5Cは、カーネルの行および列インデックス(u,v)によって反復される第1のOFMパスp=0の左上MAC回路231-0(31,0)についての累算出力値MACシーケンスを示す。対照的に、図5Dは、IFM位相インデックスnによって反復される第1のOFMパスp=0の左上MAC回路231-0(31,0)についての累算出力値MACシーケンスを示す。
【0058】
カーネルの次元が1よりも大きい(F>1およびF>1)か、または入力活性化が1よりも大きい(
)ので、最上アキュムレータがOFMの特定の行および列インデックス(r,c)についての最終ドット積Y[r,c,d]を生成するために、複数のMACサイクルが必要とされ得る。出力有効シーケンスは、バースト長がOFMパスにおけるOFM位相の数に等しいバーストにおいて出力される。OFM出力シーケンス
は、内部ループがOFMの行および列インデックス(r,c)またはOFM深度インデックスdによって反復されるところに依存する。7×7 OFMを有する図4の例を続けると、図6Aは、OFMの行および列インデックス(r,c)によって反復される最左アキュムレータ222-0のOFM出力シーケンスを示す。対照的に、図6Bは、OFM深度インデックスdによって反復される最左アキュムレータ222-0のOFM出力シーケンスを示す。
【0059】
図4の例は、2つのOFM位相を含む5つのOFMパスと、3つのOFM位相を含む第6のOFMパスとを示しているが、本開示の実装形態はそのように限定されない。OFMパスは、OFM位相の任意のサイズのグループの任意の組合せを含むことができる。しかしながら、MACサイクルの利用は最大にされないことがある。一実装形態では、図4の例における13個のOFM位相は7つのOFMパス(p∈[0,6])にスプリットされ得、各OFMパスは2つのOFM位相を含む。2つのスレッドが、1つのMAC回路中でインターリーブされる。MACサイクルは、最初の6つのOFMパス(p∈[0,5])中に十分に利用されるが、使用率は最後のOFMパス(p=6)中に50%である。すなわち、2つのスレッドのうちの1つのみが最後のOFMパスにおいて使用される。別の実装形態では、13個のOFM位相は4つのOFMパス(p∈[0,3])にスプリットされ、各OFMパスは4つのOFM位相を含む。コントローラ108は、MACレートの1/4であるレートにおいて演算する。4つのスレッドが、1つのMAC回路中でインターリーブされる。MACサイクルは、最初の3つのOFMパス(p∈[0,2])中に十分に利用されるが、使用率は最後のOFMパス(p=3)中に25%である。すなわち、4つのスレッドのうちの1つのみが最後のOFMパスにおいて使用される。
【0060】
図7は、例示的な制御ギアボックス110のブロック図を示す。制御ギアボックス110は、コントローラ108とアレイ106とに結合された制御回路である。制御ギアボックス110は、アレイ106へのコントローラ108から受信された制御ワード720と、アレイ106のMAC回路のキャッシュに記憶されるカーネルについてのアドレス722とを提供する。制御ワード720および/またはカーネルアドレスがコントローラ108から出力されたときと、アレイ106のMAC回路が制御ワード720および/またはカーネルアドレス722のための準備ができているときとの間の潜在的不整合のために、少なくとも1つの実装形態は、コントローラ108とアレイ106との間のレート適応を実施するために制御ギアボックス110を含む。制御ギアボックス110は、コントローラ108の演算周波数を示す信号708と、MACレートを示す別の信号710と、制御ワード720および/またはカーネルアドレス722をアレイ106にいつ提供すべきかを指示するコントローラ108からの入力制御信号(たとえば、phase_update_vld702、phase_update_id704、phase_update_en706)とを受信する。
【0061】
再び図4の例を参照すると、コントローラ108の演算周波数はMACレートの1/2である。OFMパスが2つのOFM位相を含む場合、MAC回路は、2つのMACサイクルごとに、更新された制御ワード720のための準備ができている。OFMパスが3つのOFM位相を含む場合、MAC回路は、3つのMACサイクルごとに、更新された制御ワード720のための準備ができている。複数のスレッドがOFMパス中に各MAC回路中でインターリーブされ、スレッドが、MACレートにおいて特定の演算について連続的に処理されるので、特定の演算についての制御ワード(たとえば、書込み可能または読取り可能)は、複数のMACサイクルについて有効に保たれる(たとえば、複数の要素は、MACレートにおいて連続的に読み取られるかまたは書き込まれる)。
【0062】
開示される手法は、複数のMACサイクル(たとえば、2つまたは3つのMACサイクル)の演算期間を有するアトミック演算として制御ワード720をMAC回路に提供することを含む。たとえば、2つまたは3つのスレッドがMACレートにおいてMAC回路中でインターリーブされた場合、制御ワード720は、2つまたは3つのMACサイクルごとに更新される。しかしながら、コントローラ108がコントローラ108の演算周波数において制御ワード714を制御ギアボックス108に提供することは、MAC回路による必要に応じて、制御ギアボックス110が制御ワード720をアレイ106に提供するのに十分である。
【0063】
図7は、制御ギアボックス110の3ワイヤ制御インターフェースを示す。制御信号phase_update_vld702およびphase_update_en706はデジタル信号であり得る。制御信号phase_update_id704は、クロック信号710のクロックサイクルを識別する信号である。(以下でさらに説明される)図10図12のタイミング図に示されているように、クロック信号710の偶数クロックサイクルが、制御信号phase_update_id704において「a」で示され、奇数サイクルが「b」で示される。制御信号phase_update_id704は、MACサイクル710が偶数MACサイクルと奇数MACサイクルとを交互にするように、「a」と「b」とを交互にする。制御ワードに関する制御ギアボックス110の演算は、以下の擬似コードで説明され得る。
If(phase_update_vld=‘1’)および(phase_update_id=現在の位相)
If(phase_update_en=‘1’)
「control_out」を「control_in」で更新し、アトミック演算を開始する
Else
「control_out」をデフォルト値で強制する
End if
End if
【0064】
「デフォルト値」は、制御ギアボックス110に入力されない制御ギアボックスのデフォルトによる内部値を指す。擬似コードは、以下の図10図12に関連してさらに説明される。
【0065】
奇数個のスレッドがMACレートにおいてMAC回路中でインターリーブされた場合、制御ギアボックス110は、アトミック演算期間の後に、偶数MACサイクルまたは奇数MACサイクルのいずれか中で交互に制御ワード720を更新することができる。時々、制御ワード720は、偶数MACサイクル中で更新され(たとえば、phase_update_id704は「a」であり)、時々、制御ワード720は、奇数MACサイクル中で更新される(たとえば、phase_update_id704は「b」である)。偶数個のスレッドがインターリーブされた場合、制御ワード720は、連続的に、偶数MACサイクル中で更新される(たとえば、phase_update_id704は「a」にとどまる)か、または奇数MACサイクル中で更新される(たとえば、phase_update_id704は「b」にとどまる)。
【0066】
スレッドのインターリービングにより、MAC回路は、MACサイクルごとに異なるカーネルについてのアドレスのための準備ができている(たとえば、MACレートにおいて連続するアドレスから読み取られるかまたは連続するアドレスに書き込まれる)。しかしながら、コントローラ108は、コントローラ108の演算周波数において1つのカーネルについてのベースアドレスを出力する。MACサイクルごとにカーネルについてのアドレスをMAC回路に提供するために、制御ギアボックス110は、ベースアドレスがカーネルキャッシュ332の物理アドレスにどのようにマッピングされるかに応じて、コントローラ108から受信されたベースアドレスを固定値だけ増分または減分する。たとえば、ベースアドレスがブロックデータ転送の開始アドレスにマッピングされた場合、ベースアドレスは固定値だけ増分される。ベースアドレスがブロックデータ転送の終了アドレスにマッピングされた場合、ベースアドレスは固定値だけ減分される。カーネルのアドレスは、MAC回路のカーネルキャッシュ332中で記憶され、インターリーブされる。コントローラ108は、コントローラ108の演算周波数においてベースアドレスを生成する。
【0067】
図8は、MAC回路中のカーネルキャッシュの例示的なレイアウトを示す。カーネルの要素は、図3に示されているカーネルキャッシュ332など、MAC回路のキャッシュの隣接メモリスペース中で記憶され、インターリーブされる。図8は、図4の例のOFM深度インデックス(d=0、16)に対応するカーネルの要素の記憶のためのキャッシュレイアウトを示す。H[u,v,d,d]は、IFM深度インデックスdとOFM深度dとの交差部(d,d)における2次元(2D)カーネルの行インデックスuおよび列インデックスvにおけるカーネル要素を指す。たとえば、H(0,0,0,0)は、IFM深度インデックス0とOFM深度インデックス0との交差部におけるカーネルの行インデックス0および列インデックス0におけるカーネル要素を指す。第1のカーネルの第1の要素(H(0,0,0,0))がカーネルキャッシュアドレス0において記憶され、第2のカーネルの第1の要素(H(0,0,0,16))がカーネルキャッシュアドレス1において記憶され、第1のカーネルの第2の要素(H(0,1,0,0))がカーネルキャッシュアドレス2において記憶され、第2のカーネルの第2の要素(H(0,1,0,16))がカーネルキャッシュアドレス3において記憶される、などである。カーネルキャッシュアドレスは、図7中のアドレス722に対応する。OFM深度インデックスd=0、16に対応するOFM位相は、第1のOFMパスp=0中に各MAC回路中でインターリーブされる。2つの異なるカーネルが、2つの連続するMACサイクル中にそれぞれのMAC演算のために使用されるこれらの2つのOFM深度インデックス
および
に対応する。しかしながら、コントローラ108は、MACレートにおいてMAC回路についていくために、MACサイクルごとにカーネルのキャッシュアドレスを生成しない。そうではなく、コントローラ108は、コントローラ108の演算周波数(たとえば、MACレートの1/2)においてベースアドレスを生成する。制御ギアボックス110は、コントローラ108から受信されたベースアドレスに基づいてMACサイクルごとにカーネルの直接マッピングされたキャッシュアドレスを生成する。3つのOFM位相を含む最後のOFMパスp=5について、ベースアドレスは、3つのMACサイクルごとに更新される。しかしながら、コントローラ108の演算周波数は変化せず、コントローラ108は、依然として、MACレートの1/2において演算する。
【0068】
たとえば、図8に示されているように、制御ギアボックス110は、コントローラ108から第1のカーネルの第1の要素(H(0,0,0,0))についてのベースアドレス0を受信する。ベースアドレス0は、カーネルキャッシュアドレス0にマッピングする。コントローラ108からの第1のカーネルの第2の要素(H(0,1,0,0))についてのベースアドレス1を受信するより前に、制御ギアボックス110は、第2のカーネルの第1の要素(H(0,0,0,16))についてのカーネルキャッシュアドレス1を生成するために、ベースアドレス0を固定値だけ増分する。ここで、固定値は1である。次いで、制御ギアボックス110は、コントローラ108から、カーネルキャッシュアドレス2にマッピングする、第1のカーネルの第2の要素(H(0,1,0,0))についてのベースアドレス1を受信する。制御ギアボックス110は、コントローラ108から受信された各ベースアドレスについて増分を繰り返す。制御ギアボックス110は、コントローラ108の演算レートにおいてベースアドレスを受信するが、制御ギアボックス110は、MACレートにおいてカーネルキャッシュアドレスを出力する。制御ギアボックス110は、コントローラ108の演算周波数が増加せず、MACレートが減少しないように、1つまたは複数の他のカーネルの要素についてのアドレスを生成する。
【0069】
図8には示されていないが、制御ギアボックス110は、単一のベースアドレスから複数のカーネルの要素の複数のカーネルキャッシュアドレスを生成することができる。たとえば、最後のOFMパスp=5において、制御ギアボックス110は、コントローラ108から第1のカーネルの第1の要素(H(0,0,0,160))の第1のベースアドレスを受信する。第1のカーネルの第2の要素(H(0,1,0,160))の第2のベースアドレスを受信するより前に、制御ギアボックス110は、第2のカーネルの第1の要素(H(0,0,0,176))の第1のカーネルキャッシュアドレスを生成するために、第1のベースアドレスを固定値だけ増分する。また、第2のベースアドレスを受信するより前に、制御ギアボックス110は、第3のカーネルの第1の要素(H(0,0,0,192))の第2のカーネルキャッシュアドレスを生成するために、第1のカーネルキャッシュアドレスを固定値だけ増分する。カーネルキャッシュアドレスは、次のベースアドレスがコントローラ108から受信される前に、制御ギアボックス110によって生成されるが、次のベースアドレスは、制御ギアボックス110が前のベースアドレスから生成されたカーネルキャッシュアドレスを出力する前に、制御ギアボックス110によって受信され得る。
【0070】
図9は、例示的なデータギアボックス104のブロック図を示す。図1に示されているように、データギアボックス104は、コントローラ108とグローバルメモリ102とアレイ106とに結合された制御回路である。データギアボックス104は、グローバルメモリ102から受信されたデータ(たとえば、IFMデータ718)をアレイ106のMAC回路に提供する。IFMデータ712がグローバルメモリ102から出力されたときと、アレイ106のMAC回路がIFMデータ718のために準備ができているときとの間の潜在的不整合のために、少なくとも1つの実装形態は、コントローラ108とグローバルメモリ102とアレイ106との間のレート適応を実施するためにデータギアボックス104を含む。データギアボックス104は、コントローラ108および/またはグローバルメモリ102の演算周波数を示す信号708と、MACレートを示す信号710と、IFMデータ718をアレイ106にいつ提供すべきかを決定するためのコントローラ108からの入力制御信号(たとえば、phase_update_vld702、phase_update_id704、phase_update_en706)とを受信する。
【0071】
再び図4の例を参照すると、コントローラ108の演算周波数はMACレートの1/2である。OFMパスが2つのOFM位相を含む場合、MAC回路は、2つのMACサイクルごとに、更新されたIFMデータ718のための準備ができている。OFMパスが3つのOFM位相を含む場合、MAC回路は、3つのMACサイクルごとに、更新されたIFMデータ718のための準備ができている。複数のスレッドがOFMパス中に各MAC回路中でインターリーブされ、スレッドは、MACレートにおいて特定の演算について連続的に処理されるので、特定のMAC演算についてのIFMデータ718は、複数のMACサイクルについて有効に保たれる。
【0072】
開示される手法は、複数のMACサイクル(たとえば、2つまたは3つのMACサイクル)の演算期間を有するアトミック演算としてIFMデータ718をMAC回路に提供することを含む。たとえば、2つまたは3つのスレッドがMACレートにおいてMAC回路中でインターリーブされたとき、IFMデータ718は、2つまたは3つのMACサイクルごとに更新される。しかしながら、グローバルメモリ102がコントローラ108の演算周波数においてIFMデータ712をデータギアボックス104に提供することは、MAC回路による必要に応じて、データギアボックス104がIFMデータ718をアレイ106に提供するのに十分である。
【0073】
図9は、データギアボックス104の3ワイヤ制御インターフェースを示す。制御信号phase_update_vld702およびphase_update_en706はデジタル信号であり得る。制御信号phase_update_id704は、クロック信号710のクロックサイクルを識別する信号である。(以下でさらに説明される)図10図12のタイミング図に示されているように、クロック信号710の偶数クロックサイクルが、制御信号phase_update_id704において「a」で示され、奇数サイクルが「b」で示される。制御信号phase_update_id704は、MACサイクル710が偶数MACサイクルと奇数MACサイクルとを交互にするように、「a」と「b」とを交互にする。データギアボックス104の演算は、以下の擬似コードで説明され得る。
If(phase_update_vld=‘1’)および(phase_update_id=現在の位相)
If(phase_update_en=‘1’)
「data_out」を「data_in」で更新し、アトミック演算を開始する
Else
「data_out」をデフォルト値で強制する
End if
End if
【0074】
「デフォルト値」は、データギアボックス104に入力されないデフォルトによる内部値を指す。擬似コードは、以下の図10図12に関連してさらに説明される。
【0075】
奇数個のスレッドがMACレートにおいてMAC回路中でインターリーブされた場合、データギアボックス104は、アトミック演算期間の後に、偶数MACサイクルまたは奇数MACサイクルのいずれか中で交互にIFMデータ718を更新することができる。時々、IFMデータ718は、偶数MACサイクル中で更新され(たとえば、phase_update_id704は「a」であり)、時々、IFMデータ718は、奇数MACサイクル中で更新される(たとえば、phase_update_id704は「b」である)。偶数個のスレッドがインターリーブされた場合、IFMデータ718は、連続的に、偶数MACサイクル中で更新される(たとえば、phase_update_id704は「a」にとどまる)か、または奇数MACサイクル中で更新される(たとえば、phase_update_id704は「b」にとどまる)。
【0076】
図10は、OFMパスが2つのOFM位相を含む、図1の回路装置の例示的なタイミング図を示す。コントローラ108の演算周波数708は、MACレート710の1/2である。IFMデータ712は、グローバルメモリ102から読み取られ、演算周波数708においてデータギアボックス104に入力される。制御ワード714は、コントローラ108によって出力され、演算周波数708において制御ギアボックス110に入力される。
【0077】
制御ギアボックス110とデータギアボックス104とについての上記の擬似コードに従って、制御信号phase_update_vld702およびphase_update_en706がハイであるとき、IFMデータ718および制御ワード720は、MACサイクル710に関連する識別子phase_id716が制御信号phase_update_id704と整合する場合、それぞれ、データギアボックス104および制御ギアボックス110から出力される。図10では、制御信号phase_update_vld702およびphase_update_en706がハイ(たとえば、論理「1」)であり、制御信号phase_update_id704は、「a」(たとえば、偶数MACサイクル)を連続的に指示する。したがって、IFMデータ718および制御ワード720は、「a」に関連するMACサイクル710中に、それぞれ、データギアボックス104および制御ギアボックス110から出力される。
【0078】
図10中のOFMパスが2つのOFM位相を含むので、2つのカーネルについてのアドレス722は各OFMパスのために必要とされる。カーネルアドレスA0はカーネルキャッシュアドレス(たとえば、図8に示されているカーネルキャッシュアドレス0)であり、そのカーネルキャッシュアドレスは、コントローラ108によって生成されたベースアドレス(たとえば、ベースアドレス0)と同じであり得る。カーネルアドレスA1は、制御ギアボックス110によって、カーネルアドレスA0に対応するベースアドレスから生成されたカーネルキャッシュアドレスである。
【0079】
カーネルアドレスA0は、第1のOFMパスの第1のOFM深度インデックスについての第1のカーネルのものであり、カーネルアドレスA1は、第1のOFMパスの第2のOFM深度インデックスについての第2のカーネルのものであり、それらは、第1のOFMパス中にIFMデータAに対して実施されるMAC演算のために使用される。カーネルアドレスB0は、第2のOFMパスの第1のOFM深度インデックスについての第3のカーネルのものであり、カーネルアドレスB1は、第2のOFMパスの第2のOFM深度インデックスについてのカーネルのものであり、それらは、第2のOFMパス中にIFMデータBに対するMAC演算のために使用される。
【0080】
図11は、OFMパスが3つのOFM位相を含む、図1の回路装置の例示的なタイミング図を示す。制御ギアボックス110とデータギアボックス104とについての上記の擬似コードに従って、制御信号phase_update_vld702およびphase_update_en706がハイである場合、IFMデータ718および制御ワード720は、MACサイクル710に関連する識別子phase_id716が制御信号phase_update_id704と整合する場合、それぞれ、データギアボックス104および制御ギアボックス110から出力される。
【0081】
図11において、制御信号phase_update_vld702およびphase_update_en706は、初めはハイ(たとえば、論理「1」)である。制御信号phase_update_id704は、初めは「a」(たとえば、偶数MACサイクル)を指示し、次いで「b」(たとえば、奇数MACサイクル)を指示し、次いで、do not careである。OFMパスが3つのOFM位相を含むので、コントローラ108は、IFMデータ712が、コントローラ108の2つの連続する演算サイクル708中にグローバルメモリ102から読み取られることを引き起こし、次いで、1つのサイクルの間、保持する。制御信号phase_update_id704が初めは「a」を指示するので、IFMデータAおよび制御ワードAは、「a」に関連するMACサイクル710中に、それぞれ、データギアボックス104および制御ギアボックス110から出力される。図10とは対照的に、制御信号phase_update_id704が次いで「b」を指示するので、IFMデータBおよび制御ワードBは、「b」に関連するMACサイクル710中に、それぞれ、データギアボックス104および制御ギアボックス110から出力される。その結果、IFMデータAおよび制御ワードAは、IFMデータBと制御ワードBとを出力することが、MACサイクル710の識別子が「b」になるまで遅延させられるので、図10に示されているように、2つのクロックサイクルの代わりに3つのMACサイクル710の間有効のままである。IFMデータCおよび制御ワードCは、「a」に関連するMACサイクル710中に出力され、IFMデータDおよび制御ワードDは、「b」に関連するMAC710中に出力される。
【0082】
図11中のOFMパスが3つのOFM位相を含むので、3つのカーネルについてのアドレスは各OFMパスのために必要とされる。カーネルアドレスA0はカーネルキャッシュアドレス(たとえば、図8に示されているカーネルキャッシュアドレス0)であり、そのカーネルキャッシュアドレスは、コントローラ108によって生成されたベースアドレス(たとえば、ベースアドレス0)と同じであり得る。カーネルアドレスA1およびA2は、制御ギアボックス110によって、カーネルアドレスA0に対応するベースアドレスから生成されたカーネルキャッシュアドレスである。
【0083】
カーネルアドレスA0は、第1のOFMパスの第1のOFM深度インデックスについての第1のカーネルのものであり、カーネルアドレスA1は、第1のOFMパスの第2のOFM深度インデックスについての第2のカーネルのものであり、カーネルアドレスA2は、第1のOFMパスの第3のOFM深度インデックスについての第3のカーネルのものであり、それらは、第1のOFMパス中にIFMデータAに対して実施されるMAC演算のために使用される。カーネルアドレスB0は、第2のOFMパスの第1のOFM深度インデックスについての第1のカーネルのものであり、カーネルアドレスB1は、第2のOFMパスの第2のOFM深度インデックスについての第2のカーネルのものであり、カーネルアドレスB2は、第2のOFMパスの第3のOFM深度インデックスについての第3のカーネルのものであり、それらは、第2のOFMパス中にIFMデータBに対するMAC演算のために使用される。
【0084】
制御信号phase_update_vld702およびphase_update_en706がロー(たとえば、論理「0」)であるとき、デフォルトデータは、データギアボックス104と制御ギアボックス110とによって出力される。
【0085】
図12は、OFMパスが3つのOFM位相を含むことから2つのOFM位相を含むことに切り替わる、図1の回路装置の例示的なタイミング図を示す。最初の3つのOFMパスは3つのOFM位相を含む。IFMデータAおよび制御ワードAは、「a」に関連するMACサイクル710中に、それぞれ、データギアボックス104および制御ギアボックス110から出力される。IFMデータBおよび制御ワードBは、「b」に関連するMACサイクル710中に、それぞれ、データギアボックス104および制御ギアボックス110から出力される。IFMデータCおよび制御ワードCは、「a」に関連するMAC710中に出力される。
【0086】
最後の4つのOFMパスは、2つのOFM位相を含む。したがって、IFMデータDおよび制御ワードDが、それぞれ、データギアボックス104および制御ギアボックス110に入力されたとき、それぞれ、データギアボックス104および制御ギアボックス110に入力されたIFMデータ712および制御ワード714のパターンは、コントローラ108の2つの演算サイクル708の間読み取られ/生成され、次いで、1つのサイクルの間保持することから、コントローラ108の演算サイクル708ごとに読み取られ/生成されることに変化する。同様に、制御信号phase_update_id704のパターンは、3つのOFM位相を含むOFMパスに関連する「a、b、do not care」パターンから、2つのOFM位相を含むOFMパスに関連する一定の「b」パターンに変化する。制御信号phase_update_id704は、IFMデータDおよび制御ワードDが、それぞれ、データギアボックス104および制御ギアボックス110に入力されたとき、制御信号phase_update_id704が「b」を指示したので、常に「b」を指示する。
【0087】
図13は、例示的な入力活性化関数ユニット(IAFU)を示す。IAFUからの出力がアレイ106のMAC回路に直接入力される場合、活性化入力(
)が2つまたは3つのMACサイクルごとに更新されるので、アレイの各行のIAFU内に1つのスレッドのみがある。IAFUからの出力がグローバルメモリ102にループバックされた場合、スレッドは、アレイのMAC回路と同様のインターリービング方式に従ってインターリーブされ得る。図13は、図4の例におけるパラメータに基づくIAFUについての深度スプリッティング例を示す。4つのIFM位相n∈[0,3]があり、4つのIFM位相は2つのIFMパスp∈[0,1]にスプリットされる。各IFMパスp∈[0,1]は、2つのIFM位相を含み、したがって、2つのIFM位相が1つのIAFU中でインターリーブされる。各IAFUは、ある時間における1つのIFMパス(p)における異なるIFM深度インデックス(d)ついて出力される活性化関数を生成する。活性化関数が適用された後に活性化深度が変更されないので、IFM入力深度シーケンスは、OFM出力深度シーケンスと同じである。
【0088】
図14は、開示される回路およびプロセスが実装され得る、プログラマブル集積回路(IC)800を示す。プログラマブルICは、他のプログラマブルリソースとともに、フィールドプログラマブルゲートアレイ論理(FPGA)を含むシステムオンチップ(SOC)とも呼ばれることがある。FPGA論理は、アレイ中のいくつかの異なるタイプのプログラマブル論理ブロックを含み得る。たとえば、図14は、マルチギガビットトランシーバ(MGT:multi-gigabit transceiver)801、構成可能論理ブロック(CLB)802、ランダムアクセスメモリブロック(BRAM)803、入出力ブロック(IOB)804、構成およびクロッキング論理(CONFIG/CLOCKS)805、デジタル信号処理ブロック(DSP)806、特殊な入出力ブロック(I/O)807、たとえば、クロックポート、ならびにデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理などの他のプログラマブル論理808を含む、多数の異なるプログラマブルタイルを含むプログラマブルIC800を示す。また、FPGA論理を有する何らかのプログラマブルICは、専用プロセッサブロック(PROC)810と内部および外部再構成ポート(図示せず)とを含む。
【0089】
何らかのFPGA論理では、各プログラマブルタイルは、プログラマブル相互接続要素(INT)811を含み、INT811は、各隣接するタイル中の対応する相互接続要素との間の規格化された接続を有する。したがって、プログラマブル相互接続要素は、まとめると、示されているFPGA論理のためのプログラマブル相互接続構造を実装する。プログラマブル相互接続要素INT811は、図14の上部に含まれる例によって示されているように、同じタイル内のプログラマブル論理要素との間の接続をも含む。
【0090】
たとえば、CLB802は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素CLE812と、単一のプログラマブル相互接続要素INT811とを含むことができる。BRAM803は、1つまたは複数のプログラマブル相互接続要素に加えてBRAM論理要素(BRL)813を含むことができる。典型的には、タイル中に含まれる相互接続要素の数は、タイルの高さに依存する。示されているBRAMタイルは、5つのCLBと同じ高さを有するが、他の数(たとえば、4つ)も使用され得る。DSPタイル806は、適切な数のプログラマブル相互接続要素に加えてDSP論理要素(DSPL)814を含むことができる。IOB804は、たとえば、プログラマブル相互接続要素INT811の1つのインスタンスに加えて入出力論理要素(IOL)815の2つのインスタンスを含むことができる。当業者に明らかになるように、たとえばI/O論理要素815に接続される実際のI/Oボンドパッドは、様々な示されている論理ブロックの上に階層化された金属を使用して製造され、典型的に、入出力論理要素815のエリアに制限されない。
【0091】
図14で陰影を付けられて示されている)ダイの中心の近くの列状エリアが、構成、クロック、および他の制御論理のために使用される。この列から延びる水平エリア809が、プログラマブルICの幅にわたってクロックおよび構成信号を分散させるために使用される。「列状」および「水平」エリアへの言及が、縦方向配向において図面を閲覧することに関係することに留意されたい。
【0092】
図14に示されているアーキテクチャを利用するいくつかのプログラマブルICは、プログラマブルICの大部分を作り上げる規則的な列状構造を損なう追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用の論理であり得る。たとえば、図14に示されているプロセッサブロックPROC810は、CLBおよびBRAMのいくつかの列にまたがる。
【0093】
図14は、例示的なプログラマブルICアーキテクチャを示すことを意図されているにすぎないことに留意されたい。1つの列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および図14の上部に含まれる相互接続/論理実装形態は、例にすぎない。たとえば、実際のプログラマブルICでは、たとえば、CLBの2つ以上の隣接する列は、一般的に、ユーザ論理の効率的な実装を容易にするために、CLBが現れるところならどこでも含まれる。
【0094】
態様および特徴はいくつかの場合には個々の図で説明され得るが、組合せが明示的に示されないか、または組合せとして明示的に説明されなくても、ある図からの特徴は別の図の特徴と組み合わせられ得ることが諒解されよう。
【0095】
回路および方法は、畳み込み演算を実施するためのデータをフォーマットするための様々なシステムに適用可能であると考えられる。他の態様および特徴は、本明細書の考慮から当業者に明らかになろう。回路および方法は、ソフトウェアを実行するように構成された1つまたは複数のプロセッサとして、特定用途向け集積回路(ASIC)として、またはプログラマブル論理デバイス上の論理として実装され得る。明細書および図面は例としてのみ考慮されることが意図されており、本発明の真の範囲は以下の特許請求の範囲によって示される。
図1
図2
図3
図4
図5A
図5B
図5C
図5D
図6A
図6B
図7
図8
図9
図10
図11
図12
図13
図14