(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-07
(45)【発行日】2022-11-15
(54)【発明の名称】効率的な畳み込みエンジン
(51)【国際特許分類】
G06F 17/10 20060101AFI20221108BHJP
G06N 3/063 20060101ALI20221108BHJP
【FI】
G06F17/10 A
G06N3/063
(21)【出願番号】P 2021500007
(86)(22)【出願日】2019-02-13
(86)【国際出願番号】 US2019017787
(87)【国際公開番号】W WO2019177735
(87)【国際公開日】2019-09-19
【審査請求日】2022-02-10
(32)【優先日】2018-07-05
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-03-13
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】520352779
【氏名又は名称】レコグニ インコーポレイテッド
(74)【代理人】
【識別番号】100094569
【氏名又は名称】田中 伸一郎
(74)【代理人】
【識別番号】100103610
【氏名又は名称】▲吉▼田 和彦
(74)【代理人】
【識別番号】100109070
【氏名又は名称】須田 洋之
(74)【代理人】
【識別番号】100067013
【氏名又は名称】大塚 文昭
(74)【代理人】
【識別番号】100086771
【氏名又は名称】西島 孝喜
(74)【代理人】
【識別番号】100109335
【氏名又は名称】上杉 浩
(74)【代理人】
【識別番号】100120525
【氏名又は名称】近藤 直樹
(74)【代理人】
【識別番号】100139712
【氏名又は名称】那須 威夫
(74)【代理人】
【識別番号】100151987
【氏名又は名称】谷口 信行
(72)【発明者】
【氏名】フェインベルク ユージーン エム
【審査官】漆原 孝治
(56)【参考文献】
【文献】特開2018-67154(JP,A)
【文献】特開平10-91780(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
装置であって、
次式の3×4データ記憶要素アレイを含む2次元同期シフトレジスタであって、
【数1】
前記データ記憶要素d
1,1は、前記データ記憶要素d
2,1に電気的に結合され、
前記データ記憶要素d
2,1は、前記データ記憶要素d
3,1に電気的に結合され、
前記データ記憶要素d
1,2は、前記データ記憶要素d
2,2に電気的に結合され、
前記データ記憶要素d
2,2は、前記データ記憶要素d
3,2に電気的に結合され、
前記データ記憶要素d
1,3は、前記データ記憶要素d
2,3に電気的に結合され、
前記データ記憶要素d
2,3は、前記データ記憶要素d
3,3に電気的に結合され、
前記データ記憶要素d
1,4は、前記データ記憶要素d
2,4に電気的に結合され、
前記データ記憶要素d
2,4は、前記データ記憶要素d
3,4に電気的に結合される、
2次元同期シフトレジスタと、
第1の複数の乗算器m
1
1,1、m
1
1,2、m
1
1,3、m
1
2,1、m
1
2,2、m
1
2,3、m
1
3,1、m
1
3,2、m
1
3,3を含む第1の畳み込み器ユニットであって、
前記乗算器m
1
1,1が前記データ記憶要素d
1,1に恒久的に電気的に結合され、
前記乗算器m
1
1,2が前記データ記憶要素d
1,2に恒久的に電気的に結合され、
前記乗算器m
1
1,3が前記データ記憶要素d
1,3に恒久的に電気的に結合され、
前記乗算器m
1
2,1が前記データ記憶要素d
2,1に恒久的に電気的に結合され、
前記乗算器m
1
2,2が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
1
2,3が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
1
3,1が前記データ記憶要素d
3,1に恒久的に電気的に結合され、
前記乗算器m
1
3,2が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
1
3,3が前記データ記憶要素d
3,3に恒久的に電気的に結合された、
第1の畳み込み器ユニットと、
第2の複数の乗算器m
2
1,1、m
2
1,2、m
2
1,3、m
2
2,1、m
2
2,2、m
2
2,3、m
2
3,1、m
2
3,2、m
2
3,3を含む第2の畳み込み器ユニットであって、
前記乗算器m
2
1,1が前記データ記憶要素d
1,2に恒久的に電気的に結合され、
前記乗算器m
2
1,2が前記データ記憶要素d
1,3に恒久的に電気的に結合され、
前記乗算器m
2
1,3が前記データ記憶要素d
1,4に恒久的に電気的に結合され、
前記乗算器m
2
2,1が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
2
2,2が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
2
2,3が前記データ記憶要素d
2,4に恒久的に電気的に結合され、
前記乗算器m
2
3,1が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
2
3,2が前記データ記憶要素d
3,3に恒久的に電気的に結合され、
前記乗算器m
2
3,3が前記データ記憶要素d
3,4に恒久的に電気的に結合された、
第2の畳み込み器ユニットと、
を備え、
第1のクロックサイクルの開始時に、
前記データ記憶要素d
1,1がデータ値x
1,1を記憶するよう構成され、
前記データ記憶要素d
1,2がデータ値x
1,2を記憶するよう構成され、
前記データ記憶要素d
1,3がデータ値x
1,3を記憶するよう構成され、
前記データ記憶要素d
1,4がデータ値x
1,4を記憶するよう構成され、
前記データ記憶要素d
2,1がデータ値x
2,1を記憶するよう構成され、
前記データ記憶要素d
2,2がデータ値x
2,2を記憶するよう構成され、
前記データ記憶要素d
2,3がデータ値x
2,3を記憶するよう構成され、
前記データ記憶要素d
2,4がデータ値x
2,4を記憶するよう構成され、
前記データ記憶要素d
3,1がデータ値x
3,1を記憶するよう構成され、
前記データ記憶要素d
3,2がデータ値x
3,2を記憶するよう構成され、
前記データ記憶要素d
3,3がデータ値x
3,3を記憶するよう構成され、
前記データ記憶要素d
3,4がデータ値x
3,4を記憶するよう構成され、
前記第1のクロックサイクルの間に、
前記乗算器m
1
1,1が、前記データ値x
1,1に重みw
1を乗算して積w
1x
1,1を生成するように構成され、
前記乗算器m
1
1,2が、前記データ値x
1,2に重みw
2を乗算して積w
2x
1,2を生成するように構成され、
前記乗算器m
1
1,3が、前記データ値x
1,3に重みw
3を乗算して積w
3x
1,3を生成するように構成され、
前記乗算器m
1
2,1が、前記データ値x
2,1に重みw
4を乗算して積w
4x
2,1を生成するように構成され、
前記乗算器m
1
2,2が、前記データ値x
2,2に重みw
5を乗算して積w
5x
2,2を生成するように構成され、
前記乗算器m
1
2,3が、前記データ値x
2,3に重みw
6を乗算して積w
6x
2,3を生成するように構成され、
前記乗算器m
1
3,1が、前記データ値x
3,1に重みw
7を乗算して積w
7x
3,1を生成するように構成され、
前記乗算器m
1
3,2が、前記データ値x
3,2に重みw
8を乗算して積w
8x
3,2を生成するように構成され、
前記乗算器m
1
3,3が、前記データ値x
3,3に重みw
9を乗算して積w
9x
3,3を生成するように構成され、
前記乗算器m
2
1,1が、前記データ値x
1,2に重みw
1を乗算して積w
1x
1,2を生成するように構成され、
前記乗算器m
2
1,2が、前記データ値x
1,3に重みw
2を乗算して積w
2x
1,3を生成するように構成され、
前記乗算器m
2
1,3が、前記データ値x
1,4に重みw
3を乗算して積w
3x
1,4を生成するように構成され、
前記乗算器m
2
2,1が、前記データ値x
2,2に重みw
4を乗算して積w
4x
2,2を生成するように構成され、
前記乗算器m
2
2,2が、前記データ値x
2,3に重みw
5を乗算して積w
5x
2,3を生成するように構成され、
前記乗算器m
2
2,3が、前記データ値x
2,4に重みw
6を乗算して積w
6x
2,4を生成するように構成され、
前記乗算器m
2
3,1が、前記データ値x
3,2に重みw
7を乗算して積w
7x
3,2を生成するように構成され、
前記乗算器m
2
3,2が、前記データ値x
3,3に重みw
8を乗算して積w
8x
3,3を生成するように構成され、
前記乗算器m
2
3,3が、前記データ値x
3,4に重みw
9を乗算して積w
9x
3,4を生成するように構成され、
前記第1のクロックに続く第2のクロックの前に、
前記第1の畳み込み器ユニットは、少なくとも、前記積w
1x
1,1、前記積w
2x
1,2、前記積w
3x
1,3、前記積w
4x
2,1、前記積w
5x
2,2、前記積w
6x
2,3、前記積w
7x
3,1、前記積w
8x
3,2、及び前記積w
9x
3,3を含む項の第1の和を生成するように構成され、
前記第2の畳み込み器ユニットは、少なくとも、前記積w
1x
1,2、前記積w
2x
1,3、前記積w
3x
1,4、前記積w
4x
2,2、前記積w
5x
2,3、前記積w
6x
2,4、前記積w
7x
3,2、前記積w
8x
3,3、及び前記積w
9x
3,4を含む項の第2の和を生成するように構成され、
前記第1のクロックに続く前記第2のクロックの開始時に、
第1のアキュムレータが、前記項の第1の和を記憶するように構成され、
第2のアキュムレータが、前記項の第2の和を記憶するように構成されている、
装置。
【請求項2】
前記項の第1の和が更に、バイアス値であるb
1を含む、請求項1に記載の装置。
【請求項3】
前記項の第2の和が更に、バイアス値であるb
1を含む、請求項1に記載の装置。
【請求項4】
装置であって、
次式の4×4データ記憶要素アレイを含む2次元同期シフトレジスタであって、
【数2】
前記データ記憶要素d
1,1は、前記データ記憶要素d
2,1に電気的に結合され、
前記データ記憶要素d
2,1は、前記データ記憶要素d
3,1に電気的に結合され、
前記データ記憶要素d
3,1は、前記データ記憶要素d
4,1に電気的に結合され、
前記データ記憶要素d
1,2は、前記データ記憶要素d
2,2に電気的に結合され、
前記データ記憶要素d
2,2は、前記データ記憶要素d
3,2に電気的に結合され、
前記データ記憶要素d
3,2は、前記データ記憶要素d
4,2に電気的に結合され、
前記データ記憶要素d
1,3は、前記データ記憶要素d
2,3に電気的に結合され、
前記データ記憶要素d
2,3は、前記データ記憶要素d
3,3に電気的に結合され、
前記データ記憶要素d
3,3は、前記データ記憶要素d
4,3に電気的に結合され、
前記データ記憶要素d
1,4は、前記データ記憶要素d
2,4に電気的に結合され、
前記データ記憶要素d
2,4は、前記データ記憶要素d
3,4に電気的に結合される、
前記データ記憶要素d
3,4は、前記データ記憶要素d
4,4に電気的に結合される、
2次元同期シフトレジスタと、
第1の複数の乗算器m
1
1,1、m
1
1,2、m
1
1,3、m
1
2,1、m
1
2,2、m
1
2,3、m
1
3,1、m
1
3,2、m
1
3,3を含む第1の畳み込み器ユニットであって、
前記乗算器m
1
1,1が前記データ記憶要素d
1,1に恒久的に電気的に結合され、
前記乗算器m
1
1,2が前記データ記憶要素d
1,2に恒久的に電気的に結合され、
前記乗算器m
1
1,3が前記データ記憶要素d
1,3に恒久的に電気的に結合され、
前記乗算器m
1
2,1が前記データ記憶要素d
2,1に恒久的に電気的に結合され、
前記乗算器m
1
2,2が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
1
2,3が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
1
3,1が前記データ記憶要素d
3,1に恒久的に電気的に結合され、
前記乗算器m
1
3,2が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
1
3,3が前記データ記憶要素d
3,3に恒久的に電気的に結合された、
第1の畳み込み器ユニットと、
第2の複数の乗算器m
2
1,1、m
2
1,2、m
2
1,3、m
2
2,1、m
2
2,2、m
2
2,3、m
2
3,1、m
2
3,2、m
2
3,3を含む第2の畳み込み器ユニットであって、
前記乗算器m
2
1,1が前記データ記憶要素d
1,2に恒久的に電気的に結合され、
前記乗算器m
2
1,2が前記データ記憶要素d
1,3に恒久的に電気的に結合され、
前記乗算器m
2
1,3が前記データ記憶要素d
1,4に恒久的に電気的に結合され、
前記乗算器m
2
2,1が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
2
2,2が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
2
2,3が前記データ記憶要素d
2,4に恒久的に電気的に結合され、
前記乗算器m
2
3,1が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
2
3,2が前記データ記憶要素d
3,3に恒久的に電気的に結合され、
前記乗算器m
2
3,3が前記データ記憶要素d
3,4に恒久的に電気的に結合された、
第2の畳み込み器ユニットと、
第3の複数の乗算器m
3
1,1、m
3
1,2、m
3
1,3、m
3
2,1、m
3
2,2、m
3
2,3、m
3
3,1、m
3
3,2、及びm
3
3,3を含む第3の畳み込み器ユニットであって、
前記乗算器m
3
1,1が前記データ記憶要素d
2,1に恒久的に電気的に結合され、
前記乗算器m
3
1,2が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
3
1,3が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
3
2,1が前記データ記憶要素d
3,1に恒久的に電気的に結合され、
前記乗算器m
3
2,2が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
3
2,3が前記データ記憶要素d
3,3に恒久的に電気的に結合され、
前記乗算器m
3
3,1が前記データ記憶要素d
4,1に恒久的に電気的に結合され、
前記乗算器m
3
3,2が前記データ記憶要素d
4,2に恒久的に電気的に結合され、
前記乗算器m
3
3,3が前記データ記憶要素d
4,3に恒久的に電気的に結合された、
第3の畳み込み器ユニットと、
第4の複数の乗算器m
4
1,1、m
4
1,2、m
4
1,3、m
4
2,1、m
4
2,2、m
4
2,3、m
4
3,1、m
4
3,2、及びm
4
3,3を含む第4の畳み込み器ユニットであって、
前記乗算器m
4
1,1が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
4
1,2が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
4
1,3が前記データ記憶要素d
2,4に恒久的に電気的に結合され、
前記乗算器m
4
2,1が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
4
2,2が前記データ記憶要素d
3,3に恒久的に電気的に結合され、
前記乗算器m
4
2,3が前記データ記憶要素d
3,4に恒久的に電気的に結合され、
前記乗算器m
4
3,1が前記データ記憶要素d
4,2に恒久的に電気的に結合され、
前記乗算器m
4
3,2が前記データ記憶要素d
4,3に恒久的に電気的に結合され、
前記乗算器m
4
3,3が前記データ記憶要素d
4,4に恒久的に電気的に結合された、
第4の畳み込み器ユニットと、
を備え、
第1のクロックサイクルの開始時に、
前記データ記憶要素d
1,1がデータ値x
1,1を記憶するよう構成され、
前記データ記憶要素d
1,2がデータ値x
1,2を記憶するよう構成され、
前記データ記憶要素d
1,3がデータ値x
1,3を記憶するよう構成され、
前記データ記憶要素d
1,4がデータ値x
1,4を記憶するよう構成され、
前記データ記憶要素d
2,1がデータ値x
2,1を記憶するよう構成され、
前記データ記憶要素d
2,2がデータ値x
2,2を記憶するよう構成され、
前記データ記憶要素d
2,3がデータ値x
2,3を記憶するよう構成され、
前記データ記憶要素d
2,4がデータ値x
2,4を記憶するよう構成され、
前記データ記憶要素d
3,1がデータ値x
3,1を記憶するよう構成され、
前記データ記憶要素d
3,2がデータ値x
3,2を記憶するよう構成され、
前記データ記憶要素d
3,3がデータ値x
3,3を記憶するよう構成され、
前記データ記憶要素d
3,4がデータ値x
3,4を記憶するよう構成され、
前記データ記憶要素d
4,1がデータ値x
4,1を記憶するよう構成され、
前記データ記憶要素d
4,2がデータ値x
4,2を記憶するよう構成され、
前記データ記憶要素d
4,3がデータ値x
4,3を記憶するよう構成され、
前記データ記憶要素d
4,4がデータ値x
4,4を記憶するよう構成され、
前記第1のクロックサイクルの間に、
前記乗算器m
1
1,1が、前記データ値x
1,1に重みw
1を乗算して積w
1x
1,1を生成するように構成され、
前記乗算器m
1
1,2が、前記データ値x
1,2に重みw
2を乗算して積w
2x
1,2を生成するように構成され、
前記乗算器m
1
1,3が、前記データ値x
1,3に重みw
3を乗算して積w
3x
1,3を生成するように構成され、
前記乗算器m
1
2,1が、前記データ値x
2,1に重みw
4を乗算して積w
4x
2,1を生成するように構成され、
前記乗算器m
1
2,2が、前記データ値x
2,2に重みw
5を乗算して積w
5x
2,2を生成するように構成され、
前記乗算器m
1
2,3が、前記データ値x
2,3に重みw
6を乗算して積w
6x
2,3を生成するように構成され、
前記乗算器m
1
3,1が、前記データ値x
3,1に重みw
7を乗算して積w
7x
3,1を生成するように構成され、
前記乗算器m
1
3,2が、前記データ値x
3,2に重みw
8を乗算して積w
8x
3,2を生成するように構成され、
前記乗算器m
1
3,3が、前記データ値x
3,3に重みw
9を乗算して積w
9x
3,3を生成するように構成され、
前記乗算器m
2
1,1が、前記データ値x
1,2に重みw
1を乗算して積w
1x
1,2を生成するように構成され、
前記乗算器m
2
1,2が、前記データ値x
1,3に重みw
2を乗算して積w
2x
1,3を生成するように構成され、
前記乗算器m
2
1,3が、前記データ値x
1,4に重みw
3を乗算して積w
3x
1,4を生成するように構成され、
前記乗算器m
2
2,1が、前記データ値x
2,2に重みw
4を乗算して積w
4x
2,2を生成するように構成され、
前記乗算器m
2
2,2が、前記データ値x
2,3に重みw
5を乗算して積w
5x
2,3を生成するように構成され、
前記乗算器m
2
2,3が、前記データ値x
2,4に重みw
6を乗算して積w
6x
2,4を生成するように構成され、
前記乗算器m
2
3,1が、前記データ値x
3,2に重みw
7を乗算して積w
7x
3,2を生成するように構成され、
前記乗算器m
2
3,2が、前記データ値x
3,3に重みw
8を乗算して積w
8x
3,3を生成するように構成され、
前記乗算器m
2
3,3が、前記データ値x
3,4に重みw
9を乗算して積w
9x
3,4を生成するように構成され、
前記乗算器m
3
1,1が、前記データ値x
2,1に重みw
10を乗算して積w
10x
2,1を生成するように構成され、
前記乗算器m
3
1,2が、前記データ値x
2,2に重みw
11を乗算して積w
11x
2,2を生成するように構成され、
前記乗算器m
3
1,3が、前記データ値x
2,3に重みw
12を乗算して積w
12x
2,3を生成するように構成され、
前記乗算器m
3
2,1が、前記データ値x
3,1に重みw
13を乗算して積w
13x
3,1を生成するように構成され、
前記乗算器m
3
2,2が、前記データ値x
3,2に重みw
14を乗算して積w
14x
3,2を生成するように構成され、
前記乗算器m
3
2,3が、前記データ値x
3,3に重みw
15を乗算して積w
15x
3,3を生成するように構成され、
前記乗算器m
3
3,1が、前記データ値x
4,1に重みw
16を乗算して積w
16x
4,1を生成するように構成され、
前記乗算器m
3
3,2が、前記データ値x
4,2に重みw
17を乗算して積w
17x
4,2を生成するように構成され、
前記乗算器m
3
3,3が、前記データ値x
4,3に重みw
18を乗算して積w
18x
4,3を生成するように構成され、
前記乗算器m
4
1,1が、前記データ値x
2,2に重みw
10を乗算して積w
10x
2,2を生成するように構成され、
前記乗算器m
4
1,2が、前記データ値x
2,3に重みw
11を乗算して積w
11x
2,3を生成するように構成され、
前記乗算器m
4
1,3が、前記データ値x
2,4に重みw
12を乗算して積w
12x
2,4を生成するように構成され、
前記乗算器m
4
2,1が、前記データ値x
3,2に重みw
13を乗算して積w
13x
3,2を生成するように構成され、
前記乗算器m
4
2,2が、前記データ値x
3,3に重みw
14を乗算して積w
14x
3,3を生成するように構成され、
前記乗算器m
4
2,3が、前記データ値x
3,4に重みw
15を乗算して積w
15x
3,4を生成するように構成され、
前記乗算器m
4
3,1が、前記データ値x
4,2に重みw
16を乗算して積w
16x
4,2を生成するように構成され、
前記乗算器m
4
3,2が、前記データ値x
4,3に重みw
17を乗算して積w
17x
4,3を生成するように構成され、
前記乗算器m
4
3,3が、前記データ値x
4,4に重みw
18を乗算して積w
18x
4,4を生成するように構成され、
前記第1のクロックに続く第2のクロックの前に、
前記第1の畳み込み器ユニットは、少なくとも、前記積w
1x
1,1、前記積w
2x
1,2、前記積w
3x
1,3、前記積w
4x
2,1、前記積w
5x
2,2、前記積w
6x
2,3、前記積w
7x
3,1、前記積w
8x
3,2、及び前記積w
9x
3,3を含む項の第1の和を生成するように構成され、
前記第2の畳み込み器ユニットは、少なくとも、前記積w
1x
1,2、前記積w
2x
1,3、前記積w
3x
1,4、前記積w
4x
2,2、前記積w
5x
2,3、前記積w
6x
2,4、前記積w
7x
3,2、前記積w
8x
3,3、及び前記積w
9x
3,4を含む項の第2の和を生成するように構成され、
前記第3の畳み込み器ユニットは、少なくとも、前記積w
10x
2,1、前記積w
11x
2,2、前記積w
12x
2,3、前記積w
13x
3,1、前記積w
14x
3,2、前記積w
15x
3,3、前記積w
16x
4,1、前記積w
17x
4,2、及び前記積w
18x
4,3を含む項の第3の和を生成するように構成され、
前記第4の畳み込み器ユニットは、少なくとも、前記積w
10x
2,2、前記積w
11x
2,3、前記積w
12x
2,4、前記積w
13x
3,2、前記積w
14x
3,3、前記積w
15x
3,4、前記積w
16x
4,2、前記積w
17x
4,3、及び前記積w
18x
4,4を含む項の第4の和を生成するように構成され、
前記第1のクロックに続く前記第2のクロックの開始時に、
第1のアキュムレータが、前記項の第1の和を記憶するように構成され、
第2のアキュムレータが、前記項の第2の和を記憶するように構成され、
第3のアキュムレータが、前記項の第3の和を記憶するように構成され、
第4のアキュムレータが、前記項の第4の和を記憶するように構成されている、
装置。
【請求項5】
前記項の第1の和が更に、バイアス値であるb1を含む、請求項4に記載の装置。
【請求項6】
前記項の第2の和が更に、バイアス値であるb1を含む、請求項4に記載の装置。
【請求項7】
前記項の第3の和が更に、バイアス値であるb1を含む、請求項4に記載の装置。
【請求項8】
前記項の第4の和が更に、バイアス値であるb1を含む、請求項4に記載の装置。
【請求項9】
第3の複数の乗算器m
3
1,1、m
3
1,2、m
3
1,3、m
3
2,1、m
3
2,2、m
3
2,3、m
3
3,1、m
3
3,2、及びm
3
3,3を含む第3の畳み込み器ユニットであって、
前記乗算器m
3
1,1が前記データ記憶要素d
1,1に恒久的に電気的に結合され、
前記乗算器m
3
1,2が前記データ記憶要素d
1,2に恒久的に電気的に結合され、
前記乗算器m
3
1,3が前記データ記憶要素d
1,3に恒久的に電気的に結合され、
前記乗算器m
3
2,1が前記データ記憶要素d
2,1に恒久的に電気的に結合され、
前記乗算器m
3
2,2が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
3
2,3が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
3
3,1が前記データ記憶要素d
3,1に恒久的に電気的に結合され、
前記乗算器m
3
3,2が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
3
3,3が前記データ記憶要素d
3,3に恒久的に電気的に結合された、
第3の畳み込み器ユニットと、
第4の複数の乗算器m
4
1,1、m
4
1,2、m
4
1,3、m
4
2,1、m
4
2,2、m
4
2,3、m
4
3,1、m
4
3,2、及びm
4
3,3を含む第4の畳み込み器ユニットであって、
前記乗算器m
4
1,1が前記データ記憶要素d
1,2に恒久的に電気的に結合され、
前記乗算器m
4
1,2が前記データ記憶要素d
1,3に恒久的に電気的に結合され、
前記乗算器m
4
1,3が前記データ記憶要素d
1,4に恒久的に電気的に結合され、
前記乗算器m
4
2,1が前記データ記憶要素d
2,2に恒久的に電気的に結合され、
前記乗算器m
4
2,2が前記データ記憶要素d
2,3に恒久的に電気的に結合され、
前記乗算器m
4
2,3が前記データ記憶要素d
2,4に恒久的に電気的に結合され、
前記乗算器m
4
3,1が前記データ記憶要素d
3,2に恒久的に電気的に結合され、
前記乗算器m
4
3,2が前記データ記憶要素d
3,3に恒久的に電気的に結合され、
前記乗算器m
4
3,3が前記データ記憶要素d
3,4に恒久的に電気的に結合された、
第4の畳み込み器ユニットと、
を更に備える、請求項1に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、畳み込みエンジンに向けたハードウェアアーキテクチャに関し、より具体的には畳み込みエンジンの計算ユニット(畳み込み器ユニット又は機能ユニットと呼ぶ)にデータ値を提供する効率的な手法に関する。
【0002】
本出願は、2018年3月13日に出願された米国仮出願第62/642,578号及び2018年7月5日に出願された米国仮出願第62/694,290号に対して優先権を主張する。
【背景技術】
【0003】
現在、ニューラルネットワーク(特に畳み込みニューラルネットワーク)は、画像認識/分類、物体認識/分類、及び画像セグメント化を実施するために広く用いられている。数多くの用途(例えば、自動運転車用に向けた物体識別、ソーシャルネットワークに向けた顔認識等)を有するが、ニューラルネットワークは、集中的な計算処理及び頻繁なメモリアクセスを必要とする。本明細書では、畳み込みニューラルネットワークを実装するための効率的なハードウェアアーキテクチャが記載される。
Sabreetal他に付与された米国特許公開第2017/0011006号では、データを受信して格納するように構成された入力バッファ、入力バッファからデータ内のカーネルに相応するカーネルデータを抽出するように構成されたデータ抽出器、抽出されたカーネルデータに畳み込み係数を乗算するように構成された乗算器、及び乗算器からの乗算結果の和を計算するように構成された加算器を含むプロセッサが開示される。「Going Deeper with Embedded FPGA Platform for Convolutional Neural Network」、Proceedings of the 2016 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, FPGA ’16, 1 January 2016, pages 26-35,において、Qui他は、Image-Net大規模画像分類のための組み込みFPGA上の畳み込みニューラルネットワーク(CNN)アクセラレータ設計について記載している。「A Massively Parallel Coprocessor for Convolutional Neural Networks」、2009 20th IEEE International Conference on Application-Specific Systems, Architectures and Processors, 1 July 2009, pages 53-60では、Sankaradas他は、畳み込みニューラルネットワーク(CNN)を高速化するための超並列コプロセッサーについて記載している。
【先行技術文献】
【特許文献】
【0004】
【文献】米国仮出願第62/642,578号広報
【文献】米国仮出願第62/694,290号広報
【非特許文献】
【0005】
【文献】Daisuke Miyashita他著「Convolutional Neural Networks using Logarithmic Data Representation」、arXiv preprint arXiv:1603.01025、2016年
【図面の簡単な説明】
【0006】
【
図1】ニューラルネットワークにおけるモデルトレーニング及びモデル適用の概要を示す図である。
【
図2】畳み込み演算の入力、単一の2次元フィルタを含むモデルパラメータ、及び出力の図である。
【
図3】2次元フィルタを用いた畳み込み演算の計算を説明する図である。
【
図4】畳み込み演算の入力、複数の2次元フィルタを含むモデルパラメータ、及び出力の図である。
【
図5】畳み込み演算の入力、単一の3次元フィルタを含むモデルパラメータ、及び出力の図である。
【
図6】3次元フィルタを用いた畳み込み演算の計算を説明する図である。
【
図7】畳み込み演算の入力、複数の3次元フィルタを含むモデルパラメータ、及び出力の図である。
【
図8】本発明の1つの実施形態による、2Dシフトレジスタと畳み込み器ユニットアレイとを含む畳み込みエンジンを示す図である。
【
図9A】本発明の1つの実施形態による、畳み込みエンジンへのデータ値のロードを示す図である。
【
図9B】本発明の1つの実施形態による、畳み込みエンジンへのデータ値のロードを示す図である。
【
図9C】本発明の1つの実施形態による、畳み込みエンジンへのフィルタ重みのロードを示す図である。
【
図9D】本発明の1つの実施形態による、畳み込みエンジンへのフィルタ重みのロードを示す図である。
【
図10A】本発明の1つの実施形態による、2Dシフトレジスタへのゼロパディング行のロードを示す図である。
【
図10B】本発明の1つの実施形態による、2Dシフトレジスタへのゼロパディング行のロードを示す図である。
【
図10C】本発明の1つの実施形態による、2Dシフトレジスタへのデータ値のロードを示す図である。
【
図10D】本発明の1つの実施形態による、2Dシフトレジスタへのデータ値のロードを示す図である。
【
図11A】本発明の1つの実施形態による、
図10Dに示すデータ値の空間的な方向に関する2つの畳み込み器ユニットの処理を記載した図である。
【
図11B】本発明の1つの実施形態による、
図10Dに示すデータ値の空間的な方向に関する2つの畳み込み器ユニットの処理を記載した図である。
【
図11C】本発明の1つの実施形態による、
図10Dに示すデータ値の空間的な方向に関する全ての活性畳み込み器ユニットの処理に続いて結果として得られる部分和を示す図である。
【
図12】
図10Dに示すデータ値の空間的な方向と比較して、2Dシフトレジスタ1行分下方にシフトされた後のデータ値を示す図である。
【
図13A】本発明の1つの実施形態による、
図12に示すデータ値の空間的な方向に関する4つの畳み込み器ユニットの処理を記載した図である。
【
図13B】本発明の1つの実施形態による、
図12に示すデータ値の空間的な方向に関する4つの畳み込み器ユニットの処理を表す図である。
【
図13C】本発明の1つの実施形態による、
図12に示すデータ値の空間的な方向に関する4つの畳み込み器ユニットの処理を表す図である。
【
図13D】本発明の1つの実施形態による、
図12に示すデータ値の空間的な方向に関する4つの畳み込み器ユニットの処理を表す図である。
【
図13E】本発明の1つの実施形態による、
図12に示すデータ値の空間的な方向に関する全ての活性畳み込み器ユニットの処理に続いて結果として得られる部分和を示す図である。
【
図14A】本発明の1つの実施形態による、畳み込みエンジンへのデータ値のロードを示す図である。
【
図14B】本発明の1つの実施形態による、畳み込みエンジンへのデータ値のロードを示す図である。
【
図14C】本発明の1つの実施形態による、畳み込みエンジンへのフィルタ重みのロードを示す図である。
【
図14D】本発明の1つの実施形態による、畳み込みエンジンへのフィルタ重みのロードを示す図である。
【
図15A】本発明の1つの実施形態による、2Dシフトレジスタへのゼロパディング行のロードを示す図である。
【
図15B】本発明の1つの実施形態による、2Dシフトレジスタへのゼロパディング行のロードを示す図である。
【
図15C】本発明の1つの実施形態による、2Dシフトレジスタへのデータ値のロードを示す図である。
【
図15D】本発明の1つの実施形態による、2Dシフトレジスタへのデータ値のロードを示す図である。
【
図16A】本発明の1つの実施形態による、
図15Dに示すデータ値の空間的な方向に関する2つの畳み込み器ユニットの処理を示す図である。
【
図16B】本発明の1つの実施形態による、
図15Dに示すデータ値の空間的な方向に関する2つの畳み込み器ユニットの処理を示す図である。
【
図16C】本発明の1つの実施形態による、
図15Dに示すデータ値の空間的な方向に関する全ての活性畳み込み器ユニットの処理に続いて結果として得られる部分和を示す図である。
【
図17】
図15Dに示すデータ値の空間的な方向と比較して2Dシフトレジスタ1行分下方にシフトされた後のデータ値を示す図である。
【
図18A】本発明の1つの実施形態による、
図17に示すデータ値の空間的な方向に関する2つの畳み込み器ユニットの処理を示す図である。
【
図18B】本発明の1つの実施形態による、
図17に示すデータ値の空間的な方向に関する2つの畳み込み器ユニットの処理を示す図である。
【
図18C】本発明の1つの実施形態による、
図17に示すデータ値の空間的な方向に関する全ての活性畳み込み器ユニットの処理に続いて結果として得られる部分和を示す図である。
【
図19A】本発明の1つの実施形態による、畳み込みエンジンへのバイアス値のロードを示す図である。
【
図19B】本発明の1つの実施形態による、畳み込みエンジンへのバイアス値のロードを示す図である。
【
図20】本発明の1つの実施形態による、部分和がバイアス値でバイアスされた後の畳み込み器ユニットの各々の出力を示す図である。
【
図21】本発明の1つの実施形態による、畳み込み器ユニットの内部構成要素を示す図である。
【
図22】本発明の1つの実施形態による、畳み込み演算のストライドを制御するための制御回路を示す図である。
【
図23】本発明の1つの実施形態による、2Dシフトレジスタと機能ユニットアレイとを含む汎用畳み込みエンジンを示す図である。
【
図24】本発明の1つの実施形態による、機能ユニットの内部構成要素を示す図である。
【
図25】本発明の1つの実施形態による、入力チャネルからm個の畳み込み器ユニット列を有する畳み込みエンジンにデータ値をロードする3つのシナリオ、すなわち、m個のデータ値列を有する入力チャネルを例示するシナリオ(a)、3m-4個のデータ値列を有する入力チャネルを例示するシナリオ(b)、及びm/2個のデータ値列を有する入力チャネルを例示するシナリオ(c)を示す図である。
【
図26A】本発明の1つの実施形態による、シナリオ(a)に関する畳み込みエンジンへのデータ値のロードを示す図である。
【
図26B】本発明の1つの実施形態による、シナリオ(a)に関する畳み込みエンジンへのデータ値のロードを示す図である。
【
図27A】本発明の1つの実施形態による、シナリオ(b)に関する畳み込みエンジンへのデータ値のロードを示す図である。
【
図27B】本発明の1つの実施形態による、シナリオ(b)に関する畳み込みエンジンへのデータ値のロードを示す図である。
【
図27C】本発明の1つの実施形態による、シナリオ(b)に関する畳み込みエンジンへのデータ値のロードを示す図である。
【
図28】本発明の1つの実施形態による、シナリオ(c)に関する畳み込みエンジンへのデータ値のロードを示す図である。
【
図29A】本発明の1つの実施形態による、畳み込みエンジン内にデータ値をロードするためのシナリオ(c)に関する別のスキームを示す図である。
【
図29B】本発明の1つの実施形態による、畳み込みエンジン内にデータ値をロードするためのシナリオ(c)に関する別のスキームを示す図である。
【
図30】本発明の1つの実施形態による、畳み込みエンジンを大型システムの1つの構成要素として示す図である。
【
図31】本発明の1つの実施形態による、重みを畳み込み器ユニットに提供する前にフィルタ重みを伸長するための構成要素のブロック図である。
【発明を実施するための形態】
【0007】
好ましい実施形態に関する以下の詳細な説明では、本明細書の一部を形成する添付図面を参照し、これらの図面には、本発明を実施することができる特定の実施形態が例証として示されている。本発明の範囲から逸脱することなく、他の実施形態を利用することができ、また構造的な変更を加えることができる点を理解されたい。図のうちの何れか1つに関連する説明は、類似の又は同様の構成要素/ステップを含む異なる図に適用することができる。
【0008】
図1は、ニューラルネットワーク内のトレーニングフェーズ及びインターフェースフェーズの概要を提供する図を示している。トレーニングフェーズでは、分類モデル104のモデルパラメータ(「重み」とも呼ぶ)をトレーニングするために、入力及び既知の(又は所望の)出力のペアを提供することができる。簡潔にするために、
図1には、入力及び出力の1つのペア(102、106)のみが描かれているが、実際には、分類モデル104をトレーニングするために多くの既知の入力及び出力ペアが用いられる。
図1の実施例では、入力102は、数字の行列(画像のピクセルを表すことができる)であり、既知の出力106は、分類確率(例えば、入力画像が猫である確率は1であり、入力画像が犬である確率は0であり、入力画像が人間である確率は0である)のベクトルである。1つの実施可能なトレーニングプロセスでは、分類確率は、人間が与えることができる(例えば、人間は、入力画像が猫を描画していることを認識し、それに応じて分類確率を割り当てることができる)。モデルトレーニングプロセスの完結時には、モデルパラメータは推定済みであることになる(例えば、W1=1.2、W2=3.8、W3=2.7)。場合によってはモデルパラメータを解釈する直感的な手法が存在する可能性はあるが、多くの場合、直観がモデルパラメータと関連付けられることはなく、モデルパラメータは、単純に、所与の入力セットのモデルの分類(又はモデルの分類確率)と既知の分類(又は既知の分類確率)との間の誤差を最小化し、それと同時に「モデル過剰適合」を回避するパラメータとすることができる。
【0009】
推測(或いは予測又はフィードフォワード)フェーズでは、トレーニング済みパラメータ(すなわち、トレーニングフェーズ中にトレーニングされたパラメータ)を有する分類モデル104を用いて、入力セットを分類する。本出願では、トレーニング済み分類モデル104は、入力108に応答して確率(例えば、入力画像が猫である確率は0.3であり、入力画像が犬である確率は0.6であり、入力画像が人間である確率は0.1である)のベクトルの分類出力110を与える。
【0010】
分類モデル104の1つの実施形態は、畳み込みニューラルネットワークである。畳み込みニューラルネットワークの基本構成単位は、
図2~
図7にて説明される畳み込み演算である。下記でより詳しく説明するように、畳み込み演算は、2次元入力と2次元フィルタとを用いる2次元畳み込み演算、3次元入力と3次元フィルタとを用いる3次元畳み込み演算等を指すことができる。
【0011】
図2は、2次元畳み込み演算の入力、モデルパラメータ、及び出力の図を示している。
図2に記載の実施例では、入力は、数値(数値の各々を「・」で抽象的に表す)の2次元行列を含む。
図2に記載の実施例における行列は4×4行列であるが、他の入力は、異なる次元を有することができる(例えば、100×100正方行列、20×70長方行列等とすることができる)。後に示す実施例は、入力を3次元物体とさえすることができることを例示することになる。実際には、入力は、あらゆる次元数の物体とすることができる。入力は、画像のピクセル値を表すことができ、又は過去の畳み込み演算の出力を表すことができる。
【0012】
モデルパラメータは、フィルタ及びバイアスを含むことができる。
図2の実施例では、フィルタは、値(「重み」とも呼ぶ)の3×3行列であり、バイアスはスカラー値である。典型的には、各フィルタに関連付けられた1つのバイアスが存在する。
図2に記載の実施例は、1つのフィルタを含み、従って1つの対応するバイアスが存在する。しかしながらある特定の実施形態では、5つのフィルタが存在する場合に、フィルタの各々に対して1つ、5つの関連のバイアスが存在することになる。
【0013】
畳み込み演算子208(「conv」と略記する)は、入力202とモデルパラメータ204、206とを受け取って、活性化マップ又は特徴マップと呼ばれる出力210を生成する。活性化マップの各値は、入力202及びフィルタ204(入力202と相対的なある特定の空間的場所にある)とバイアス206との間のドット積の和として生成される。活性化マップ210に到達するための計算は、
図3において下記でより詳細に説明される。
【0014】
図3の一行目は、活性化マップ210の位置(x=1,y=1)における要素の計算を表している。一行目に示すように、フィルタ204の中心は、入力202の位置(1,1)における要素と空間的に位置合わせされる。かかる計算は、入力202がゼロ境界によって暗示的に囲まれる「ゼロパディング」の使用を仮定している。ゼロパディングを用いる利点は、3×3フィルタを用いる時に入力202及び出力活性化マップ210の次元が一定のままであることである。フィルタ204と、該フィルタ204と空間的に位置合わせされた入力202の4つの値との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ210の位置(1,1)における要素に到達する。
【0015】
図3の二行目は、活性化マップ210の位置(1,2)における要素の計算を表している。二行目に示すように、フィルタ204の中心は、入力202の位置(1,2)における要素と空間的に位置合わせされる。フィルタ204と、該フィルタ204と空間的に位置合わせされた入力202の6つの値との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ210の位置(1,2)における要素に到達する。
【0016】
図3の三行目は、活性化マップ210の位置(1,3)における要素の計算を表している。三行目に示すように、フィルタ204の中心は、入力202の位置(1,3)における要素と空間的に位置合わせされる。フィルタ204と、該フィルタ204と空間的に位置合わせされた入力202の6つの値との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ210の位置(1,3)における要素に到達する。
【0017】
図3の四行目は、活性化マップ210の位置(4,4)における要素の計算を表している。四行目に示すように、フィルタ204の中心は、入力202の位置(4,4)における要素と空間的に位置合わせされる。フィルタ204と、該フィルタ204と空間的に位置合わせされた入力202の4つの値との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ210の位置(4,4)における要素に到達する。一般的に、畳み込み演算は、複数のシフト(又は位置合わせ)ステップと、ドット積ステップと、バイアス(又は加算)ステップとを含む。この実施例では、ドット積計算同士の間でフィルタを空間位置(ステップサイズ又はストライドと呼ぶ)1つ分シフトしたが、2、3等の他のステップサイズが可能である。
【0018】
図4は、単一のフィルタ204、単一のバイアス206、及び単一の活性化マップ210の代わりに、F個のフィルタ404、F個のバイアス406、及びF個の活性化マップ410が存在することを除いては、
図2と同様である。F個のフィルタ404、F個のバイアス406及びF個の活性化マップ410の間の関係は、フィルタf
1、バイアスb
1、及び入力402が活性化マップy
1を計算するのに用いられ(
図2においてフィルタ204、バイアス206、及び入力202が活性化マップ210を計算するのに用いられたのとほぼ同じ手法で)、フィルタf
2、バイアスb
2、及び入力402が活性化マップy
2を計算するのに用いられ、以降同様に続くというものである。
【0019】
図5は、2次元入力202及び2次元フィルタ204の代わりに、3次元入力502及び3次元フィルタ504が用いられることを除いて、
図2と同様である。活性化マップ510に到達するための計算については、
図6において下記でより詳細に説明する。
図6の関連する説明でより明確になるように、入力502及びフィルタ504は3次元であるが、活性化マップ510は2次元である。フィルタ504の各「スライス」(入力502の「チャネル」に似ている)は、カーネルと呼ばれる場合がある。
図5では、フィルタ504は、5つのカーネルで構成され、入力502は、5つのチャネルで構成される。まだ明らかでない場合には、フィルタ504のカーネルの個数(又はフィルタ504の「z」次元のサイズ)は、入力502のチャネルの個数(又は入力502の「z」次元のサイズ)に一致しなければならない。畳み込み演算中に、入力502のチャネル1は、フィルタ504のカーネル1と位置合わせし、入力502のチャネル2は、フィルタ504のカーネル2と位置合わせし、以降同様に続く。典型的には、畳み込み演算中に、入力502に対するフィルタ504のz次元の変換はない。
【0020】
図6の一行目は、活性化マップ510の位置(x=1,y=1)における要素の計算を表している。一行目に示すように、フィルタ504の中心軸506(中心軸はz軸に対して平行に描いている)は、入力502のz∈{1,…,5}に対する位置(1,1,z)における要素と位置合わせされる。フィルタ504と、該フィルタ504と空間的に位置合わせされた入力502の20個の値(チャネルあたりに4つの位置合わせされた値×5つのチャネル)との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ510の位置(1,1)における要素に到達する。
【0021】
図6の二行目は、活性化マップ510の位置(1,2)における要素の計算を表している。二行目に示すように、フィルタ504の中心軸506は、入力502のz∈{1,…,5}に対する位置(1,2,z)における要素と位置合わせされる。フィルタ504と、該フィルタ504と空間的に位置合わせされた入力502の30個の値(チャネルあたりに6つの位置合わせされた値×5つのチャネル)との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ510の位置(1,2)における要素に到達する。
【0022】
図6の三行目は、活性化マップ510の位置(1,3)における要素の計算を表している。三行目に示すように、フィルタ504の中心軸506は、入力502のz∈{1,…,5}に対する位置(1,3,z)における要素と位置合わせされる。フィルタ504と、該フィルタ504と空間的に位置合わせされた入力502の30個の値(チャネルあたりに6つの位置合わせされた値×5つのチャネル)との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ510の位置(1,3)における要素に到達する。
【0023】
図6の四行目は、活性化マップ510の位置(4,4)における要素の計算を表している。四行目に示すように、フィルタ504の中心軸506は、入力502のz∈{1,…,5}に対する位置(4,4,z)における要素と位置合わせされる。フィルタ504と、該フィルタ504と空間的に位置合わせされた入力502の20個の値(チャネルあたりに4つの位置合わせされた値×5つのチャネル)との間のドット積が計算される。次いで、ドット積は、バイアスbと加算されて活性化マップ510の位置(4,4)における要素に到達する。
【0024】
図7は、単一の3次元フィルタ504、単一のバイアスb
505、及び単一の活性化マップ510の代わりに、F個の3次元フィルタ704、F個のバイアス706、及びF個の活性化マップ710(F>1)が存在することを除いて
図5と同様である。F個の3次元フィルタ704、F個のバイアス706及びF個の活性化マップ710の間の関係は、フィルタf
1、バイアスb
1、及び入力702が活性化マップy
1を計算するのに用いられ(
図5においてフィルタ504、バイアスb
505、及び入力502が活性化マップ510を計算するのに用いられたのとほぼ同じ手法で)、フィルタf
2、バイアスb
2、及び入力702が活性化マップy
2を計算するのに用いられ、以降同様に続くというものである。
【0025】
後に続く図は、
図7の畳み込み演算を実施するためのハードウェアアーキテクチャを表している。これらの実施例のうちの多くは、簡略化の目的で2つのフィルタF=2の使用を仮定している。これらの実施例は更に、フィルタ704が3×3カーネル(すなわち、各カーネルは9つの重みで構成される)を用いて構築されることを仮定している。しかしながら、本明細書で記載される設計概念/アーキテクチャは、他の次元を有するカーネルに対応するように改変することができる。
【0026】
図8は、本発明の1つの実施形態による、畳み込みエンジン708を示している。畳み込みエンジン708(
図8に示される)は、畳み込み演算子(「conv」)708(
図7に示される)のハードウェアアーキテクチャである。畳み込みエンジン708は、次式のデータ記憶要素アレイを有する2Dシフトレジスタを含むことができる。
【数1】
図8に記載の簡素化された実施例では、アレイは4×4アレイである。データ記憶要素の各々は、複数のDフリップフロップによって形成することができる(すなわち、1つのDフリップフロップが、データ信号の各ビットを記憶する)。従って、データ記憶要素d
1,1が8ビットを記憶するとした場合、d
1,1は、8つのDフリップフロップから形成することができる。データ記憶要素のペア間の矢印の各々は、電気接続部を表す(すなわち、配線として実装することができる)。例えば、データ記憶要素d
1,1(参照番号802)は、記憶要素d
2,1(参照番号802)に電気接続部804を介して電気結合することができる。更に、この矢印は、データの一方向の流れを表すことができる(すなわち、データは、データ記憶要素d
1,1からデータ記憶要素d
2,1に伝送されるが、d
2,1からデータ記憶要素d
1,1には伝送されない)。以下の検討では、データ記憶要素の最初の行を「ヘッダー」と呼ぶ場合があり、データ記憶要素の最後の行を「フッター」と呼ぶ場合がある。
【0027】
畳み込みエンジン708は、次式の畳み込み器ユニットアレイを更に含むことができる。
【数2】
【0028】
簡潔にするために、畳み込み器ユニットアレイを「畳み込み器アレイ」と呼ぶ場合がある。
図8の簡素化された実施例では、畳み込み器アレイは、2×4アレイである。畳み込み器ユニットCU
1,2は、参照番号806で標記している(後の検討を容易にするため)。より典型的な実施形態は、
図30に記載の例示的な実施形態などと同様に、より多くの畳み込み器ユニットを含むことになることを理解されたい。2Dシフトレジスタの演算及び畳み込み器ユニットの演算について、以下の図において詳細に説明する。
【0029】
図9Aは、本発明の1つの実施形態による、畳み込みエンジン708へのデータ値のロードを示している。入力の各チャネルは、畳み込みエンジン708内に逐次方式でロードすることができる。
図9Aは、畳み込みエンジン708への入力702の第1のチャネル702aのロードを示している(チャネルには、左から右の方向で1から5の番号が付与されたとする)。
図10B~
図10Dにおいて説明されるように、特定のチャネルの行は、畳み込みエンジン708内に逐次方式でロードすることができる。「行」及び「列」等の用語は、便宜的に且つ図において要素がどのように示されているかに関して用いられることに留意されたい。しかしながら、かかる用語の意味は、チップ上で回路要素がどのようにレイアウトされているかに言い換えることができ、又はそうでない場合もあり、この場合、観察者のチップに対する向きに応じて、行を列として解釈することができ、その逆もまた同様である。
【0030】
簡略化の目的で、畳み込みエンジンのハードウェアアーキテクチャを説明する第1の実施例は、入力チャネルの列数が畳み込み器アレイの列数に等しい場合を扱うことにする。
図9Bでは、入力チャネル702aの列数は、畳み込み器アレイの列数に等しいと仮定する。例えば、入力チャネル702aは、データ値の10×4行列とすることができる。
図27A~
図27Cは、入力チャネル列数が畳み込み器アレイの列数よりも多いシナリオをどのように扱うかを表している。
図28、
図29A、及び
図29Bは、入力チャネルの列数が畳み込み器アレイの列数よりも少ない場合を扱うための2つのスキームを表している。
【0031】
典型的には、各畳み込み器ユニットのメモリ制約条件に起因して、畳み込みエンジン708は、出力を保存する(畳み込み器ユニットとは別個の記憶場所に複写される。
図30に記載のメモリ3002を参照)ことが必要になる前に、データ値のある一定数の隣接行に対してのみ畳み込み演算を計算することができる。出力が保存されると、畳み込みエンジン708は、隣接行の次のセットに進むことができる。詳細には、各畳み込み器ユニットがn個のアキュムレータを有するように構築された場合には、畳み込みエンジン708は、n個の隣接入力行(これに加えて、下記で説明する2つのパディング行)の出力を計算することができる。説明を簡略化する目的で、n個の隣接入力行は、データの「水平ストライプ」と呼ぶことにする。
図9Bの簡素化された実施例では、2つの水平ストライプ902a、902bが存在する(しかしながら、実際にはあらゆる個数の水平ストライプが存在してもよいことを理解されたい)。畳み込み器ユニットのメモリ制約条件に起因して、畳み込みエンジン708は、水平ストライプを逐次的に処理することができる。
図9Bの実施例では、水平ストライプ902aが最初に処理され、その後水平ストライプ902bが処理される。
【0032】
以下でより明確になる理由から、外側エッジである先頭行(すなわち、ロードすべき水平ストライプの最初の行)は、ゼロパディング行のロードの後になることができ(水平ストライプ902aの行nの場合のように)、外側エッジである後尾行(すなわち、ロードすべき水平ストライプの最後の行)のロードの後に、ゼロパディング行のロードが続くことができ(水平ストライプ902bの行1の場合のように)、内側エッジである先頭行のロードは、データパディング行のロードの後になることができ(水平ストライプ902bの行nの場合のように)、内側エッジである後尾行のロードの後に、データパディング行のロードが続くことができる(水平ストライプ902aの行1の場合のように)。まだ明らかでない場合には、「外側エッジ」は、入力チャネルの外側境界を形成する水平ストライプの先頭行又は後尾行を指し、他方、内側エッジは、入力チャネルの外側境界の一部分ではない水平ストライプの先頭行又は後尾行を指す。ゼロパディング行又はデータパディング行の理由は、3×3フィルタが畳み込み出力を計算するために対象行の上側の行又は下側の行からのデータを必要とすることに結び付けられる。5×5フィルタでは、2つのパディング行(ストライプの最上位行に対する)及び2つのパディング行(ストリップの最下位行に対する)又は合計で4つのパディング行が必要とされたであろう。
【0033】
図9Bの特定の実施例では、太線及び破線の矩形内にあるn+2個の行が、畳み込みエンジン708にロードされる。n+2個の行は、ゼロパディング行、水平ストライプ902aのn個の行、及びデータパディング行(水平ストライプ902bの行nに等しい)を含む。
【0034】
図9C~
図9Dは、本発明の1つの実施形態による、畳み込みエンジン708へのフィルタ重みのロードを示している。より具体的には、
図9Cは、畳み込み器アレイの最初の行の畳み込み器ユニット(すなわち、CU
1,1、CU
1,2、CU
1,3、及びCU
1,4)の各々へのカーネル704aの9つの重みのロードを示しており、
図9Dは、畳み込み器アレイの2番目の行の畳み込み器ユニット(すなわち、CU
2,1、CU
2,2、CU
2,3、及びCU
2,4)の各々へのカーネル704bの9つの重みのロードを示している。カーネル704aは、フィルタf
1の最初のカーネルであり、その重みの各々は、(フィルタf
1、カーネル1)に対する略記である、上付き文字「1,1」で標記されている。カーネル704bは、フィルタf
2の最初のカーネルであり、その重みの各々は、(フィルタf
2、カーネル1)に対する略記である上付き文字「2,1」で標記されている。
【0035】
図10A~
図10Bは、2Dシフトレジスタへのゼロ値の行のロードを示している。
図10B~
図10Dは、最初の入力チャネル702aから2Dシフトレジスタへのデータ値の行毎のロード及び2Dシフトレジスタを通したデータ値の行毎のシフトを示している。データ値x
n,1、x
n,2、x
n,3、及びx
n,4は、入力チャネル702aの水平ストライプ902aの行nからの値を表すことができる。データ値x
n-1,1、x
n-1,2、x
n-1,3、及びx
n-1,4は、入力チャネル702aの水平ストライプ902aの行n-1からの値を表すことができる。データ値x
n-2,1、x
n-2,2、x
n-2,3、及びx
n-2,4は、入力チャネル702aの水平ストライプ902aの行n-2からの値を表すことができる。
【0036】
水平ストライプ902aの行nがデータ記憶要素の2番目の行(すなわち、d
2,1、d
2,2、d
2,3、及びd
2,4)内にロードされると、データ記憶要素の2番目の行に対応する畳み込み器ユニットの最初の行(すなわち、CU
1,1、CU
1,2、CU
1,3、及びCU
1,4)を活性化することができる。「対応する」とは、畳み込み器ユニットCU
1,1とデータ記憶要素d
2,1との間、畳み込み器ユニットCU
1,2とデータ記憶要素d
2,2との間などに論理的対応関係が存在することを意味する。データ記憶要素と畳み込み器ユニットとの間の対応関係は、データ記憶要素が対応する畳み込み器ユニットの内部に描かれることにより図示される。多数の畳み込み器ユニットを有するより典型的な実施形態では、畳み込み器ユニットのほとんどは、その対応するデータ記憶要素及びこのデータ記憶要素の8つの空間的隣接要素(すなわち隣接のデータ記憶要素)からデータ値を受け取ることになる。かかる関係は、少数の畳み込み器ユニットが存在する
図11Aの例示的な畳み込みエンジンからは理解するのがより困難である。
【0037】
図11Aにおいて、活性畳み込み器ユニットが太線で描かれ、不活性畳み込み器ユニットが非太線を用いて描かれている。1つの実施形態では、「活性」は、畳み込み器ユニットに電源がオンにされることを意味し、一方、「不活性」は、節電のため畳み込み器ユニットの電源がオフにされることを意味する。コントローラ(
図22にコントローラ2202として、
図30にコントローラ3006として示しているが、提示を簡潔にするために、他の図には示されていない)は、畳み込み器ユニットの電源をオン及びオフにする役割を担うことができる。コントローラは、水平ストライプの行nからのデータが畳み込み器ユニットの行に対応するデータ記憶要素内にロードされると、畳み込み器ユニットの当該行に電源オンすることができる。コントローラは、水平ストライプの行1からのデータが畳み込み器ユニットの行に対応するデータ記憶要素から転送されると、畳み込み器ユニットの当該行を電源オンすることができる。
【0038】
図11A及び
図11Bは、
図10Dに示されるデータ値の空間的な方向に関する4つの活性畳み込み器ユニットのうちの2つの活性畳み込み器ユニットの処理を表している。2つの別の図において2つの畳み込み器ユニットの処理が記載されているが、かかる処理は通常、クロックサイクル当たりの計算数を増加させるために並列して(すなわち同時に)行われることを理解されたい。
【0039】
図11Aに示すように、畳み込み器ユニットCU
1,1(典型的には、畳み込み器アレイの左右のエッジに位置する畳み込み器ユニットに対して)は、5つの隣接データ記憶要素から複数のデータ値及び/又はゼロ値を受け取り、畳み込み器ユニットCU
1,1に対応するデータ記憶要素から1つのデータ値を受け取る。より具体的には、畳み込み器ユニットCU
1,1は、
データ記憶要素d
1,1から電気接続部1100aを介してデータ値x
n-1,1、
データ記憶要素d
1,2から電気接続部1100bを介してデータ値x
n-1,2、
データ記憶要素d
2,1から電気接続部(示していない)を介してデータ値x
n,1、
データ記憶要素d
2,2から電気接続部1100cを介してデータ値x
n,2、
データ記憶要素d
3,1から電気接続部1100dを介してゼロ値、及び
データ記憶要素d
3,2から電気接続部1100eを介してゼロ値、
を受け取る。描写を明瞭にするために、畳み込み器ユニットとデータ記憶要素との間の電気相互接続部(すなわち太線矢印)は、検討に必要とされる時にのみ示されている。
【0040】
データ値及び/又はゼロ値が受け取られると、畳み込み器ユニットCU
1,1は、w
2
1,1x
n-1,1+w
3
1,1x
n-1,2+w
5
1,1x
n,1+w
6
1,1x
n,2(式中のw
2
1,1、w
3
1,1、w
5
1,1、及びw
6
1,1は、
図9Cに示されるカーネル704aの9つの重みのうちの4つである)によって定義される部分和y
1を計算して、部分和y
1を畳み込み器ユニットCU
1,1のアキュムレータ1102a内に記憶することができる。アキュムレータ1102aは、n個のアキュムレータの線形アレイの一部とすることができ、この場合nは、水平ストライプ902aの内部の行数である。アキュムレータ1102aは、水平ストライプの行nに対応する部分和を記憶するように構成することができ、アキュムレータ1102bは、水平ストライプの行n-1に対応する部分和を記憶するように構成することができ、以降同様である。説明を明瞭にするために、畳み込み器ユニットCU
1,1の最下位インスタンスと最上位インスタンスとは1つの同じ畳み込み器ユニットであり、最下位インスタンスは、最上位インスタンスの更なる詳細を示すことに留意されたい。
【0041】
図11Bに示すように、畳み込み器ユニットCU
1,2は、8つの隣接データ記憶要素から複数のデータ値及び/又はゼロ値を受け取り、畳み込み器ユニットCU
1,2に対応するデータ記憶要素から1つのデータ値を受け取る。より具体的には、畳み込み器ユニットCU
1,2は、
データ記憶要素d
1,1から電気接続部1100fを介してデータ値x
n-1,1、
データ記憶要素d
1,2から電気接続部1100gを介してデータ値x
n-1,2、
データ記憶要素d
1,3から電気接続部1100hを介してデータ値x
n-1,3、
データ記憶要素d
2,1から電気接続部1100iを介してデータ値x
n,1、
データ記憶要素d
2,2から電気接続部(示していない)を介してデータ値x
n,2、
データ記憶要素d
2,3から電気接続部1100jを介してデータ値x
n,3、
データ記憶要素d
3,1から電気接続部1100kを介してゼロ値、
データ記憶要素d
3,2から電気接続部1100lを介してゼロ値、及び
データ記憶要素d
3,3から電気接続部1100mを介してゼロ値、
を受け取る。
【0042】
データ値が受け取られると、畳み込み器ユニットCU
1,2は、w
1
1,1x
n-1,1+w
2
1,1x
n-1,2+w
3
1,1x
n-1,3+w
4
1,1x
n,1+w
5
1,1x
n,2+w
6
1,1x
n,3(式中のw
1
1,1、w
2
1,1、w
3
1,1、w
4
1,1、w
5
1,1、及びw
6
1,1は、
図9Cに示されるカーネル704aの9つの重みのうちの6つである)によって定義される部分和y
2を計算して、部分和y
2を畳み込み器ユニットCU
1,2のアキュムレータ1104a内に記憶することができる。
【0043】
同様の処理が、CU
1,3及びCU
1,4によって実施され、従って、簡潔化の目的でこれらの計算の詳細は省略した。
図10Dに示されるデータ値の空間的な方向に関して4つの活性畳み込み器ユニットによる処理の完結時には、4つの部分和が計算され、
図11Cに示すように、アキュムレータ1102a、1104a、1106a、及び1108a内に記憶される。
【0044】
図12は、データ値及び/又はゼロ値がデータ記憶要素1行だけ下方にシフトされ、水平ストライプ902aのn-2行からのデータ値x
n-2,1、x
n-2,2、x
n-2,3、及びx
n-2,4が2Dシフトレジスタ内にロードされた後の2Dシフトレジスタを示している。水平ストライプ902aの行nがデータ記憶要素d
3,1、d
3,2、d
3,3、及びd
3,4内にロードされると、CU
1,1、CU
1,2、CU
1,3、及びCU
1,4に加えて、対応する畳み込み器ユニットCU
2,1、CU
2,2、CU
2,3、及びCU
2,4が活性化される(
図13Aに示されるように)。
【0045】
図13A~
図13Dは、本発明の1つの実施形態による、8つの活性畳み込み器ユニットのうちの4つの活性畳み込み器ユニットの処理を表している。4つの別個の図において4つの畳み込み器ユニットの処理が記載されているが、かかる処理は通常、クロックサイクル当たりの計算数を増加させるために並列して(すなわち同時に)行われることを理解されたい。
【0046】
図13Aに示すように、畳み込み器ユニットCU
1,1は、5つの隣接データ記憶要素及び1つの対応するデータ記憶要素からデータ値を受け取ることができる。畳み込み器ユニットCU
1,1は、w
2
1,1x
n-2,1+w
3
1,1x
n-2,2+w
5
1,1x
n-1,1+w
6
1,1x
n-1,2+w
8
1,1x
n,1+w
9
1,1x
n,2によって定義される部分和y
5を計算し、該部分和y
5を畳み込み器ユニットCU
1,1のアキュムレータ1102b内に記憶することができる。
【0047】
図13Bに示すように、畳み込み器ユニットCU
1,2は、8つの隣接データ記憶要素及び1つの対応するデータ記憶要素からデータ値を受け取ることができる。畳み込み器ユニットCU
1,2は、w
1
1,1x
n-2,1+w
2
1,1x
n-2,2+w
3
1,1x
n-2,3+w
4
1,1x
n-1,1+w
5
1,1x
n-1,2+w
6
1,1x
n-1,3+w
7
1,1x
n,1+w
8
1,1x
n,2+w
9
1,1x
n,3によって定義される部分和y
6を計算し、該部分和y
6を畳み込み器ユニットCU
1,2のアキュムレータ1104b内に記憶することができる。
【0048】
図13Cに示すように、畳み込み器ユニットCU
1,3は、8つの隣接データ記憶要素及び1つの対応するデータ記憶要素からデータ値を受け取ることができる。畳み込み器ユニットCU
1,3は、w
1
1,1x
n-2,2+w
2
1,1x
n-2,3+w
3
1,1x
n-2,4+w
4
1,1x
n-1,2+w
5
1,1x
n-1,3+w
6
1,1x
n-1,4+w
7
1,1x
n,2+w
8
1,1x
n,3+w
9
1,1x
n,4によって定義される部分和y
7を計算し、該部分和y
7を畳み込み器ユニットCU
1,3のアキュムレータ1106b内に記憶することができる。
【0049】
図13Dに示すように、畳み込み器ユニットCU
2,1は、5つの隣接データ記憶要素及び1つの対応するデータ記憶要素からデータ値及び/又はゼロ値を受け取ることができる。次いで、畳み込み器ユニットCU
2,1は、w
2
2,1x
n-1,1+w
3
2,1x
n-1,2+w
5
2,1x
n,1+w
6
2,1x
n,2(式中のw
2
2,1、w
3
2,1、w
5
2,1、及びw
6
2,1は、
図9Dに示されるカーネル704bの9つの重みのうちの4つである)によって定義される部分和y
9を計算し、該部分和y
9を畳み込み器ユニットCU
2,1のアキュムレータ1110a内に記憶することができる。
【0050】
同様の処理をCU
1,4、CU
2,2、CU
2,3、及びCU
2,4によって実施することができ、従って、簡潔化の目的でこれらの計算の詳細は省略した。
図12に示されるデータ値の空間的な方向に関する活性畳み込み器ユニットによる処理の完結時には、8つの(更なる)部分和が計算されて、
図13Eに示されるように、アキュムレータ1102b、1104b、1106b、1108b、1110a、1112a、1114a、及び1116a内に記憶されている。
【0051】
水平ストライプ902aの行1が2Dシフトレジスタを通してシフトされ終わるまで、2Dシフトレジスタ及び複数の畳み込みユニットの処理が同様の方式で続行される。この時点で、次の入力チャネルのデータ値及びこのチャネルに対応するカーネルのパラメータ(すなわち重み)が、
図14A~
図14Dに示されるように畳み込みエンジン内にロードすることができる。
【0052】
図14Aは、本発明の1つの実施形態による、第2の入力チャネル702bから畳み込みエンジン708へのデータ値のロードを示している。
図14Bに詳細に示すように、第2の入力チャネル702bは、水平ストライプ904a及び904bを含むことができ、水平ストライプ904aは、水平ストライプ902aがロードされたのと同様の方式で畳み込みエンジン708内にロードすることができる。
【0053】
図14C~
図14Dは、本発明の1つの実施形態による、畳み込みエンジン708へのフィルタ重みのロードを示している。より具体的には、
図14Cは、畳み込み器アレイの最初の行の畳み込み器ユニット(すなわち、CU
1,1、CU
1,2、CU
1,3、及びCU
1,4)の各々へのカーネル704cの9つの重みのロードを示しており、
図14Dは、畳み込み器アレイの2番目の行の畳み込み器ユニット(すなわち、CU
2,1、CU
2,2、CU
2,3、及びCU
2,4)の各々へのカーネル704bの9つの重みのロードを示している。カーネル704cは、フィルタf
1の第2のカーネルであり、その重みの各々は、(フィルタf
1、カーネル2)に対する略記である上付き文字「1,2」で標記されている。カーネル704dは、フィルタf
2の第2のカーネルであり、その重みの各々は、(フィルタf
2、カーネル2)に対する略記である上付き文字「2,2」で標記されている。
【0054】
図15A~
図15Bは、2Dシフトレジスタへのゼロ値行のロードを示している。
図15B~
図15Dは、第2の入力チャネル702bから2Dシフトレジスタへのデータ値の行毎のロードと、2Dシフトレジスタを通したデータ値の行毎のシフトとを示している。データ値x′
n,1、x′
n,2、x′
n,3、及びx′
n,4は、入力チャネル702bの水平ストライプ904aの行nからの値を表すことができる。データ値x′
n-1,1、x′
n-1,2、x′
n-1,3、及びx′
n-1,4は、入力チャネル702bの水平ストライプ904aの行n-1からの値を表すことができる。データ値x′
n-2,1、x′
n-2,2、x′
n-2,3、及びx′
n-2,4は、入力チャネル702bの水平ストライプ904aの行n-2からの値を表すことができる。水平ストライプ904aの行nがデータ記憶要素の2番目の行内にロードされると、畳み込み器ユニットの最初の行を活性化することができる(
図16Aに示されるように)。
【0055】
図16A及び
図16Bは、
図15Dに示されるデータ値の空間的な方向に関する4つの活性畳み込み器ユニットのうちの2つの活性畳み込み器ユニットの処理を表している。
図16Aに示すように、畳み込み器ユニットCU
1,1は、5つの隣接データ記憶要素から複数のデータ値及び/又はゼロ値を受け取り、畳み込み器ユニットCU
1,1に対応するデータ記憶要素から1つのデータ値を受け取ることができる。データ値が受け取られると、畳み込み器ユニットCU
1,1は、w
2
1,2x′
n-1,1+w
3
1,2x′
n-1,2+w
5
1,2x′
n,1+w
6
1,2x′
n,2(式中のw
2
1,2、w
3
1,2、w
5
1,2、及びw
6
1,2は、
図14Cに示されるカーネル704cの9つの重みのうちの4つである)によって定義される部分和y
13を計算することができる。部分和y
13は、y
1(行nに関して畳み込み器ユニットCU
1,1によって先に計算された部分和)と加算することができ、新しい部分和y
1+y
13をアキュムレータ1102a内に記憶することができる。
【0056】
図16Bに示すように、畳み込み器ユニットCU
1,2は、8つの隣接データ記憶要素から複数のデータ値及び/又はゼロ値を受け取り、畳み込み器ユニットCU
1,2に対応するデータ記憶要素から1つのデータ値を受け取ることができる。データ値及び/又はゼロ値が受け取られると、畳み込み器ユニットCU
1,2は、w
1
1,2x′
n-1,1+w
2
1,2x′
n-1,2+w
3
1,2x′
n-1,3+w
4
1,2x′
n,1+w
5
1,2x′
n,2+w
6
1,2x′
n,3(式中のw
1
1,2、w
2
1,2、w
3
1,2、w
4
1,2、w
5
1,2、及びw
6
1,2は、
図14Cに示されるカーネル704cの9つの重みのうちの6つである)によって定義される部分和y
14を計算することができる。部分和y
14は、y
2(行nに関して畳み込み器ユニットCU
1,2によって先に計算された部分和)と加算することができ、新しい部分和y
2+y
14をアキュムレータ1104a内に記憶することができる。
【0057】
同様の処理が、CU
1,3及びCU
1,4によって実施され、従って、簡潔化の目的でこれらの計算の詳細は省略した。
図15Dに示されるデータ値の空間的な方向に関する4つの活性畳み込み器ユニットによる処理の完結時には、4つの部分和が更新され、
図16Cに示されるようにアキュムレータ1102a、1104a、1106a、及び1108a内に記憶されている。
【0058】
図17は、データ値及び/又はゼロ値がデータ記憶要素1行分だけ下方にシフトされ、水平ストライプ904aのn-2行からのデータ値x′
n-2,1、x′
n-2,2、x′
n-2,3、及びx′
n-2,4が2Dシフトレジスタ内にロードされた後の2Dシフトレジスタを示している。水平ストライプ904aの行nがデータ記憶要素d
3,1、d
3,2、d
3,3、及びd
3,4内にロードされると、CU
1,1、CU
1,2、CU
1,3、及びCU
1,4に加えて、対応する畳み込み器ユニットCU
2,1、CU
2,2、CU
2,3、及びCU
2,4が活性化される(
図18Aに示されるように)。
【0059】
図18A~
図18Bは、本発明の1つの実施形態による、8つの活性畳み込み器ユニットのうちの2つの活性畳み込み器ユニットの処理を表している。
図18Aに示すように、畳み込み器ユニットCU
1,1は、5つの隣接データ記憶要素及び1つの対応するデータ記憶要素からデータ値を受け取ることができる。次いで、畳み込み器ユニットCU
1,1は、w
2
1,2x′
n-2,1+w
3
1,2x′
n-2,2+w
5
1,2x′
n-1,1+w
6
1,2x′
n-1,2+w
8
1,2x′
n,1+w
9
1,2x′
n,2によって定義される部分和y
17を計算することができる。部分和y
17は、y
5(行n-1に関して畳み込み器ユニットCU
1,1によって先に計算された部分和)と加算することができ、新しい部分和y
5+y
17をアキュムレータ1102b内に記憶することができる。
【0060】
図18Bに示すように、畳み込み器ユニットCU
1,2は、8つの隣接データ記憶要素及び1つの対応するデータ記憶要素からデータ値を受け取ることができる。次いで、畳み込み器ユニットCU
1,2は、w
1
1,2x′
n-2,1+w
2
1,2x′
n-2,2+w
3
1,2x′
n-2,3+w
4
1,2x′
n-1,1+w
5
1,2x′
n-1,2+w
6
1,2x′
n-1,3+w
7
1,2x′
n,1+w
8
1,2x′
n,2+w
9
1,2x′
n,3によって定義される部分和y
18を計算することができる。部分和y
18は、y
6(行n-1に関して畳み込み器ユニットCU
1,2によって先に計算された部分和)と加算することができ、新しい部分和y
6+y
18をアキュムレータ1104b内に記憶することができる。
【0061】
同様の処理が、畳み込み器ユニットCU
1,3、CU
1,4、CU
2,1、CU
2,2、CU
2,3、及びCU
2,4によって実施され、従って、簡潔化の目的でこれらの計算の詳細は省略した。
図17に示されるデータ値の空間的な方向に関する活性畳み込み器ユニットによる処理の完結時には、8つの(更なる)部分和が更新されて、
図18Cに示されるように、アキュムレータ1102b、1104b、1106b、1108b、1110a、1112a、1114a、及び1116a内に記憶されている。
【0062】
水平ストライプ904aの行1が2Dシフトレジスタを通してシフトされ終わるまで、2Dシフトレジスタ及び複数の畳み込みユニットの処理が同様の方式で続行される。次いで、2Dシフトレジスタ及び複数の畳み込みユニットの処理は、残りの入力チャネルの全てが最初の2つの入力チャネルの処理と同様の方式で処理され終わるまで続行される。
【0063】
この時点(又はプロセス中のより早い時点)で、畳み込みユニット内にバイアス値をロードすることができる。より具体的には、
図19Aは、畳み込み器ユニット(CU
1,1、CU
1,2、CU
1,3、CU
1,4)の最初の行へのバイアス値b
1のロードを示し、
図19Bは、畳み込み器ユニット(CU
2,1、CU
2,2、CU
2,3、CU
2,4)の2番目の行へのバイアス値b
2のロードを示している。畳み込み器ユニットの最初の行によって計算された部分和は、バイアス値b
1によってバイアスすることができ、畳み込み器ユニットの2番目の行によって計算された部分和は、バイアス値b
2によってバイアスすることができ(
図20に示されるように)、畳み込み演算の出力が得られる。
【0064】
これまでの実施例において、畳み込み器アレイの行数はフィルタの個数に等しいと仮定していた。しかしながら、この関係は常に成り立つわけではない。フィルタの個数が、畳み込み器アレイの行数よりも少ない場合には、畳み込み器アレイの未使用の行を不活性化することができる。フィルタの個数が、畳み込み器アレイの行数よりも多い場合には、本質的には、畳み込み演算を繰り返すことが必要となる。例えば、6つのフィルタと、3つの畳み込み器ユニット行だけが存在する場合には、フィルタ1~3に対して畳み込み演算を実施することができ、同じ畳み込み演算は、フィルタ1~3がフィルタ4~6で置き換えられることになることを除いて繰り返されることになる。
【0065】
次に、上記で説明した畳み込みエンジンのアーキテクチャに対するある動機付けが提示される。本質的に、このアーキテクチャは、データ記憶要素の論理出力数(回路構成要素のサイズ決定に関連する)と、クロックサイクル当たりの計算数(計算速度に関連する)とを上手く均衡を取ることを試みる。単にクロックサイクル当たりの計算数を最大化するだけの1つの極端な場合には、CU1,1、CU2,1、CU3,1、…、が同じ6つのデータ記憶要素に結線され、CU1,2、CU2,2、CU3,2が同じ9つのデータ記憶要素に結線される等して、2Dシフトレジスタは、3つのデータ記憶要素行へと低減することができる。クロックサイクル当たりの計算数は、上記で説明したアーキテクチャよりも多くはなるが、データ記憶要素の論理出力数はかなり多くなる(高い出力キャパシタンスを駆動するためにより大きい回路構成要素を必要とする)。単に論理出力数を最小限に抑える他方の極端な場合には、2Dシフトレジスタの3つの隣接行は、専らフィルタ1に対して用いることができ、2Dシフトレジスタの3つの隣接行は、専らフィルタ2に対して用いることができ、以降同様である。論理出力数は、上記で説明したアーキテクチャよりも少なくなるが、クロックサイクル当たりの計算数は、上記で説明したアーキテクチャと比較して、本質的に3分の2だけ低減されることになる。この説明を踏まえると、上記で説明したアーキテクチャに対する動機付けは、データ記憶要素の論理出力数とクロックサイクル当たりの計算数との間で均衡を取るものであることがここで明らかになろう。
【0066】
図21は、本発明の1つの実施形態による、畳み込み器ユニット806(すなわちCU
1,2)の内部構成要素を示している。畳み込み器ユニット806は、9つの乗算器(2102a,…,2102i)を含むことができる。乗算器の各々は、データ記憶要素(すなわち、2Dシフトレジスタのデータ記憶要素のうちの1つ)に電気結合することができ、また、対応するデータ記憶要素内に記憶されたデータ値を受け取るように構成することができる。詳細には、乗算器2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h、及び2102iは、データ記憶要素d
1,1、d
1,2、d
1,3、d
2,1、d
2,2、d
2,3、d
3,1、d
3,2、及びd
3,3に電気的に結合され、データ記憶要素2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h、及び2102iからデータ値x
1、x
2、x
3、x
4、x
5、x
6、x
7、x
8、及びx
9をそれぞれ受け取るように構成される。データ記憶要素内に記憶されたデータ値は通常、各クロックサイクルと共に変化する。例えば、
図10Cの関連において、x
1はx
n,1に等しくなり、
図10Dでは、x
1は
図10Dに記載のx
n-1,1に等しくなり、以降同様に続く。他のデータ値に対しても同じことが言える。
【0067】
乗算器の各々は更に、重みを受け取るように構成される。詳細には、乗算器2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h、及び2102iは、それぞれ重みw
1、w
2、w
3、w
4、w
5、w
6、w
7、w
8、及びw
9を受け取るように構成される。入力データ702の各チャネルに対して異なる重みセットをロードすることができる。例えば、
図9Cの関連では、w
1はw
1
1,1に等しくなり、
図14Cの関連では、w
1はw
1
1,2に等しくなり、以降同様に続く。
【0068】
乗算器の各々は、2つの値を乗算して、2つの値の積を生成することができる。詳細には、乗算器2102a、2102b、2102c、2102d、2102e、2102f、2102g、2102h、及び2102iは、データ値x1、x2、x3、x4、x5、x6、x7、x8、及びx9と重みw1、w2、w3、w4、w5、w6、w7、w8、及びw9とを乗算して、それぞれw1x1、w2x2、w3x3、w4x4、w5x5、w6x6、w7x7、w8x8、及びw9x9を生成することができる。信号値(データ値と重みとを含む)が対数領域で表される実施形態では、ビットシフターと加算器とを用いて特殊乗算器を実装することができる(この特殊乗算器は、対数から真数への変換を更に実施する)。かかる実装についての更なる詳細に関しては、例えば、Daisuke Miyashita他著「Convolutional Neural Networks using Logarithmic Data Representation」、arXiv preprint arXiv:1603.01025、2016年を参照されたい。従って、明瞭化の目的で、積が生成されると述べる時には、かかる計算は、乗算器又はビットシフターと加算器との組み合わせを用いて実装することができることを理解されたい。
【0069】
畳み込み器ユニット806は更に、複数の加算器を含むことができ、加算器によって加算される値は、制御信号s1に依存することができる。データ値x1,…,x9が第1の入力チャネル702aからのものである時には、制御信号s1を0に設定することができ、これにより出力選択器2106がゼロ値を加算器2104hに供給するようになる。この演算モードでは、部分和w1x1+w2x2+w3x3+w4x4+w5x5+w6x6+w7x7+w8x8+w9x9が計算され、この部分和は、何れかの以前の部分和に基づくものではない。次いで、部分和は、データ値が水平ストライプのどの行からのものであるかに依存してアキュムレータ1104a、1104b等のうちの1つに記憶される。データ値が行nからのものである場合には、部分和はアキュムレータ1104a内に記憶されることになり、データ値が行n-1からのものである場合には、部分和はアキュムレータ1104b内に記憶されることになり、以降同様に続く。
【0070】
データ値x1,…,x9が後続の入力チャネルのうちの1つ(例えば702b等)からのものである場合には、制御信号s1を1に設定することができ、これにより出力選択器2106が、先に計算された部分和を加算器2104hに供給するようになる。詳細には、データ値が水平ストライプの行nからのものである場合には、先に計算されてアキュムレータ1104a内に記憶された部分和が、加算器2104hに提供されることになり、データ値が行n-1からのものである場合には、先に計算されてアキュムレータ1104b内に記憶された部分和が、加算器2104hに提供されることになり、以降同様に続く。
【0071】
制御信号s1が2に設定されると、出力選択器2106は、部分和をバイアスb
kと加算する加算器2104jにアキュムレータからの部分和を供給するように構成することができる。結果として得られる和は、部分和が読み出されたアキュムレータ内に戻して記憶することができる。効率的な実装では、部分和のベクトル全体をアキュムレータアレイ(1104a、1104b、…)から読み出して、バイアスb
kと加算することができ、次いで、ベクトル(現在ではバイアスが付けられている)をアキュムレータアレイ内に戻して記憶することができる。かかる計算は、
図20においてCU
1,2に関して説明したバイアス演算を実施することができる。
【0072】
更に、信号値が対数領域で表される実施形態では、特殊加算器(比較器、ビットシフター及び加算器を用いて構築された)が、2つの値を線形領域で(先行する特殊乗算器が対数-線形変換を実施済みであることから)受け取り、結果として得られる和を対数領域で返すことができる点に留意されたい。かかる特殊加算器の詳細はまた、Daisuke Miyashita他著「Convolutional Neural Networks using Logarithmic Data Representation」、arXiv preprint arXiv:1603.01025、2016年に見出すことができる。
【0073】
9つのデータ値(及び9つの重み)を受け取る畳み込み器ユニットの何れもが、畳み込み器ユニットCU1,2と同様のハードウェアアーキテクチャを有することができ、従ってこれらについては簡潔化の目的で説明しないことにする。9つよりも少ないデータ値を受け取る畳み込み器ユニットに関しては、ハードウェアアーキテクチャは、乗算器への入力のうちの幾つかをゼロ値に結線接続することができる(データ入力又は重みをゼロ値に設定することができる)ことを除いて、畳み込み器ユニットCU1,2のハードウェアアーキテクチャと依然として同様とすることができる。例えば、CU1,1はデータ値x1、x4、及びx7を受け取らないので、重みw1、w4、w7をゼロに設定することができる。別の実施形態では、乗算器のうちの幾つかを省くこともできる。例えば、CU1,1はデータ値x1、x4、及びx7を受け取らないので、乗算器2102a、2102d、及び2102gを省くことができる。
【0074】
本発明の1つの実施形態では、全ての9つの乗算器(又は対数領域における均等物)及び9つの加算器(又は対数領域における均等物)の計算は、全て1つのクロックサイクル内で行われる。すなわち、クロックサイクルnにおいてデータ値が9つのデータ記憶要素内に記憶される場合には、クロックサイクルn+1において部分和がアキュムレータ内に記憶される。更に、高いスループットを求めて、クロックサイクルn+1において部分和が記憶される間に新しいデータ値を9つのデータ記憶要素内に記憶することができる。従って、新しい部分和の計算は、全てのクロックサイクル中に実施することができる。
【0075】
次に、本ハードウェアアーキテクチャを用いて畳み込み演算のストライドをどのように設定することができるかに関する詳細を示す。ストライド(又はステップサイズ)は、フィルタがドット積演算の間にシフトされるピクセル又はデータ値の個数であることを想起されたい。
図22は、畳み込み器ユニットの全ての奇数行と全ての奇数列とを活性に設定し、畳み込み器ユニットの全ての偶数行と全ての偶数列とを不活性に設定することによって(コントローラ2202によって提供される制御信号を用いて)、2というストライドを得ることができることを例示している。他のストライド値をどのように設定することができるかは明らかであろう。3というストライドでは、x∈{0,1,2,…}の場合の畳み込み器ユニットの行3x+1及びx∈{0,1,2,…}の場合の畳み込み器ユニットの列3x+1を活性に設定することができ、他の全ての行及び列を不活性に設定することができる。1よりも小さいストライドでも実施可能である。例えば、1/2のストライドでは、入力702は、畳み込みエンジン708内にロードされる前に補間することができる。
【数3】
の2×2入力行列では、1/2というストライドを得るために、次式の3×3補間行列を入力として畳み込みエンジン708に設けることができる。
【数4】
この実施例では線形補間を用いたが、他の形態の補間(例えば、多項式補間、スプライン補間等)も実施可能であることを理解されたい。
【0076】
これまでの検討は畳み込み演算に主眼を置いたが、畳み込みニューラルネットワークは通常、最大プール及び調整演算子等の他の種類の演算を含む。最初に理解を容易にするために、畳み込み器ユニットが提示されたが、畳み込み演算に加えて、畳み込みニューラルネットワークにおいて一般的な他の種類の演算を扱うための「機能ユニット」と呼ばれるより一般化形式の畳み込み器ユニットについて説明することにする。
【0077】
図23は、本発明の1つの実施形態による、2Dシフトレジスタ及び機能ユニットアレイを含む畳み込みエンジン2300を示している。畳み込みエンジン2300は、畳み込み器ユニットが機能ユニットによって置き換えられていることを除いて、上記で説明した畳み込みエンジン708と同様である。機能ユニットのうちの1つFU
1,2を2302と標記し、ハードウェアアーキテクチャを
図23において下記で説明する。
【0078】
図24は、本発明の1つの実施形態による、機能ユニット2302の内部構成要素を示している。機能ユニット2302と畳み込み器ユニット806との間には、2つの主な相違点がある。第1に、機能ユニット2302は、最大和(最大プール演算を実施するのに必要な)を計算する能力を有する。第2に、機能ユニット2302は、値の調整を計算する能力を有する。最大和を計算するために、畳み込み器ユニットの9つの加算器(2104a,…,2104i)の各々を、機能選択器(2404a,…,2404i)で置き換えることができる。機能選択器は、制御信号s2を受け取り、加算器と比較器との間の選択を可能にする(
図24に記載の挿入図を参照されたい)。加算器が選択されると、機能ユニットは、ほとんどの部分が畳み込み器ユニット806のハードウェアアーキテクチャへと変換して戻され、機能ユニット2302は、上記で説明した畳み込み演算を実施するように構成される。比較器が選択されると、機能ユニット2302は、制御信号s1が0に設定された時にmax(w
1x
1,w
2x
2,w
3x
3,w
4x
4,w
5x
5,w
6x
6,w
7x
7,w
8x
8,w
9x
9)を計算し、制御信号s1が1に設定された時にmax(w
1x
1,w
2x
2,w
3x
3,w
4x
4,w
5x
5,w
6x
6,w
7x
7,w
8x
8,w
9x
9,直前の部分和)を計算するように構成される。従って、比較器が選択されることを除いて
図8~
図18Cと同様の方式で畳み込みエンジン2302を動作させる時には、3次元フィルタ(例えばf1)と3次元入力体積(すなわち、
図6において説明したようにフィルタと位置合わせする入力の体積)との点毎の乗算の最大値を計算することができる。この時点で、最大プール演算子は、選択された機能ユニットの比較器と、フィルタのカーネルの1つの次元の大きさに等しいように設定されたストライド(例えば3×3カーネルでは、ストライドは3であるように設定されることになる)とを用いて実装することができる。
【0079】
制御信号s1が2に設定される時には、機能ユニットは、調整演算を実施するように構成される。2に設定された制御信号s1によって、出力選択器2406は、アキュムレータ1104a、1104b、…のうちの1つ又は2つ以上に記憶された値を調整器2408に提供し、調整器2408は、次式の調整演算を実施する。
【数5】
【0080】
データ値がゼロビット(データ値が0であるか否かを示す)と、符号ビット(データ値が正又は負のどちらかであるかを示す)と、大きさ(データ値の大きさを示す)とによって表されるデータ表現では、調整器2408は、符号ビットが負数を示す時には必ず又はゼロビットが設定された場合には0を返し、その他の場合には大きさを返すように構成することができる。
【0081】
制御信号s1が3に設定される時には、機能ユニットは、畳み込み器ユニット806の演算と同様に、アキュムレータ1104a、1104b等に記憶されたデータにバイアス値を加算するように構成される。
【0082】
図25は、本発明の1つの実施形態による、データ値が入力チャネル702aからm個の列の畳み込み器ユニットを有する畳み込みエンジン708内にロードされる3つのシナリオを示し、すなわち、シナリオ(a)が、m個のデータ値列を有する入力チャネル702aを例示し、シナリオ(b)が、3m-4個のデータ値列を有する入力チャネル702aを例示し、及びシナリオ(c)が、m/2個のデータ値列を有する入力チャネル702aを例示している。シナリオ(a)については
図9Bにおいて先に説明したが、
図26A~
図26Bにおいて更に十分に検討することにする。シナリオ(b)は、入力チャネル702aの列数が畳み込み器アレイの列数よりも多い実施例を検討している。シナリオ(c)は、入力チャネル702aの列数が畳み込み器アレイの列数よりも少ない実施例を検討している。畳み込みエンジンは抽象的に示されているが、畳み込みエンジンのアーキテクチャは、2Dシフトレジスタ及び畳み込み器アレイを有し、先に説明した実施例と同様とすることができることを理解されたい。
【0083】
図26Aは、畳み込みエンジン708へのゼロパディング行、水平ストライプ902a、及びデータパディング行(水平ストライプ902bの行nに対応する)のロードを示している(まだ明らかでない場合には、太い破線の矩形は、畳み込みエンジン708内にロードされる入力チャネル702aの部分を表す)。より具体的には、最初に、畳み込みエンジン708の2Dシフトレジスタ内にゼロパディング行がロードされ、これに続いて、水平ストライプ902aの行n、水平ストライプ902aの行n-1、…水平ストライプ902aの行1及びデータパディング行がロードされる。上記で説明したように、データ記憶要素行が水平ストライプの行nを記憶する度に、当該データ記憶要素行に対応する畳み込み器ユニットが活性化される。水平ストライプの行1がデータ記憶要素行からシフトされる度に、当該データ記憶要素行に対応する畳み込み器ユニットが不活性化される。
【0084】
図26Bは、畳み込みエンジン708への1つのデータパディング行(水平ストライプ902aの行1に対応する)、水平ストライプ902b、及びゼロパディング行のロードを示している。より具体的には、最初にデータパディング行が畳み込みエンジン708の2Dシフトレジスタ内にロードされ、それに続いて水平ストライプ902bの行n、水平ストライプ902bの行n-1、…水平ストライプ902bの行1、更にゼロパディング行がロードされる。
【0085】
入力チャネル702aは、入力データを通る単一の「水平カットライン」(概念的に水平ストライプ902aと902bとの境界に位置する)の概念を例示するために、2つの水平ストライプを含むものであったが、より多くの水平カットラインが存在する場合には、入力チャネルは、より多くの水平ストライプを有することになることを理解されたい。上下で他の水平ストライプによって境界を接する水平ストライプでは、該水平ストライプのロードにデータパディング行が先行し、別のデータパディング行が続くことになる。
【0086】
図27A~
図27Cは、入力チャネル702aを通る「垂直カットライン」が必要とされるシナリオと、垂直カットラインをどのように扱うべきかを例示している。一般的には、垂直カットラインは、入力チャネルの列数が畳み込み器アレイの列数よりも多い時には必ず必要とされる。この実施例は、mが畳み込み器アレイの列数である時に入力チャネルの列数が3m-4に等しいシナリオを検討している。入力チャネルの列数がm-2の倍数よりも2つ多い数に等しい(この実施例でそうであるように)時には必ず、畳み込み器アレイは効率的な(未使用畳み込み器ユニットのない)方式で利用されるが、この関係が成り立たない場合でも、畳み込み器アレイはそれ程効率的な方式で利用されないことになる(未使用畳み込み器ユニットを有することになる)ものの、下記で説明する設計概念がなおも当てはまる。更に、例示及び説明を明瞭にするために、
図27A~
図27Cの実施例では、水平カットライン、ゼロパディング行、
及びデータパディング行は検討しない。それにも関わらず、当業者であれば、水平と垂直との両方のカットラインが存在するシナリオを扱うために、
図26A~
図26B及び
図27A~
図27Bによる概念を組み合わせることが可能である。
【0087】
図27Aでは、入力チャネル702aは、垂直ストライプ906a、906b、及び906cに分割されている。概念的に、垂直ストライプ906aを垂直ストライプ906bから分離する第1の垂直カットラインと、垂直ストライプ906bを垂直ストライプ906cから分離する第2の垂直カットラインとを考えることができる。畳み込みエンジンの効率的な使用において、内側垂直ストライプ(906b等)はm-2個の列を含み、他方、外側垂直ストライプ(906a及び906c等)はm-1個の列を含む。
図27Aは、畳み込みエンジン708内にロードされるm個の列(垂直ストライプ906aのm-1個の列と1つのデータパディング列とを含む)を示している。最も右の畳み込み器ユニット列(データパディング列と位置合わせする)は、その出力がデータパディング列を外部列(現在のシナリオでは当てはまらない)として処理する畳み込み出力を生成したことから、不活性である。残りのm-1個の畳み込み器ユニット列は、先に説明した畳み込み器ユニットと同様の方式で動作する。
【0088】
図27Bは、畳み込みエンジン708内にロードされるm個の列(データパディング列が左右の側で境界を接する垂直ストライプ906bのm-2個の列を含む)を示している。最も左及び最も右の畳み込み器ユニット列(データパディング列と位置合わせする)は、上記で提示したものと同様の理由から不活性である。残りのm-2個の畳み込み器ユニット列は、先に説明した畳み込み器ユニットと同様の方式で動作する。
【0089】
図27Cは、畳み込みエンジン708内にロードされるm個の列(1つのデータパディング列と垂直ストライプ906cのm-1個の列とを含む)を示している。最も左の畳み込み器ユニット列(データパディング列と位置合わせする)は、上記で提示したものと同様の理由から不活性である。残りのm-1個の畳み込み器ユニット列は、先に説明した畳み込み器ユニットと同様の方式で動作する。
【0090】
図28は、mが畳み込みエンジンの列数である場合に、入力チャネル702aの列数がm/2に等しいシナリオを表している。
図28の実施例では、変数mが偶数であると仮定しているが、一般的には偶数である必要はない。入力チャネルの列数がmの除数に等しい(この実施例では当てはまるように))時には必ず、畳み込み器アレイは効率的な方式で利用される(すなわち、未使用畳み込み器ユニットを有さないことになる)が、この関係が成り立たない場合でも、畳み込み器アレイはそれ程効率的な方式で利用されないことになる(未使用畳み込み器ユニットを有することになる)ものの、下記で説明する設計概念がなおも当てはまる。
【0091】
図28の実施例は、領域708a(畳み込みエンジンの「列」のうちの前半分を含む)と領域708b(畳み込みエンジンの「列」のうちの後半分を含む)との間にデータの移動がない、畳み込みエンジン708を通る「垂直カットライン」の概念を例示している。畳み込みエンジンの状況で用いる場合には、列という用語は、2Dシフトレジスタ列と、対応する畳み込み器ユニット列とを含む。概念的に、領域708aを領域708bから分離する垂直カットラインを考えることができる。領域708aは、本質的に領域708bとは独立して機能し、それによって領域708aを、第1のフィルタセット(例えば、フィルタ1からフィルタ10まで)を用いて畳み込みを実施するように構成し、領域708bを、第2のフィルタセット(例えば、フィルタ11からフィルタ20まで)を用いて畳み込みを実施するように構成することが可能になる。説明を明瞭にするようにフィルタの個数(各領域内に10個)を選んだが、2つの領域の片方又は両方に異なる個数のフィルタが存在することが可能であったことを理解されたい。独立した領域(この場合には2つの領域であるが、他の場合にはより多くの領域が可能である)への畳み込みエンジンの区分化は、畳み込みエンジンに対する高いスループット(この場合には2倍のスループット)を可能にする。
【0092】
具体例として、畳み込みエンジンが14個の畳み込み器ユニット列を有すると仮定する。フィルタ1の重みが、最初の畳み込み器ユニット行の畳み込み器ユニット1~7の各々にロードされることになり、フィルタ11の重みが、最初の畳み込み器ユニット行の畳み込み器ユニット8~14の各々にロードされることになる。
【0093】
「垂直カットライン」を用いて動作するように畳み込みエンジン708を構成するために、領域708aの最も右の列内の畳み込み器ユニットは、ゼロに設定された重みw
3、
6、及び
9を有し(フィルタカーネルからの重みがどのようなものであるかに関わらず)、領域708bの最も左の列内の畳み込み器ユニットは、ゼロに設定された重みw
1、w
4、及びw
7を有する(フィルタカーネルからの重みがどのようなものであるかに関わらず)。このような重みの設定は、
図28の差し込み図に示されるデータフローを生じ、ここでは、領域708aの最も右の列内の畳み込み器ユニットは、その「右隣」からデータ値を受け取らず、領域708bの最も左の列内の畳み込み器ユニットは、その「左隣」からデータ値を受け取らない。
【0094】
入力チャネル702aは、畳み込みエンジン708内にロードされた時に、領域708a内に行毎にロードされると同時に、領域708b内に行毎にロードされる。畳み込みエンジン708を通したデータの伝搬が、垂直方向に通過するティッカーテープとして概念的に捉えることができる場合には、領域708aを下方に通過する1つのティッカーテープが存在することになり、更に領域708bを下方に通過するこのティッカーテープの鏡像が存在することになる。
【0095】
図28は、畳み込みエンジンを通る1つの垂直カットラインを有する実施例を示したが、複数の垂直カットラインを有するように畳み込みエンジンを改変できることは明らかであろう。更に、例示及び説明を明瞭にするために、
図28の実施例では水平カットライン、ゼロパディング行、
及びデータパディング行については検討しない。それにも関わらず、当業者であれば、
図26A~
図26B及び
図28からの概念を互いに組み合わせて、水平及び垂直の両方のカットラインが存在するシナリオを扱うことが可能になると期待される。
【0096】
図29A~
図29Bは、mが畳み込みエンジン708の列数である場合に、入力チャネル702aの列数がm/2に等しいシナリオを扱うための別のスキームを例示している。このスキームは、入力データを通る水平カットラインの概念(
図26A~
図26Bにおいて説明した)と、畳み込み器アレイを通る垂直カットラインの概念(
図28において説明した)とを組み合わせるステップを含む。
図26A~
図26Bでは、2つの水平ストライプが1つずつ(すなわち順次的に)処理された。しかしながら、
図29A~
図29Bの実施例では、水平ストライプ908aと908bとが並列に処理され、水平ストライプ908aは領域708a内で処理され、水平ストライプ908bは領域708b内で処理される。
図28に記載のスキームとは対照的に、領域708a及び708b内に同じフィルタが追加される。
【0097】
図29Aには複数の重なり合う矩形があるので、このスキームは、領域708a及び領域708bにロードされたデータをより明瞭に示す
図29Bにおいて概念的に描き直している。まだ明らかでない場合には、水平ストライプ908aの行1が、水平ストライプ908bに先行するデータパディング行に一致し、水平ストライプ908aに続くデータパディング行が水平ストライプ908bの行nに一致することに留意されたい。
【0098】
図28のスキームと同様に、
図29A~
図29Bのスキームもまた、スループットを2倍にする効果を有する。この時点では、m/2シナリオを扱うための2つの可能なスキームが存在するので、どちらのスキームが好ましいか思案される可能性がある。
図28のスキームと
図29A~
図29Bのスキームとの間の1つの考慮すべき点は、入力チャネルの行数に対するフィルタの個数である。入力チャネルの行数よりも多くのフィルタが存在する場合には、
図28のスキームが好ましい可能性があり、それに対してフィルタの個数よりも多くの入力チャネル行が存在する場合には、
図29A~
図29Bに記載のスキームが好ましい可能性がある。直感的には、前者の事例は、細長いフィルタ列に似たものになり、この場合、細長いフィルタ列を半分に分断する(半分を領域708aに入れ、もう一方の半分を領域708bに入れる)ことが有利となり、一方、後者の事例では、細長い入力データ列に似たものになり、この場合、細長い入力データ列を半分に分断して、入力データの2つの半部分を並列に処理することが有利となる。
【0099】
一方のスキームが別のスキームよりも好ましいことに関する他の考慮事項は、畳み込み器ユニットの行数に対する相対的なフィルタの個数を含むこともできる。フィルタの個数が畳み込み器ユニットの行数よりも少ない場合には、
図29A~
図29Bのスキームが好ましい可能性があり、それに対してフィルタの個数が畳み込み器ユニットの行数よりも多い場合には、
図28に記載のスキームが好ましい可能性がある。
【0100】
図30は、本発明の1つの実施形態による、畳み込みエンジン708をシステム3000の1つの構成要素として示している。システム3000は、メモリ3002と、シフト・フォーマットモジュール3004と、畳み込みエンジン708と、コントローラ3006とを含むことができる。
【0101】
メモリ3002は、スタティックランダムアクセスメモリ(SRAM)を用いて実装することができ、入力データ702と、畳み込みエンジン708の出力(例えば、畳み込み出力、最大プール出力、調整済み出力等)とを記憶することができる。
【0102】
シフト・フォーマットモジュール3004は、メモリ3002と畳み込みエンジン708との間のインターフェースであり、データをシフトさせてフォーマットするように構成される。例えば、
図29Aの実施例では、水平ストライプ908bを畳み込みエンジンの領域708b内に提供するステップは、シフト・フォーマットモジュール3004によって実施される1つのタスクとなる。1/2というストライド(又は1よりも小さいストライド)を得るステップはまた、シフト・フォーマットモジュール3004を必要とする場合があり、この場合、上記で説明した補間は、シフト・フォーマットモジュール3004によって実施することができる。
【0103】
図30の実施形態では、畳み込みエンジン708は、より典型的な個数のデータ記憶要素及び畳み込み器ユニットを含む。
図30は、畳み込み器ユニットの806の64×256アレイと、2Dシフトレジスタとして構成されたデータ記憶要素の66×256アレイとを示している。これまでに説明した実施形態と同様に、畳み込み器ユニットの最初の行は、データ記憶要素の2番目の行に論理的に対応し、畳み込み器ユニットの最後の行は、データ記憶要素の最後から2番目の行に論理的に対応する。
【0104】
コントローラ3006は、上記で説明した制御動作のうちの多くを実施する役割を担うことができる。例えば、コントローラ3006は、畳み込み器ユニットを活性及び不活性に設定する制御信号を提供することができる(従って、上記で説明したコントローラ2202をコントローラ3006の一部とすることができる)。コントローラ3006は、出力選択器2106及び2406の出力を制御するための制御信号s1(
図21及び
図24において説明した)を提供する役割を担うことができる。コントローラ3006は、畳み込み出力又は最大プール出力のどちらを出力するように機能ユニットをプログラミングするかを制御するための制御信号s2(
図24において説明した)を提供する役割を担うことができる。コントローラ3006は、畳み込み器アレイの次元に対して相対的な入力チャネルの次元に基づいて、入力チャネルを水平ストライプ、
及び/又は垂直ストライプ(垂直カットライン及び水平カットラインが存在する時にはより適切にチャンクと呼ぶ)に論理的に区分化することができる。コントローラ3006は、必要なシフト及びフォーマットの動作を実施するようにシフト・フォーマットモジュール3004を制御することができる。コントローラ3006は、どのような重みをどの畳み込みユニットにロードすべきかを決定することができる。コントローラ3006は、畳み込みエンジンを複数の独立した領域へと論理的に区分化する(
図28、
図29A、及び
図29Bに示されるように)ためにフィルタ重みをゼロ値でオーバーライドするか否かを決定することができる。コントローラ3006はまた、畳み込みエンジンへの水平ストライプのロードに関して、水平ストライプにゼロパディング行又はデータパディング行のどちらを先行させるべきか、
或いは水平ストライプの後にゼロパディング行又はデータパディング行のどちらを続けるべきかを決定するロジックを含むことができる。これらは、コントローラ3006が実施することができる機能の幾つかの実施例にすぎない。
【0105】
図31は、本発明の1つの実施形態による、畳み込み器ユニットにフィルタ重みが提供される前にフィルタ重みを伸長するための重み伸長器3100のブロック図を示している。重み伸長器3100は、重みを伸長するために辞書3102を利用することができる。1つの実施形態では、圧縮重みは、参照テーブル(辞書の1つの実施形態)への鍵であり、参照テーブル内で鍵に対応する記録が伸長重みである。256個の畳み込み器ユニットは、16個のグループへと論理的及び/又は物理的にグループ化することができ、各グループは16個の畳み込み器ユニットを含む。伸長された重みは、16個の畳み込み器ユニットグループの各々に提供することができる。
【0106】
上記のように、効率的な畳み込みエンジンを説明した。1つの実施形態では、畳み込みエンジンは、次式の3×4のデータ記憶要素アレイを有する2次元シフトレジスタであって、
【数6】
最初の時点で、
データ記憶要素d
1,1がデータ値x
1,1を記憶し、
データ記憶要素d
1,2がデータ値x
1,2を記憶し、
データ記憶要素d
1,3がデータ値x
1,3を記憶し、
データ記憶要素d
1,4がデータ値x
1,4を記憶し、
データ記憶要素d
2,1がデータ値x
2,1を記憶し、
データ記憶要素d
2,2がデータ値x
2,2を記憶し、
データ記憶要素d
2,3がデータ値x
2,3を記憶し、
データ記憶要素d
2,4がデータ値x
2,4を記憶し、
データ記憶要素d
3,1がデータ値x
3,1を記憶し、
データ記憶要素d
3,2がデータ値x
3,2を記憶し、
データ記憶要素d
3,3がデータ値x
3,3を記憶し、
データ記憶要素d
3,4がデータ値x
3,4を記憶する、
2次元シフトレジスタを含む。
畳み込みエンジンは更に、第1の複数の乗算器m
1
1,1、m
1
1,2、m
1
1,3、m
1
2,1、m
1
2,2、m
1
2,3、m
1
3,1、m
1
3,2、及びm
1
3,3を有する第1の畳み込み器ユニットであって、
乗算器m
1
1,1がデータ記憶要素d
1,1に電気的に結合され、データ値x
1,1に重みw
1を乗算して積w
1x
1,1を生成するように構成され、
乗算器m
1
1,2がデータ記憶要素d
1,2に電気的に結合され、データ値x
1,2に重みw
2を乗算して積w
2x
1,2を生成するように構成され、
乗算器m
1
1,3がデータ記憶要素d
1,3に電気的に結合され、データ値x
1,3に重みw
3を乗算して積w
3x
1,3を生成するように構成され、
乗算器m
1
2,1がデータ記憶要素d
2,1に電気的に結合され、データ値x
2,1に重みw
4を乗算して積w
4x
2,1を生成するように構成され、
乗算器m
1
2,2がデータ記憶要素d
2,2に電気的に結合され、データ値x
2,2に重みw
5を乗算して積w
5x
2,2を生成するように構成され、
乗算器m
1
2,3がデータ記憶要素d
2,3に電気的に結合され、データ値x
2,3に重みw
6を乗算して積w
6x
2,3を生成するように構成され、
乗算器m
1
3,1がデータ記憶要素d
3,1に電気的に結合され、データ値x
3,1に重みw
7を乗算して積w
7x
3,1を生成するように構成され、
乗算器m
1
3,2がデータ記憶要素d
3,2に電気的に結合され、データ値x
3,2に重みw
8を乗算して積w
8x
3,2を生成するように構成され、
乗算器m
1
3,3がデータ記憶要素d
3,3に電気的に結合され、データ値x
3,3に重みw
9を乗算して積w
9x
3,3を生成するように構成された、
第1の畳み込み器ユニットを含む。
畳み込みエンジンは更に、第2の複数の乗算器m
2
1,1、m
2
1,2、m
2
1,3、m
2
2,1、m
2
2,2、m
2
2,3、m
2
3,1、m
2
3,2、及びm
2
3,3を含む第2の畳み込み器ユニットであって、
乗算器m
2
1,1がデータ記憶要素d
1,2に電気的に結合され、データ値x
1,2に重みw
1を乗算して積w
1x
1,2を生成するように構成され、
乗算器m
2
1,2がデータ記憶要素d
1,3に電気的に結合され、データ値x
1,3に重みw
2を乗算して積w
2x
1,3を生成するように構成され、
乗算器m
2
1,3がデータ記憶要素d
1,4に電気的に結合され、データ値x
1,4に重みw
3を乗算して積w
3x
1,4を生成するように構成され、
乗算器m
2
2,1がデータ記憶要素d
2,2に電気的に結合され、データ値x
2,2に重みw
4を乗算して積w
4x
2,2を生成するように構成され、
乗算器m
2
2,2がデータ記憶要素d
2,3に電気的に結合され、データ値x
2,3に重みw
5を乗算して積w
5x
2,3を生成するように構成され、
乗算器m
2
2,3がデータ記憶要素d
2,4に電気的に結合され、データ値x
2,4に重みw
6を乗算して積w
6x
2,4を生成するように構成され、
乗算器m
2
3,1がデータ記憶要素d
3,2に電気的に結合され、データ値x
3,2に重みw
7を乗算して積w
7x
3,2を生成するように構成され、
乗算器m
2
3,2がデータ記憶要素d
3,3に電気的に結合され、データ値x
3,3に重みw
8を乗算して積w
8x
3,3を生成するように構成され、
乗算器m
2
3,3がデータ記憶要素d
3,4に電気的に結合され、データ値x
3,4に重みw
9を乗算して積w
9x
3,4を生成するように構成された、
第2の畳み込み器ユニットを含む。
【0107】
様々な実施形態において、第1の畳み込み器ユニットは、少なくとも、積w1x1,1、積w2x1,2、積w3x1,3、積w4x2,1、積w5x2,2、積w6x2,3、積w7x3,1、積w8x3,2、積w9x3,3、及びバイアス値であるb1を含む項の和を生成するように構成することができる。更に、第2の畳み込み器ユニットは、少なくとも、積w1x1,2、積w2x1,3、積w3x1,4、積w4x2,2、積w5x2,3、積w6x2,4、積w7x3,2、積w8x3,3、積w9x3,4、及びバイアス値であるb1を含む項の和を計算するように構成することができる。
【0108】
幾つかの事例では、
データ記憶要素d1,1は、データ記憶要素d2,1に電気的に結合され、
データ記憶要素d2,1は、データ記憶要素d3,1に電気的に結合され、
データ記憶要素d1,2は、データ記憶要素d2,2に電気的に結合され、
データ記憶要素d2,2は、データ記憶要素d3,2に電気的に結合され、
データ記憶要素d1,3は、データ記憶要素d2,3に電気的に結合され、
データ記憶要素d2,3は、データ記憶要素d3,3に電気的に結合され、
データ記憶要素d1,4は、データ記憶要素d2,4に電気的に結合され、
データ記憶要素d2,4は、データ記憶要素d3,4に電気的に結合される。
【0109】
本発明の更なる実施形態は、次式の4×4データ記憶要素アレイを有する2次元シフトレジスタであって、
【数7】
最初の時点で、
データ記憶要素d
1,1がデータ値x
1,1を記憶し、
データ記憶要素d
1,2がデータ値x
1,2を記憶し、
データ記憶要素d
1,3がデータ値x
1,3を記憶し、
データ記憶要素d
1,4がデータ値x
1,4を記憶し、
データ記憶要素d
2,1がデータ値x
2,1を記憶し、
データ記憶要素d
2,2がデータ値x
2,2を記憶し、
データ記憶要素d
2,3がデータ値x
2,3を記憶し、
データ記憶要素d
2,4がデータ値x
2,4を記憶し、
データ記憶要素d
3,1がデータ値x
3,1を記憶し、
データ記憶要素d
3,2がデータ値x
3,2を記憶し、
データ記憶要素d
3,3がデータ値x
3,3を記憶し、
データ記憶要素d
3,4がデータ値x
3,4を記憶し、
データ記憶要素d
4,1がデータ値x
4,1を記憶し、
データ記憶要素d
4,2がデータ値x
4,2を記憶し、
データ記憶要素d
4,3がデータ値x
4,3を記憶し、
データ記憶要素d
4,4がデータ値x
4,4を記憶する、
2次元シフトレジスタを含む装置を提供する。
本装置はまた、
第1の複数の乗算器m
1
1,1、m
1
1,2、m
1
1,3、m
1
2,1、m
1
2,2、m
1
2,3、m
1
3,1、m
1
3,2、及びm
1
3,3を含む第1の畳み込み器ユニットであって、
乗算器m
1
1,1がデータ記憶要素d
1,1に電気的に結合され、データ値x
1,1に重みw
1を乗算して積w
1x
1,1を生成するように構成され、
乗算器m
1
1,2がデータ記憶要素d
1,2に電気的に結合され、データ値x
1,2に重みw
2を乗算して積w
2x
1,2を生成するように構成され、
乗算器m
1
1,3がデータ記憶要素d
1,3に電気的に結合され、データ値x
1,3に重みw
3を乗算して積w
3x
1,3を生成するように構成され、
乗算器m
1
2,1がデータ記憶要素d
2,1に電気的に結合され、データ値x
2,1に重みw
4を乗算して積w
4x
2,1を生成するように構成され、
乗算器m
1
2,2がデータ記憶要素d
2,2に電気的に結合され、データ値x
2,2に重みw
5を乗算して積w
5x
2,2を生成するように構成され、
乗算器m
1
2,3がデータ記憶要素d
2,3に電気的に結合され、データ値x
2,3に重みw
6を乗算して積w
6x
2,3を生成するように構成され、
乗算器m
1
3,1がデータ記憶要素d
3,1に電気的に結合され、データ値x
3,1に重みw
7を乗算して積w
7x
3,1を生成するように構成され、
乗算器m
1
3,2がデータ記憶要素d
3,2に電気的に結合され、データ値x
3,2に重みw
8を乗算して積w
8x
3,2を生成するように構成され、
乗算器m
1
3,3がデータ記憶要素d
3,3に電気的に結合され、データ値x
3,3に重みw
9を乗算して積w
9x
3,3を生成するように構成された、
第1の畳み込み器ユニットを含む。
本装置はまた、
第2の複数の乗算器m
2
1,1、m
2
1,2、m
2
1,3、m
2
2,1、m
2
2,2、m
2
2,3、m
2
3,1、m
2
3,2、及びm
2
3,3を含む第2の畳み込み器ユニットであって、
乗算器m
2
1,1がデータ記憶要素d
1,2に電気的に結合され、データ値x
1,2に重みw
1を乗算して積w
1x
1,2を生成するように構成され、
乗算器m
2
1,2がデータ記憶要素d
1,3に電気的に結合され、データ値x
1,3に重みw
2を乗算して積w
2x
1,3を生成するように構成され、
乗算器m
2
1,3がデータ記憶要素d
1,4に電気的に結合され、データ値x
1,4に重みw
3を乗算して積w
3x
1,4を生成するように構成され、
乗算器m
2
2,1がデータ記憶要素d
2,2に電気的に結合され、データ値x
2,2に重みw
4を乗算して積w
4x
2,2を生成するように構成され、
乗算器m
2
2,2がデータ記憶要素d
2,3に電気的に結合され、データ値x
2,3に重みw
5を乗算して積w
5x
2,3を生成するように構成され、
乗算器m
2
2,3がデータ記憶要素d
2,4に電気的に結合され、データ値x
2,4に重みw
6を乗算して積w
6x
2,4を生成するように構成され、
乗算器m
2
3,1がデータ記憶要素d
3,2に電気的に結合され、データ値x
3,2に重みw
7を乗算して積w
7x
3,2を生成するように構成され、
乗算器m
2
3,2がデータ記憶要素d
3,3に電気的に結合され、データ値x
3,3に重みw
8を乗算して積w
8x
3,3を生成するように構成され、
乗算器m
2
3,3がデータ記憶要素d
3,4に電気的に結合され、データ値x
3,4に重みw
9を乗算して積w
9x
3,4を生成するように構成された、
第2の畳み込み器ユニットと、
第3の複数の乗算器m
3
1,1、m
3
1,2、m
3
1,3、m
3
2,1、m
3
2,2、m
3
2,3、m
3
3,1、m
3
3,2、及びm
3
3,3を備える第3の畳み込み器ユニットであって、
乗算器m
3
1,1がデータ記憶要素d
2,1に電気的に結合され、データ値x
2,1に重みw
10を乗算して積w
10x
2,1を生成するように構成され、
乗算器m
3
1,2がデータ記憶要素d
2,2に電気的に結合され、データ値x
2,2に重みw
11を乗算して積w
11x
2,2を生成するように構成され、
乗算器m
3
1,3がデータ記憶要素d
2,3に電気的に結合され、データ値x
2,3に重みw
12を乗算して積w
12x
2,3を生成するように構成され、
乗算器m
3
2,1がデータ記憶要素d
3,1に電気的に結合され、データ値x
3,1に重みw
13を乗算して積w
13x
3,1を生成するように構成され、
乗算器m
3
2,2がデータ記憶要素d
3,2に電気的に結合され、データ値x
3,2に重みw
14を乗算して積w
14x
3,2を生成するように構成され、
乗算器m
3
2,3がデータ記憶要素d
3,3に電気的に結合され、データ値x
3,3に重みw
15を乗算して積w
15x
3,3を生成するように構成され、
乗算器m
3
3,1がデータ記憶要素d
4,1に電気的に結合され、データ値x
4,1に重みw
16を乗算して積w
16x
4,1を生成するように構成され、
乗算器m
3
3,2がデータ記憶要素d
4,2に電気的に結合され、データ値x
4,2に重みw
17を乗算して積w
17x
4,2を生成するように構成され、
乗算器m
3
3,3がデータ記憶要素d
4,3に電気的に結合され、データ値x
4,3に重みw
18を乗算して積w
18x
4,3を生成するように構成された、
第3の畳み込み器ユニットと、
を含む。
また、本装置は、第4の複数の乗算器m
4
1,1、m
4
1,2、m
4
1,3、m
4
2,1、m
4
2,2、m
4
2,3、m
4
3,1、m
4
3,2、及びm
4
3,3を含む第4の畳み込み器ユニットであって、
乗算器m
4
1,1がデータ記憶要素d
2,2に電気的に結合され、データ値x
2,2に重みw
10を乗算して積w
10x
2,2を生成するように構成され、
乗算器m
4
1,2がデータ記憶要素d
2,3に電気的に結合され、データ値x
2,3に重みw
11を乗算して積w
11x
2,3を生成するように構成され、
乗算器m
4
1,3がデータ記憶要素d
2,4に電気的に結合され、データ値x
2,4に重みw
12を乗算して積w
12x
2,4を生成するように構成され、
乗算器m
4
2,1がデータ記憶要素d
3,2に電気的に結合され、データ値x
3,2に重みw
13を乗算して積w
13x
3,2を生成するように構成され、
乗算器m
4
2,2がデータ記憶要素d
3,3に電気的に結合され、データ値x
3,3に重みw
14を乗算して積w
14x
3,3を生成するように構成され、
乗算器m
4
2,3がデータ記憶要素d
3,4に電気的に結合され、データ値x
3,4に重みw
15を乗算して積w
15x
3,4を生成するように構成され、
乗算器m
4
3,1がデータ記憶要素d
4,2に電気的に結合され、データ値x
4,2に重みw
16を乗算して積w
16x
4,2を生成するように構成され、
乗算器m
4
3,2がデータ記憶要素d
4,3に電気的に結合され、データ値x
4,3に重みw
17を乗算して積w
17x
4,3を生成するように構成され、
乗算器m
4
3,3がデータ記憶要素d
4,4に電気的に結合され、データ値x
4,4に重みw
18を乗算して積w
18x
4,4を生成するように構成された、
第4の畳み込み器ユニットを含む。
【0110】
幾つかの実施形態では、第1の畳み込み器ユニットは、少なくとも、積w1x1,1、積w2x1,2、積w3x1,3、積w4x2,1、積w5x2,2、積w6x2,3、積w7x3,1、積w8x3,2、積w9x3,3、及びバイアス値であるb1を含む項の和を生成するように構成することができる。また、第2の畳み込み器ユニットは、少なくとも、積w1x1,2、積w2x1,3、積w3x1,4、積w4x2,2、積w5x2,3、積w6x2,4、積w7x3,2、積w8x3,3、積w9x3,4、及びバイアス値であるb1を含む項の和を計算するように構成することができる。
【0111】
更に別の実施形態では、第3の畳み込み器ユニットは、少なくとも、積w10x2,1、積w11x2,2、積w12x2,3、積w13x3,1、積w14x3,2、積w15x3,3、積w16x4,1、積w17x4,2、積w18x4,3、及びバイアス値であるb2を含む項の和を生成するように構成することができる。また、第4の畳み込み器ユニットは、少なくとも、積w10x2,2、積w11x2,3、積w12x2,4、積w13x3,2、積w14x3,3、積w15x3,4、積w16x4,2、積w17x4,3、積w18x4,4、及びバイアス値であるb2を含む項の和を計算するように構成することができる。
【0112】
様々な実施形態において、
データ記憶要素d1,1は、データ記憶要素d2,1に電気的に結合され、
データ記憶要素d2,1は、データ記憶要素d3,1に電気的に結合され、
データ記憶要素d3,1は、データ記憶要素d4,1に電気的に結合され、
データ記憶要素d1,2は、データ記憶要素d2,2に電気的に結合され、
データ記憶要素d2,2は、データ記憶要素d3,2に電気的に結合され、
データ記憶要素d3,2は、データ記憶要素d4,2に電気的に結合され、
データ記憶要素d1,3は、データ記憶要素d2,3に電気的に結合され、
データ記憶要素d2,3は、データ記憶要素d3,3に電気的に結合され、
データ記憶要素d3,3は、データ記憶要素d4,3に電気的に結合され、
データ記憶要素d1,4は、データ記憶要素d2,4に電気的に結合され、
データ記憶要素d2,4は、データ記憶要素d3,4に電気的に結合され、
データ記憶要素d3,4は、データ記憶要素d4,4に電気的に結合される。
【0113】
本発明の更に別の実施形態は、次式のp×qデータ記憶要素アレイを備えた2次元同期シフトレジスタであって、
【数8】
最初のデータ記憶要素行d
1,1、…、d
1,qが、各クロックサイクルにおいてq個のデータ値を受け取り、1<k≦pに関して、各データ記憶要素行d
k,1、…、d
k,qが、各クロックサイクルにおいて直前のデータ記憶要素行d
k-1,1、…、d
k-1,qからq個のデータ値を受け取る2次元同期シフトレジスタと、
2次元同期シフトレジスタ内に記憶されたデータ値を処理するように構成された畳み込み器アレイであって、畳み込み器アレイが、p-2×q畳み込み器ユニットアレイを備え、畳み込み器ユニットCU
i,j、1≦i≦p-2及び2≦j≦q-1に関して、
(i)CU
i,jの第1の入力がデータ記憶要素d
i,j-1に電気的に結合され、
(ii)CU
i,jの第2の入力がデータ記憶要素d
i+1,j-1に電気的に結合され、
(iii)CU
i,jの第3の入力がデータ記憶要素d
i+2,j-1に電気的に結合され、
(iv)CU
i,jの第4の入力がデータ記憶要素d
i,jに電気的に結合され、
(v)CU
i,jの第5の入力がデータ記憶要素d
i+1,jに電気的に結合され、
(vi)CU
i,jの第6の入力がデータ記憶要素d
i+2,jに電気的に結合され、
(vii)CU
i,jの第7の入力がデータ記憶要素d
i,j+1に電気的に結合され、
(viii)CU
i,jの第8の入力がデータ記憶要素d
i+1,j+1に電気的に結合され、
(ix)CU
i,jの第9の入力がデータ記憶要素d
i+2,j+1に電気的に結合された、
畳み込み器アレイと、
を含む装置を提供する。
【0114】
幾つかの実施形態では、畳み込み器ユニットCUi,1、1≦i≦p-2に関して、
(i)CUi,1の第1の入力又は第1の入力に関連付けられた重みのうちの少なくとも一方が論理ゼロに設定され、
(ii)CUi,1の第2の入力又は第2の入力に関連付けられた重みのうちの少なくとも一方が論理ゼロに設定され、
(iii)CUi,1の第3の入力又は第3の入力に関連付けられた重みのうちの少なくとも一方が論理ゼロに設定され、
(iv)CUi,1の第4の入力がデータ記憶要素di,1に電気的に結合され、
(v)CUi,1の第5の入力がデータ記憶要素di+1,1に電気的に結合され、
(vi)CUi,1の第6の入力がデータ記憶要素di+2,1に電気的に結合され、
(vii)CUi,1の第7の入力がデータ記憶要素di,2に電気的に結合され、
(viii)CUi,1の第8の入力がデータ記憶要素di+1,2に電気的に結合され、
(ix)CUi,1の第9の入力がデータ記憶要素di+2,2に電気的に結合される。
【0115】
更に幾つかの実施形態では、畳み込み器ユニットCUi,q、1≦i≦p-2に関して、
(i)CUi,qの第1の入力がデータ記憶要素di,q-1に電気的に結合され、
(ii)CUi,qの第2の入力がデータ記憶要素di+1,q-1に電気的に結合され、
(iii)CUi,qの第3の入力がデータ記憶要素di+2,q-1に電気的に結合され、
(iv)CUi,qの第4の入力がデータ記憶要素di,qに電気的に結合され、
(v)CUi,qの第5の入力がデータ記憶要素di+1,qに電気的に結合され、
(vi)CUi,qの第6の入力がデータ記憶要素di+2,qに電気的に結合され、
(vii)CUi,qの第7の入力又は第7の入力に関連付けられた重みの少なくとも1つが論理ゼロに設定され、
(viii)CUi,qの第8の入力又は第8の入力に関連付けられた重みの少なくとも1つが論理ゼロに設定され、
(ix)CUi,qの第9の入力又は第9の入力に関連付けられた重みの少なくとも1つが論理ゼロに設定される。
【0116】
上記の説明は例証の目的のものであり、限定的ではないことを理解されたい。上記の説明を精査すると、当業者には多くの他の実施形態があることが明らかになろう。従って、本発明の種々の実施形態の範囲は、添付の請求項並びに請求項が権利を与えられる完全な範囲の均等物を基準として定められるべきである。
【符号の説明】
【0117】
708 畳み込みエンジン
802 データ記憶要素
804 電気接続部
806 畳み込み器ユニット
3000 システム
3002 メモリ(SRAM)
3004 シフト・フォーマット
3006 コントローラ