(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-13
(45)【発行日】2024-02-22
(54)【発明の名称】計算装置
(51)【国際特許分類】
G06F 17/10 20060101AFI20240214BHJP
G06N 99/00 20190101ALI20240214BHJP
【FI】
G06F17/10 Z
G06N99/00 180
(21)【出願番号】P 2023034946
(22)【出願日】2023-03-07
(62)【分割の表示】P 2022073018の分割
【原出願日】2018-03-09
【審査請求日】2023-04-05
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(74)【代理人】
【識別番号】110004026
【氏名又は名称】弁理士法人iX
(72)【発明者】
【氏名】辰村 光介
(72)【発明者】
【氏名】後藤 隼人
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2017-224227(JP,A)
【文献】特表2007-522699(JP,A)
【文献】国際公開第2016/194221(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
G06N 99/00
(57)【特許請求の範囲】
【請求項1】
第1チップと、第2チップと、を備え、
前記第1チップは、
第1メモリと、
第2メモリと、
第3メモリと、
第1演算モジュールと、
第2演算モジュールと、
を
含み、
前記第1メモリは、第1変数群{x}の一部を保持し、
前記第2メモリは、第2変数群{y}の一部を保持し、
前記第3メモリは、第1パラメータ群{J}の一部を保持し、
前記第2チップは、
別の第1メモリと、
別の第2メモリと、
別の第3メモリと、
別の第1演算モジュールと、
別の第2演算モジュールと、
を含み、
前記別の第1メモリは、前記第1変数群{x}の別の一部を保持し、
前記別の第2メモリは、前記第2変数群{y}の別の一部を保持し、
前記別の第3メモリは、前記第1パラメータ群{J}の別の一部を保持し、
前記第1チップは、前記第2チップから、前記第1変数群{x}の前記別の一部の少なくとも一部を取得し、
前記第2チップは、前記第1チップから、前記第1変数群{x}の前記一部の少なくとも一部を取得し、
前記第1演算モジュールは、
前記第1変数群{x}の前記一部を前記第2変数群{y}の前記一部に基づいて更新し、
前記第2演算モジュールは、
前記第2変数群{y}の前記一部を前記第1パラメータ群{J}の前記一部の少なくとも一部、及び、前記第2チップから取得した前記第1変数群{x}の前記別の一部の少なくとも一部に基づいて更新し、
前記別の第1演算モジュールは、前記第1変数群{x}の前記別の一部を前記第2変数群{y}の前記別の一部に基づいて更新し、
前記別の第2演算モジュールは、前記第2変数群{y}の前記別の一部を前記第1パラメータ群{J}の前記別の一部の少なくとも一部、及び、前記第1チップから取得した前記第1変数群{x}の前記一部の少なくとも一部に基づいて更新する、計算装置。
【請求項2】
第1モジュールと、第2モジュールと、を備え、
前記第1モジュールは、
第1メモリと、
第2メモリと、
第3メモリと、
第1演算モジュールと、
第2演算モジュールと、
を含み、
前記第1メモリは、第1変数群{x}の一部を保持し、
前記第2メモリは、第2変数群{y}の一部を保持し、
前記第3メモリは、第1パラメータ群{J}の一部を保持し、
前記第2モジュールは、
別の第1メモリと、
別の第2メモリと、
別の第3メモリと、
別の第1演算モジュールと、
別の第2演算モジュールと、
を含み、
前記別の第1メモリは、前記第1変数群{x}の別の一部を保持し、
前記別の第2メモリは、前記第2変数群{y}の別の一部を保持し、
前記別の第3メモリは、前記第1パラメータ群{J}の別の一部を保持し、
前記第1モジュールは、前記第2モジュールから、前記第1変数群{x}の前記別の一部の少なくとも一部を取得し、
前記第2モジュールは、前記第1モジュールから、前記第1変数群{x}の前記一部の少なくとも一部を取得し、
前記第1演算モジュールは、
前記第1変数群{x}の前記一部を前記第2変数群{y}の前記一部に基づいて更新し、
前記第2演算モジュールは、
前記第2変数群{y}の前記一部を前記第1パラメータ群{J}の前記一部の少なくとも一部、及び、前記第2モジュールから取得した前記第1変数群{x}の前記別の一部の少なくとも一部に基づいて更新し、
前記別の第1演算モジュールは、前記第1変数群{x}の前記別の一部を前記第2変数群{y}の前記別の一部に基づいて更新し、
前記別の第2演算モジュールは、前記第2変数群{y}の前記別の一部を前記第1パラメータ群{J}の前記別の一部の少なくとも一部、及び、前記第1モジュールから取得した前記第1変数群{x}の前記一部の少なくとも一部に基づいて更新する、計算装置。
【請求項3】
前記第1メモリは、第1ローカルメモリと、第1グローバルメモリと、を含み、
前記別の第1メモリは、別の第1ローカルメモリと、別の第1グローバルメモリと、を含み、
前記第1ローカルメモリは、前記第1変数群{x}の前記一部を保持し、
前記第1グローバルメモリは、前記第1変数群{x}の前記別の一部の前記少なくとも一部を保持し、
前記別の第1ローカルメモリは、前記第1変数群{x}の前記別の一部を保持し、
前記別の第1グローバルメモリは、前記第1変数群{x}の前記一部の前記少なくとも一部を保持し、
前記第1演算モジュールは、前記第1ローカルメモリに保持された前記第1変数群{x}の前記一部を前記第2変数群{y}の前記一部に基づいて更新した後の前記第1変数群{x}の前記一部を出力し、
前記第2演算モジュールは、前記第2変数群{y}の前記一部を前記第1パラメータ群{J}の前記一部の前記少なくとも一部、及び、前記第1グローバルメモリに保持された前記第1変数群{x}の前記別の一部の少なくとも一部に基づいて更新し、
前記別の第1演算モジュールは、前記別の第1ローカルメモリに保持された前記第1変数群{x}の前記別の一部を前記第2変数群{y}の前記別の一部に基づいて更新した後の前記第1変数群{x}の前記別の一部を出力し、
前記別の第2演算モジュールは、前記第2変数群{y}の前記別の一部を前記第1パラメータ群{J}の前記別の一部の前記少なくとも一部、及び、前記別の第1グローバルメモリに保持された前記第1変数群{x}の前記一部の少なくとも一部に基づいて更新する、請求項1または2に記載の計算装置。
【請求項4】
第1モジュールと、第2モジュールと、第1グローバルメモリと、を備え、
前記第1モジュールは、
第1メモリと、
第2メモリと、
第3メモリと、
第1演算モジュールと、
第2演算モジュールと、
を含み、
前記第1メモリは、第1変数群{x}の一部を保持し、
前記第2メモリは、第2変数群{y}の一部を保持し、
前記第3メモリは、第1パラメータ群{J}の一部を保持し、
前記第2モジュールは、
別の第1メモリと、
別の第2メモリと、
別の第3メモリと、
別の第1演算モジュールと、
別の第2演算モジュールと、
を含み、
前記別の第1メモリは、前記第1変数群{x}の別の一部を保持し、
前記別の第2メモリは、前記第2変数群{y}の別の一部を保持し、
前記別の第3メモリは、前記第1パラメータ群{J}の別の一部を保持し、
前記第1演算モジュールは、
前記第1メモリに保持された前記第1変数群{x}の前記一部を前記第2変数群{y}の前記一部に基づいて更新し、
更新した後の前記第1変数群{x}の前記一部を、前記第1メモリ及び前記第1グローバルメモリに保持させ、
前記第2演算モジュールは、
前記第2変数群{y}の前記一部を前記第1パラメータ群{J}の前記一部の少なくとも一部、及び、前記第1グローバルメモリに保持された前記第1変数群{x}の前記別の一部の少なくとも一部に基づいて更新し、
前記別の第1演算モジュールは、前記別の第1メモリに保持された前記第1変数群{x}の前記別の一部を前記第2変数群{y}の前記別の一部に基づいて更新し、更新した後の前記第1変数群{x}の前記別の一部を、前記別の第1メモリ及び前記第1グローバルメモリに保持させ、
前記別の第2演算モジュールは、前記第2変数群{y}の前記別の一部を前記第1パラメータ群{J}の前記別の一部の少なくとも一部、及び、前記第1グローバルメモリに保持された前記第1変数群{x}の前記一部の少なくとも一部に基づいて更新する、計算装置。
【請求項5】
前記第1グローバルメモリは、第1メモリ部分と、第2メモリ部分と、を含み、
前記第1メモリ部分が読み出し動作を実施している時に、前記第2メモリ部分が書き込み動作を実施し、
前記第2メモリ部分が読み出し動作を実施している時に、前記第1メモリ部分が書き込み動作を実施する、請求項3または4に記載の計算装置。
【請求項6】
前記第1変数群{x}
の前記一部は、N個(前記Nは2以上の整数)のi番目(iは1以上前記N以下の整数)の第1変数xiを含み、
前記第2変数群{y}
の前記一部は、前記N個の前記i番目(iは1以上前記N以下の整数)の第2変数yiを含み、
前記第1パラメータ群{J}は、N×N個の第1パラメータJl,m(前記lは1以上前記N以下の整数であり、前記mは1以上前記N以下の整数)を含み、
前記第1変数群{x}の前記別の一部は、前記N個のj番目(jは1以上前記N以下の整数であり、iとは異なる)の第1変数xjを含み、
前記第2変数群{y}の前記別の一部は、前記N個の前記j番目の第2変数yjを含む、請求項1~5のいずれか1つに記載の計算装置。
【請求項7】
前記第1パラメータ群{J}の前記一部の前記少なくとも一部及び前記第1変数群{x}の前記一部の少なくとも一部に基づいて行う更新に含まれる乗算の内複数を、並列に実施する、請求項1~5のいずれか1つに記載の計算装置。
【請求項8】
前記第1変数群{x}の前記一部は、N個(前記Nは2以上の整数)のi番目(iは1以上前記N以下の整数)の第1変数xiを含み、
前記第2変数群{y}の前記一部は、前記N個の前記i番目(iは1以上前記N以下の整数)の第2変数yiを含み、
前記第1パラメータ群{J}は、N×N個の第1パラメータJl,m(前記lは1以上前記N以下の整数であり、前記mは1以上前記N以下の整数)を含み、
前記第1演算モジュールの一部は、前記i番目の前記第2変数y
iの更新を実施し、
前記第1演算モジュールの別の一部は、j番目(jは前記iとは異なり、1以上前記N以下の整数)の前記第2変数y
jの更新を実施する、請求項1~5、7のいずれか1つに記載の計算装置。
【請求項9】
第1ローカルメモリと第1グローバルメモリとを含む、第1メモリと、
第2メモリと、
第3メモリと、
第1演算モジュールと、
第2演算モジュールと、
を備え、
前記第1メモリは、第1変数群{x}を保持し、
前記第2メモリは、第2変数群{y}を保持し、
前記第3メモリは、第1パラメータ群{J}を保持し、
前記第1変数群{x}は、N個(前記Nは2以上の整数)のi番目(iは1以上前記N以下の整数)の第1変数xiを含み、
前記第2変数群{y}は、前記N個のi番目(iは1以上前記N以下の整数)の第2変数yiを含み、
前記第1パラメータ群{J}は、N×N個の第1パラメータJl,m(前記lは1以上前記N以下の整数であり、前記mは1以上前記N以下の整数)を含み、
前記第1演算モジュールは、
前記第1ローカルメモリに保持された前記i番目の前記第1変数xiを前記i番目の前記第2変数yiに基づいて更新し
、更新した後の前記i番目の前記第1変数xiを、前記第1ローカルメモリ及び前記第1グローバルメモリに保持し、
前記第2演算モジュールは、前記i番目の前記第2変数yiを前記第1パラメータ群{J}の少なくとも一部、及び、
前記第1グローバルメモリに保持された前記第1変数群{x}の少なくとも一部に基づいて更新する、計算装置。
【請求項10】
前記第1グローバルメモリは、第1メモリ部分と、第2メモリ部分と、を含み、
前記第1メモリ部分が読み出し動作を実施している時に、前記第2メモリ部分が書き込み動作を実施し、
前記第2メモリ部分が読み出し動作を実施している時に、前記第1メモリ部分が書き込み動作を実施する、請求項9に記載の計算装置。
【請求項11】
前記第1パラメータ群{J}の前記少なくとも一部及び前記第1変数群{x}の一部の少なくとも一部に基づいて行う更新に含まれる乗算の内複数を、並列に実施する、請求項9または10に記載の計算装置。
【請求項12】
前記第1演算モジュールの一部は、前記N個のr番目(rは1以上前記N以下の整数)の前記第2変数y
iの更新を実施し、
前記第1演算モジュールの別の一部は、s番目(sは前記rとは異なり、1以上前記N以下の整数)の前記第2変数y
jの更新を実施する、請求項9~11のいずれか1つに記載の計算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、計算装置に関する。
【背景技術】
【0002】
例えば、大規模な最適化問題を高速に解く計算装置が求められる。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の実施形態は、最適化問題を高速に計算できる計算装置を提供する。
【課題を解決するための手段】
【0005】
本発明の実施形態によれば、計算装置は、第1メモリ、第2メモリ、第3メモリ、第1演算モジュール及び第2演算モジュールを含む。前記第1メモリの出力は、前記第1演算モジュールに入力される。前記第1メモリの前記出力は、前記第2演算モジュールに入力される。前記第2メモリの出力は、前記第2演算モジュールに入力される。前記第3メモリの出力は、前記第2演算モジュールに入力される。前記第2演算モジュールの出力は、前記第1演算モジュールに入力される。
【図面の簡単な説明】
【0006】
【
図1】第1実施形態に係る計算装置を示す模式図である。
【
図2】
図2(a)及び
図2(b)は、第1実施形態に係る計算装置を示す模式図である。
【
図3】
図3(a)及び
図3(b)は、第1実施形態に係る計算装置を示す模式図である。
【
図4】第1実施形態に係る計算装置を示す模式図である。
【
図5】第1実施形態に係る計算装置を示す模式図である。
【
図6】第1実施形態に係る計算装置を示す模式図である。
【
図7】
図7(a)~
図7(c)は、第1実施形態に係る計算装置を示す模式図である。
【
図8】
図8(a)~
図8(c)は、第1実施形態に係る計算装置を示す模式図である。
【
図9】
図9(a)及び
図9(b)は、第1実施形態に係る計算装置を示す模式図である。
【
図10】第1実施形態に係る計算装置を示す模式図である。
【
図13】第1実施形態に係る計算装置における動作を例示する模式図である。
【
図14】第1実施形態に係る計算装置における動作を例示する模式図である。
【
図15】
図15は、第2実施形態に係る計算装置を例示する模式図である。
【
図16】
図16は、第2実施形態に係る計算装置を例示する模式図である。
【
図17】
図17は、第2実施形態に係る計算装置を例示する模式図である。
【
図18】
図18(a)及び
図18(b)は、第2実施形態に係る計算装置を例示する模式図である。
【
図19】
図19(a)~
図19(f)は、実施形態に係る計算装置の動作を例示する模式図である。
【
図20】実施形態に係る計算装置を含む情報処理装置を例示する模式図である。
【
図21】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図22】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図23】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図24】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図25】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図26】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図27】実施形態に係る計算装置の動作を例示するフローチャート図である。
【
図28】実施形態に係る計算装置の動作を例示するフローチャート図である。
【発明を実施するための形態】
【0007】
以下に、本発明の各実施の形態について図面を参照しつつ説明する。
本願明細書と各図において、既出の図に関して前述したものと同様の要素には同一の符号を付して詳細な説明は適宜省略する。
【0008】
(第1実施形態)
図1は、第1実施形態に係る計算装置を示す模式図である。
図1に示すように、本実施形態に係る計算装置120は、第1メモリ11、第2メモリ12、第3メモリ13、第1演算モジュール21及び第2演算モジュール22を含む。これらのメモリは、例えば、保持部10に含まれる。これらの演算モジュールは、例えば、演算部20に含まれる。
【0009】
第1メモリ11の出力は、第1演算モジュール21に入力される。第1メモリ11の出力は、第2演算モジュール22に入力される。第2メモリ12の出力は、第2演算モジュール22に入力される。第3メモリ13の出力は、第2演算モジュール22に入力される。第2演算モジュール22の出力は、第1演算モジュール21に入力される。
【0010】
計算装置120において、制御回路40が設けられても良い。制御回路40から、制御信号40sが出力され、上記の保持部10及び演算部20の動作が制御される。
【0011】
1つの例において、第1メモリ11は、第1変数群{x}を保持する。1つの例において、第2メモリ12は、第2変数群{y}を保持する。1つの例において、第3メモリ13は、第1パラメータ群{J}を保持する。
【0012】
第1メモリ11は、例えば、Xmemメモリである。第2メモリ12は、例えば、Ymemメモリである。第3メモリ13は、例えば、Jmemメモリである。
【0013】
第1演算モジュール21は、例えば、FXFYモジュールFXFYMである。第2演算モジュール22は、例えば、JXモジュールJXMである。
【0014】
1つの例において、計算装置120は、例えば、以下の演算を効率的に実施できる。例えば、第1変数群{x}は、N個(Nは2以上の整数)のi番目(iは1以上N以下の整数)の第1変数xiを含む。第2変数群{y}は、N個のi番目(iは1以上N以下の整数)の第2変数yiを含む。第1パラメータ群{J}は、N×N個の第1パラメータJl,m(lは1以上N以下の整数であり、mは1以上N以下の整数)を含む。例えば、第1演算モジュール21は、第1変数更新及び第1サブ更新を実施する。例えば、第2演算モジュール22は、第2サブ更新を実施する。第1変数更新は、i番目の第1変数xiをi番目の第2変数yiに基づいて更新することを含む。第1サブ更新は、i番目の第2変数yiをi番目の第1変数xiに基づいて更新することを含む。第2サブ更新は、i番目の第2変数yiを第1パラメータ群{J}の少なくとも一部及び第1変数群{x}の少なくとも一部に基づいて更新することを含む。
【0015】
実施形態に係る計算装置120によれば、例えば、最適化問題を高速に計算できる。
【0016】
計算装置120は、例えば、FPGA(Field programmable gate array)、ゲートアレイ、または、特定用途向け集積回路(ASIC)を含んでも良い。計算装置120は、例えば、単一チップ構造を有しても良い。
【0017】
Xmemメモリ、Ymemメモリ及びJmemメモリのそれぞれは、例えば、オンチップメモリである。オンチップメモリのそれぞれは、例えば、少なくとも「1write,1readポート」を含む。
【0018】
計算装置120は、Hmemメモリ(
図8(a)~
図8(c)などを参照)を含んでも良い。Hmemメモリは、例えば、第2パラメータ群{h}を保持する。Hmemメモリは、オンチップメモリである。このオンチップメモリは、例えば、「1write,1readポート」を含む。第2パラメータ群{h}が設けられない場合は、Hmemメモリは省略されても良い。
【0019】
計算装置120は、例えば、同期式回路である。この同期式回路は、例えば、循環型データパス構造「Recurrent data path structure」を含む。
【0020】
計算装置120においては、第1変数群{x}及び第2変数群{y}のそれぞれの初期値、及び、第1パラメータ群{J}が、保持部10に保持される。必要に応じて、保持部10は、第2パラメータ群{h}を保持しても良い。計算装置120は、所望のクロックサイクル数だけ駆動される。例えば、第1変数xi及び第2変数yiのそれぞれの時間発展が計算される。
【0021】
計算装置120は、例えば、インターフェース回路71(
図20参照)を含む。インターフェース回路71は、例えば、メモリインターフェース、バスインターフェース及びシリアルリンクの少なくともいずれかを含む。メモリインターフェースは、例えば「DDR4」及び「HBM2」の少なくともいずれかを含む。バスインターフェースは、例えば、「PCIe」などを含む。
【0022】
1つの例において、計算装置120は、インターフェース回路71を経由して、例えば、第1変数群{x}及び第2変数群{y}のそれぞれの初期値、及び、第1パラメータ群{J}を受け取る。受け取ったこれらの値は、例えば、保持部10に保持される。1つの例において、計算装置120は、初期値生成回路72(
図20参照)を含んでも良い。初期値生成回路72は、例えば、乱数生成器を含む。この場合、初期値生成回路72において、第1変数群{x}及び第2変数群{y}のそれぞれの初期値が生成される。生成された値が、保持部10に保持される。
計算装置120は、第1変数群{x}およびそれから計算される値を、インターフェース回路71から出力することができる。
【0023】
図1に示すように、この例では、第2演算モジュール
22は、JX関数回路JXF及びJX更新回路JXUを含む。第1メモリ11の出力及び第3メモリ13の出力は、JX関数回路JXFに入力される。JX関数回路JXFの出力及び第2メモリ12の出力は、JX更新回路JXUに入力される。JX更新回路JXUの出力は、第1演算モジュール21に入力される。
【0024】
第2演算モジュール22の出力は、JX更新回路JXUの出力に対応する。このように、第2演算モジュール22の出力は、JX更新回路JXUの出力を含む。
【0025】
図1に示すように、この例では、第1演算モジュール21は、1または複数の回路セット21Aを含む。この例では、複数の回路セット21Aが設けられている。この例では、複数の回路セット21Aの数は、2である。後述するように、数は、1でも良く3以上でも良い。
【0026】
1つの回路セット21Aは、第1演算回路21a及び第2演算回路21bを含む。第1演算回路21aは、FX関数回路FXF及びFX更新回路FXUを含む。第2演算回路21bは、FY関数回路FYF及びFY更新回路FYUを含む。
【0027】
FX関数回路FXFの出力は、FX更新回路FXUに入力される。FX更新回路FXUの出力は、FY関数回路FYFに入力される。FY関数回路FYFの出力は、FY更新回路FYUに入力される。複数の回路セット21Aは、例えば、直列に接続される。
【0028】
複数の回路セット21Aが設けられる場合、複数の回路セット21Aの別の1つ(2段目)は、別の第1演算回路21a及び別の第2演算回路21bを含む。別の第1演算回路21aは、別のFX関数回路FXF、及び、別のFX更新回路FXUを含む。別の第2演算回路21bは、別のFY関数回路FYF、及び、別のFY更新回路FYUを含む。別のFX関数回路FXFの出力は、別のFX更新回路FXUに入力される。別のFX更新回路FXUの出力は、別のFY関数回路FYFに入力される。別のFY関数回路FYFの出力は、別のFY更新回路FYUに入力される。
【0029】
上記のFX更新回路FXU(1段目)の出力は、上記の別のFX更新回路FXU(2段目)に入力される。上記のFY更新回路FYU(1段目)の出力は、上記の別のFY更新回路FYU(2段目)に入力される。
【0030】
第2演算モジュール22の出力は、上記のFX更新回路FXU(1段目)に入力される。第1メモリ11の出力は、上記のFX関数回路FXF(1段目)、及び、上記のFY更新回路FYU(1段目)に入力される。
【0031】
このような第1演算モジュール21により、例えば、上記の第1変数更新及び第2変数更新が効率的に実施できる。例えば、高速の更新ができる。第1演算モジュール21に、第1メモリ11からxの値が入力され、第2演算モジュール22からyの値が入力される。第1演算モジュール21において、x及びyの更新が行われる。第1演算モジュール21から、更新後のx及びyの値が出力される。
【0032】
図1に示すように、第1演算モジュール21の出力の一部は、第1メモリ11に入力される。第1演算モジュール21の出力の別の一部は、第2メモリ12に入力される。これにより、演算(更新)の繰り返しが効率的に実施できる。
【0033】
JXモジュールJXMにおける、第2変数群{y}の1回の更新における積和演算などの数は、N2に依存する。一方、FXFYモジュールFXFYMにおける、第1変数群{x}及び第2変数群{y}の1回の更新における積和演算の数は、Nに依存する。
【0034】
実施形態において、JXモジュールJXMには、主に、空間並列化手法が適応されても良い。例えば、JXモジュールJXMは、複数の乗算器を含む。これにより、JXモジュールJXMは、Jの要素とXの要素との2以上の積を同じクロックサイクルで行うことができる。JX計算を行うクロックサイクル数を、減少できる。
【0035】
一方、FXFYモジュールFXFYMには、主に、時間並列化手法(例えば、パイプライン並列化)が適応されても良い。例えば、FXFYモジュールFXFYMに、上記の複数の回路セット21Aが設けられ、それらが、直列に接続される。これにより、計算が高速になる。
【0036】
実施形態において、例えば、JXモジュールJXMの動作、及び、FXFYモジュールFXFYMの動作は、例えば、時間的にオーバーラップして実施されても良い。例えば、JXモジュールJXMの出力がFXFYモジュールFXFYMに接続され、JX演算の出力が、順次、FXFYモジュールFXFYM送られ、演算が行われる。JX演算の少なくとも一部と、FXFY演算の少なくとも一部が並行的に実施される。これにより、計算がさらに高速になる。
【0037】
図2(a)、
図2(b)、
図3(a)及び
図3(b)は、第1実施形態に係る計算装置を示す模式図である。
図2(b)は、
図2(a)に示す例のJX関数回路JXFで行われる演算を例示している。
図3(b)は、
図3(a)に示す例のJX関数回路JXFで行われる演算を例示している。
【0038】
図3(a)に示す例においては、JX関数回路JXFとして、JXF1回路と、JFX2回路が設けられる。JFX2は、dt*cと、入力と、の乗算が行われる。例えば、JXモジュールJXM内の積和演算時に、オーバーフローが発生する場合がある。例えば、dt*cは、1以下の数に設定できる。例えば、xi’=dt*c*xiとした後で、積和演算を行うことで、オーバーフローを回避できる。
【0039】
図2(a)、
図2(b)、
図3(a)及び
図3(b)に示す計算装置においては、第1メモリ11は、第1メモリ部分11aと、第2メモリ部分11bと、を含む。例えば、第1メモリ部分11aが読み出し動作を実施している時に、第2メモリ部分11bが書き込み動作を実施できる。第2メモリ部分11bが読み出し動作を実施している時に、第1メモリ部分11aが書き込み動作を実施できる。
【0040】
このような動作により、更新が効率的に実施される。例えば、偶数番目の更新と奇数番目の更新とが交互に行われる。交互に行われる更新のそれぞれで、第1メモリ部分11a及び第2メモリ部分11bが使い分けられる。例えば、第1メモリ11(例えばXmemメモリ)は、例えば、「double-buffer構造」または「Ping-Pong buffer構造」を有する。
【0041】
後述するように、第2演算モジュール22(例えば、JXモジュールJXM)は、例えば、N行×N列の積和演算を、ブロック分割して、実施する。ブロック分割において、行並列度パラメータ「Pr」及び列並列度パラメータ「Pc」が導入される。「Pr」は、行列Jの行の並列度に対応する。「Pc」は、行列Jの列の並列度に対応する。例えば、JXモジュールにおいて、これらのパラメータ(並列度)が設定される。
【0042】
図2(a)に示す例においては、第1メモリ11は、Xbuf回路を含む。Xbuf回路は、例えば、ベクトルXの少なくとも一部を保持する。Xbuf回路は、例えば、Pr個のxデータを保持する。
【0043】
図3(a)に示す例においては、第1メモリ11は、Xメモリ部分を含む。Xメモリ部分は、N個のxデータを保持する。
【0044】
第2演算モジュール22(JXモジュールJXM)は、例えば、複数のMAC(multiply and accumulation)演算モジュール(積和アキュムレーション演算モジュール)と、Abuf回路(バッファ回路24)と、を含む。
【0045】
【0046】
図4及
び図5は、JXモジュールJXMに含まれるJX関数回路JXFを例示している。
図4に示すように、JXモジュールJXMは、Pr個のMAC演算モジュール(演算モジュールMAC0~MACPr-1)を含む。MAC演算モジュールの1つは、Pc個の乗算器を含む。1つのサイクルで、Pc回の乗算を実施する。JXモジュールJXMは、1つのJBlock(後述)と、1つのXBlock(後述)と、の内積を1つのサイクルで実施する。この内積は、Pr×Pc回の乗算に対応する。
【0047】
既に説明したように、第2演算モジュール22(例えば、JXモジュールJXM)は、例えば、N行×N列の積和演算を、ブロック分割して、実施する。
【0048】
図5に示すように、N行×N列の行列Jが、行方向において、Nr個(Nr=N/Pr)に分割される。行列Jが、列方向において、Nc個(Nc=N/Pc)に分割される。複数のブロックの1つは、Pr行及びPc列を含む。複数の分割ブロックのそれぞれを、JBlock
ij(iは0以上(Nr-1)以下の整数。jは、0以上(Nc-1)以下の整数)で参照する。「N×1のX行列」は、行方向において、Nc個に分割される。複数のブロックの1つは、Pc行を含む。X行列の複数の分割ブロックのそれぞれは、XBlocki(iは1以上(Nc-1)以下の整数)で参照される。
【0049】
「A行列」は、N行1列の行列である。この行列は、J行列とX行列との行列積の結果により得られる。「N×1のA行列」は、行方向において、Nr個に分割される。複数のブロックの1つは、Pr行を含む。「A行列」の複数の分割ブロックのそれぞれは、ABlocki(iは1以上(Nr-1)以下の整数)で参照される。
【0050】
例えば、
図5に示すように、第1メモリ11(Xmemメモリ)は、Pc個の部分(メモリブロックXmem0~XmemPc-1)を含む。第3メモリ13(Jmemメモリ)は、Pc個の部分(メモリブロックJmem0~JmemPc-1)を含む。
【0051】
図13に示すように、JXモジュールJXMにおいて、「0 to Nc-1」のサイクル(第0phase)の期間内において、サイクル毎に、(0,0),(0,1),,,(0,Nc-1)のJBlockと、(0),(1),,,(Nc-1)のXBlockと、が順次入力される。Pr個のMAC演算モジュールは、第0phaseの最終サイクルの後に、(0)のABlockのデータを1つのサイクルで、並列出力する。(0)のABlockのデータは、「回路ABuf」に保持される(
図4参照)。Abuf回路は、次の第1phaseの期間において、(0)のABlockを保持し、ABlockの要素をシーケンシャルに出力することができる。その後、「Nc to 2Nc-1」のサイクル(第1phase)の期間内において、次のブロック列に相当する(1,0),(1,1),,,(1,Nc-1)のJBlockと、(0)、(1),,,(Nc-1)のXBlockと、が順次入力される。Pr個のMAC演算モジュールは、第1phaseの最終サイクルの後に、(1)の「ABlock」のデータを1つのサイクルで並列出力する。(1)の「ABlock」のデータは、Abuf回路に保持される。
【0052】
例えば、JXモジュールJXMに、Pc個のxデータと、Pc×Pr個のjデータと、が、サイクル毎に供給される。Pc個のxデータは、第1変数群{x}に含まれる。jデータは、第1パラメータ群{j}に含まれる。
【0053】
既に説明したように、Xmemメモリは、Pc個のメモリブロック(メモリブロックXmem0~XmemPc-1)に分割される(
図5参照)。これにより、1つのサイクルにおけるPc回の「read」が可能になる。Pc個のメモリブロックのそれぞれのワード長(width)は、例えば、xデータのデータビット幅以上である。Pc個のメモリブロックのそれぞれのワード数(depth)は、「Nc」以上である。Pc個のメモリブロックのそれぞれは、「1write, 1readポート」を含む。
【0054】
Pc個のメモリブロック(メモリブロックXmem0~XmemPc-1)のそれぞれは、1つの物理メモリブロックを含んでも良い。Pc個のメモリブロックのそれぞれは、複数の物理メモリブロックを含んでも良い。複数の物理メモリブロックは、互いに論理的に組み合わせられる。
【0055】
Pc個のメモリブロック(メモリブロックXmem0~XmemPc-1)のそれぞれに、対応するデータが保持される。例えば、メモリブロックXmem0には、XBlockの0行目のデータが保持される。XBlockの0行目のデータは、例えば、XBlock(0)の0行列目のデータ「x0」、及び、XBlock(1)の0行列目のデータ「xPc」を含む。例えば、メモリブロックXmem1には、XBlockの1行目のデータが保持される。XBlockの1行目のデータは、例えば、XBlock(0)の1行列目のデータ「x1」、及び、XBlock(1)の1行列目のデータ「xPc+1」を含む。
【0056】
Pc個のメモリブロック(メモリブロックXmem0~XmemPc-1)のそれぞれへの「readアクセスパターン」は、シーケンシャルアクセスである。シーケンシャルアクセスにおいては、「read addr」が、0から(Nc-1)まで、1つずつインクリメントされる。これにより、例えば、複雑なアドレス演算が不要になる。
【0057】
既に説明したように、Jmemメモリは、Pc個のメモリブロック(メモリブロックJmem0~JmemPc-1)に分割される(
図5参照)。1つのサイクルにおいて、Pc×Pr個のJデータが供給できる。Pc個のメモリブロックのそれぞれのワード長(width)は、Jデータパケット(
図4参照)に相当するデータ幅以上とする。Jデータパケットは、Pr個のJデータを含む。例えば、Jデータが1ビットの場合、Jデータパケットは、Prビットとなる。例えば、Jデータが32ビットの場合、Jデータパケットは、Pr×32ビットとなる。Pc個のメモリブロックのそれぞれは、1つのサイクルにおいて、1つのJデータパケットの「read」を実施できる。Pc個のメモリブロックのそれぞれのワード数(depth)は、Nc×Nrである。
【0058】
Pc個のメモリブロック(メモリブロックJmem0~JmemPc-1)のそれぞれに、対応するデータが保持される。例えば、メモリブロックJmem0には、JBlockの0列目のデータがJデータパケットとして、保持される。例えば、JBlock(0,0)の0列目のデータ「j0,0~jPr-1,0」がJデータパケット(0)として保持される。例えば、JBlock(0,1)の0列目のデータ「j0,Pc~jPr-1,Pc」が、Jデータパケット(1)として保持される。例えば、メモリブロックJmem1には、JBlockの1列目のデータがJデータパケットとして保持される。例えば、JBlock(0,0)の1列目のデータ「j0,1~jPr-1,1」が、Jデータパケット(0)として保持される。例えば、JBlock(0,1)の1列目のデータ「j0,Pc+1~jPr-1,Pc+1」がJデータパケット(1)として、保持される。
【0059】
Pc個のメモリブロック(メモリブロックJmem0~JmemPc-1)のそれぞれへの「readアクセスパターン」は、シーケンシャルアクセスである。シーケンシャルアクセスにおいては、「read addr」が0からNrNc-1まで、1ずつインクリメントされる。これにより、複雑なアドレス演算が不要になる。
【0060】
図4は、JXモジュールJXM、Xmemメモリ、Jmemメモリ及びAbuf回路についての接続配線の例を示している。
【0061】
Xmemメモリに含まれるPc個のメモリブロック(メモリブロックXmem0~XmemPc-1:
図5参照)の1つは、Pr個のMAC演算モジュール(MAC演算モジュールMAC0~MACPr-1)と、「ブロードキャストワイヤ」で接続される。例えば、メモリブロックXmem0から読み出されたx0データは、Pr個のMAC演算モジュールの全てに供給される。
【0062】
一方、Jmemメモリに含まれるPc個のメモリブロック(メモリブロックJmem0~JmemPc-1:
図5参照)の1つは、「point-to-pointワイヤ」で、Pr個のMAC演算モジュール(MAC演算モジュールMAC0~MACPr-1)と接続される。例えば、メモリブロックJmem0から読み出されたJデータパケット(0)は、「wire connectivity」により分解される。Jデータパケット(0)は、J0,0~JPr-1,0を含む。例えば、J0,0データは、MAC演算モジュールMAC0に転送される。例えば、J1,0データは、MAC演算モジュールMAC1に転送される。例えば、JPr-1,0データは、MAC演算モジュールMACPr-1に転送される。
【0063】
このように、計算装置120は、複数の第1配線11bc、及び、複数の第2配線13pcをさらに含んでも良い(
図4及び
図5参照)。例えば、第1パラメータ群{J}は、N×N(Nは2以上の整数)の行列を含む。第2演算モジュール22(JXモジュールJXM)において、行並列度パラメータ「Pr」及び列並列度パラメータ「Pc」が設定される。
【0064】
第2演算モジュール22(JXモジュールJXM)は、Pr個の積和モジュール22cを含む(
図4及び
図5参照)。「Pr」は、2以上でN以下の整数であり、Nの約数である。Pr個の積和モジュール22cは、Pr個のMAC演算モジュール(MAC演算モジュールMAC0~MACPr-1)にそれぞれ対応する。例えば、Pr個の積和モジュール22cの1つは、Pc個(Pcは2以上N以下の整数であり、Nの約数)の乗算器(後述)を含む。
【0065】
第1メモリ11(Xmemメモリ)は、第1メモリ11がPc個に分割されたPc個の第1メモリブロック11d(メモリブロックXmem0~XmemPc-1)を含む。第3メモリ13(Jmemメモリ)は、第3メモリ13がPc個に分割されたPc個の第3メモリブロック13d(メモリブロックJmem0~JmemPc-1)を含む。
【0066】
図4及び
図5に示すように、複数の第1配線11bcの1つは、Pc個の第1メモリブロック11dの1つと、Pr個の積和モジュール22cの全てと、を接続する。複数の第1配線11bcの別の1つは、Pc個の第1メモリブロック11dの別の1つと、Pr個の積和モジュール22cの全てと、を接続する。複数の第1配線11bcのさらに別の1つは、Pc個の第1メモリブロック11dの別の1つと、Pr個の積和モジュール22cの全てと、を接続する。例えば、「ブロードキャストワイヤ」による接続が行われる。
【0067】
一方、複数の第2配線13pcの1つは、Pc個の第3メモリブロック13dの1つと、Pr個の積和モジュール22cの1つと、を接続する。例えば、「point-to-pointワイヤ」による接続が行われる。
【0068】
図6は、MAC演算モジュールの例を示している。
図6に示すように、1つの積和モジュール22c(MAC演算モジュール)は、Pc個の乗算器MUL(乗算器MUL0~MULPc-1)を含む。さらに、「Pc対1」の加算器ツリーADDtree(「add tree」)、及び、アキュムレータACCが設けられる。Pc個の乗算器MULのそれぞれにおいて、第1変数群{x}の1つ(第1変数x
iなど)と、第1パラメータ群{J}の1つ(第1パラメータJ
i,jなど)と、の乗算が行われる。乗算の結果が、加算器ツリーADDtreeに出力される。加算器ツリーADtreeの出力が、アキュムレータACCに供給される。アキュムレータACCから、出力Aoutが出力される。
【0069】
図7(a)~
図7(c)は、乗算器MULのいくつかの例を示す。
図7(a)に示すように、1つの例において、乗算器MULは、固定小数点乗算器または浮動小数点乗算器を含む。この構成は、例えば、「Xin」及び「Jin」の両方が、「INT](符号付き固定小数点)表現、または、「Float」(符号付き浮動小数点)表現の時に使用される。
【0070】
図7(b)に示すように、1つの例において、乗算器MULは、1つの乗算器MULcと、2つの2対1マルチプレキサ(マルチプレキサMUXA及びMUCB)と、を含む。この構成は、例えば、行列Jの要素が、-1または+1の2値である時に使用される。このとき、-1または+1の2値は、0または1のビットに、符号化される。
図7(b)に示す例の乗算器MULは、乗算器の機能、及び、復号器の機能を有する。
【0071】
例えば、2対1マルチプレキサ(マルチプレキサMUXA)の制御端子に、「Jin」が接続される。マルチプレキサMUXAには、-1または+1の定数が入力される。「Jin」の値に応じて、-1または+1が出力される。
【0072】
行列Jの対角要素は、0である。2対1マルチプレキサ(マルチプレキサMUXB)には、乗算器MULcの出力及び定数0が入力される。マルチプレキサMUXBの制御端子には、制御回路40(Control Logic:
図1参照)からゼロ要素判定フラグ「(row==col)?」が供給される。行列Jの対角要素に関しては、「Jin」の値にかかわらず、マルチプレキサMUXBの出力端子から0が出力される。
【0073】
行列Jの要素が、-1または+1である場合、対角要素(すなわち、0)を考慮すると、行列Jのデータは、3値である。このため、行列Jのデータの記憶に、2ビットを使用することもできる。一方、
図7(b)に例示した構成においては、復号器付乗算器が用いられる。この場合には、行列Jのデータを1ビットで表現することができる。これにより、例えば、Jmemメモリ用のオンチップメモリの容量を小さくできる。
【0074】
実施形態において、ハードウェアが対応できる最大の問題のサイズ(N)よりも小さい問題(Nprblm: Nprblm<N)を解きたい場合、次のように対応することができる。J行列のj0,0からjNprblm-1,Nprblm-1までに解きたい問題を設定し、row>=Nprblm、col>=Nprblmの領域には、0を設定する。
【0075】
図7(b)に示す乗算器MULの場合は、マルチプレキサMUXBのゼロ要素判定フラグを「(row==col)|| (row>=Nprblm)||(col>=Nprblm)」とすれば良い。例えば、row>=Nprblm、col>=Nprblmの領域に相当する場合は、マルチプレキサMUXBから0が出力される。
【0076】
図7(c)に示すように、1つの例において、乗算器MULは、1つの乗算器MULcと、1つのデータ型変換器(「conv」)と、を含む。
図7(c)に示す例の構成は、例えば、「Xin」のデータ型と、「Jin」のデータ型と、が互いに異なるときに使用される。例えば、「Xin」が「float(/INT32)」であり、「Jin」が「INT4」であるときに、「Jin」の入力側に、データ型変換器(「conv」)が設けられる。このデータ型変換器においては、例えば、「INT4」のデータ型が「float(/INT32)」のデータ型に変換される。例えば、固定小数点の表現の複数のデータ間の変換は、ビットシフタにより実施できる。計算精度は、xデータのデータ表現に依存する。一方、「Jin」のビット数(例えば、データ型)は、目的とする問題(解くべき問題)の性質によって決定され、必ずしも高いビット精度は必要ない。
【0077】
図7(c)に例示した構成(例えば、データ型変換器付乗算器)を用いることで、例えば、高い計算精度を維持しつつ、「Jデータ」のデータ型を小さくすることができる。例えば、Jmemメモリ用のオンチップメモリの容量を小さくすることができる。
【0078】
このように、実施形態において、JXモジュールJXM(第2演算モジュール22)は、Pr個の積和モジュール22cを含む。積和モジュール22cの少なくとも1つは、復号器を含む乗算器、及び、データ型変換器を含む乗算器の少なくともいずれかを含んでも良い。
【0079】
実施形態において、JXモジュールJXMは、例えば、Ncサイクルにより、Pr個の「Aデータ」を含むABlockを計算して、出力する。この動作をNr回繰り返すことで、Jxモジュールは、N個(すなわち、Pr×Nr)のA行列を生成する。JXモジュールJXMを用いることで、例えば、第1パラメータ群{J}及び第1変数群{x}の行列積演算を、並列度が1の場合の計算速度と比較して、Pr×Pc倍に高速化できる。並列度が1のときには、Pr=Pc=1である。
【0080】
図8(a)~
図8(c)、
図9(a)、
図9(b)、
図10、
図11(a)、
図11(b)、
図12(a)及び
図12(b)は、FXFYモジュールFXFYMの例を示している。既に説明したように、FXFYモジュールFXFYM(第1演算モジュール21)は、1または複数の回路セット21Aを含む。
【0081】
図8(a)~
図8(c)において、回路セット21Aの数Mは、1である。
図8(a)に示す例において、FX関数回路FXFには、Xinが入力される。FX更新回路FXUには、FX関数回路FXFの出力と、Yinと、が入力される。FX更新回路FXUは、Youtを出力する。FY関数回路FYFには、Yinが入力される。FY更新回路FYUには、FY関数回路FYFの出力と、Xinが入力される。FY更新回路FYUは、Youtを出力する。FY関数回路FYF及びFX関数回路FXFは、
図8(b)に示す演算を行う。
図8(a)に示す回路は、
図8(c)に示す演算を行う。
【0082】
図9(a)及び
図9(b)においては、回路セット21Aの数Mは、5である。
図9(a)において、複数の内部ノード(x1~x4、及び、y1~y4)、入出力端子(Xin、Yin、Xout及びYout)の関係は、図
9(b)に示す状態となる。5つの回路セット21Aが直列(シーケンシャル)に接続される。シーケンシャル回路により、複数の更新が実施できる。
【0083】
図10においては、回路セット21Aの数Mは、5である。図
10において、複数の処理単位(パイプラインステージ)の間に、パイプラインレジスタ(レジスタreg)が設けられている。例えば、FXFYモジュールFXFYMのスループットを向上できる。図
10の例では、
18個のパイプラインレジスタが挿入される。CUT0~CUT8において、FXFY演算が10のパイプラインステージに分割される。この例では、FXFYモジュールFXFYMは、直列に接続された10ステージのパイプラインステージを含む。パイプライン化することによって、例えば、動作周波数を上昇できる。例えば、時間的なハードウェア利用効率を向上できる。スループットを向上できる。
【0084】
図11(a)及び
図11(b)においては、回路セット21Aの数Mは、1である。
図11(a)に示す例において、FY関数回路FYFには、Yinが入力される。FY更新回路FYUには、FY関数回路FYFの出力と、Xinと、が入力される。FY更新回路FYUは、Xoutを出力する。FX関数回路FXFには、FY更新回路FYUの出力が入力される。FX更新回路FXUには、FX関数回路FXFの出力と、Yinと、が入力される。FX更新回路FXUは、Youtを出力する。FX関数回路FXF及びFY関数回路F
YFは、例えば、
図8(b)に示す演算を行う。
図11(a)に示す回路は、
図11(b)に示す演算を行う。
【0085】
図12(a)及び
図12(b)においては、回路セット21Aの数Mは、5である。
図12(a)において、複数の内部ノード(x1~x4、及び、y1~y4)、入出力端子(Xin、Yin、Xout及びYout)の関係は、
図12(b)に示す状態となる。5つの回路セット21Aが直列(シーケンシャル)に接続される。シーケンシャル回路により、複数の更新が実施できる。
【0086】
図11(a)、
図11(b)、
図12(a)及び
図12(b)に示す例においても、第1演算モジュール21は、1または複数の回路セット21Aを含む。回路セット21Aは、第1演算回路21a及び第2演算回路21bを含む。第1演算回路21aは、FX関数回路FXF及びFX更新回路FXUを含む。第2演算回路21bは、FY関数回路FYF及びFY更新回路FYUを含む。FY関数回路FYFの出力は、FY更新回路FYUに入力される。FY更新回路FYUの出力は、FX関数回路F
XFに入力される。FX関数回路FXFの出力は、FX更新回路FXUに入力される。
【0087】
例えば、複数の回路セット21Aが設けられる場合は、以下となる。複数の回路セット21Aの別の1つは、別の第1演算回路21a及び別の第2演算回路21bを含む。別の第1演算回路21aは、別のFX関数回路FXF及び別のFX更新回路FXUを含む。別の第2演算回路21bは、別のFY関数回路FYF及び別のFY更新回路FYUを含む。上記の別のFY関数回路FYFの出力は、上記の別のFY更新回路FYUに入力される。上記の別のFY更新回路FYUの出力は、上記の別のFX関数回路FXFに入力される。上記の別のFX関数回路FXFの出力は、上記の別のFX更新回路FXUに入力される。上記のFY更新回路FYU(1段目)の出力は、上記の別のFY更新回路FYUに入力される。上記のFX更新回路FXU(1段目)の出力は、上記の別のFX更新回路FXU(1段目)に入力される。
【0088】
第2演算モジュール22の出力は、上記のFY関数回路FYF(1段目)、及び、上記のFX更新回路FXU(1段目)に入力される。第1メモリ11の出力は、上記のFY更新回路FYU(1段目)に入力される。
【0089】
【0090】
FXFYモジュールFXFYMは、例えば、Ncサイクル内にPr個のデータを演算する。これにより、JXモジュールJXMの動作のストールが抑制される。FXFYモジュールFXFYMのレイテンシを「Lxy」とする。「Nc>(Pr+Lxy)」の条件のときに、FXFYモジュールFXFYMの数は、1で十分である。このとき、例えば、1つのFXFYモジュールFXFYMでPr個のデータを、Ncサイクルの時間内に演算することができる。「Nc>(Pr+Lxy)」の条件が成り立たない場合、例えば、FXFYを多重化する。多重化の程度は、例えば、並列度パラメータPxyである。これにより、JXモジュールJXMの動作のストールを抑制できる。例えば、並列度パラメータPxyは、「Nc>(Pr/Pxy+Lxy)」の条件を満たす最小の整数に設定される。
【0091】
図13に示すように、Xbuf回路は、1つの「phase」において、次の「phase」においてFXFYモジュールFXFYMで用いられるデータをバッファする。次の「phase」でFXFYモジュールFXFYMで用いられるデータは、xデータ(XBlock)である。
【0092】
図2(a)に示す例において、Xmemメモリが「1readポート」を有する場合に、Xmemメモリから、Jxモジュール及びFXFYモジュールFXFYMの両方にデータを供給することが困難である。このとき、Xbuf回路において、JXモジュールJXMが動作中において、次の「phase」においてFXFYモジュールFXFYMで用いられるデータを保持する。これにより、JXモジュール及びFXFYモジュールFXFYMの両方にデータを安定して供給できる。
【0093】
図2(a)及び
図3(a)に関して既に説明したように、Xmemメモリは、例えば、「double-buffer構造」または「Ping-Pong buffer構造」を有する。例えば、Xmemの「even」に対応する部分、及び、Xmemの「odd」に対応する部分のそれぞれの役割が、「read」及び「write」で、入れ替わる。
【0094】
例えば、
図13及び
図14に示すように、第0ループにおいては、「Xmemeven」が「read」状態であり、「Xmemodd」が「write」状態である。第1ループにおいて、「Xmemodd」が「read」状態であり、「Xmemeven」が「write」状態となる。1つのループ中において、x行列は、Np回読み出される。Xmemeven及びXmemoddのうちの1つが「read」状態である。この1つは、この1つのループが終了するまで、ループの開始の前の時刻におけるxデータの値を保持し続ける。
【0095】
double buffer構造を用いることで、
図13に示すように、JXモジュールJXMの動作及びFXFYモジュールFXFYMの動作をオーバーラップさせる。これにより、高速化できる。
【0096】
1つの例において、JXモジュールJXMに主に空間並列化手法が適用される。JXモジュールJXMの速度が、Pr×Pc倍に高速化される。
【0097】
1つの例において、Xmemメモリに「double-buffer構造」が適用される。例えば、第1メモリ11に、第1メモリ部分11a及び第2メモリ部分11bが設けられる。例えば、JXモジュールJXM及びFXFYモジュールFXFYMをオーバーラップ動作させる。これにより、JXモジュールJXM及びFXFYモジュールFXFYMのトータル演算時間を短くできる。
【0098】
本実施形態によれば、例えば、最適化問題を高速に計算できる計算装置を提供できる。
【0099】
(第2実施形態)
図15は、第2実施形態に係る計算装置を例示する模式図である。
図15に示すように、本実施形態においては、JX演算及びFY演算が、Block0~3の4つの部分(Block)に分割されて行われる。
【0100】
このBlockは、ABlock及びJBlockよりも大きい。1つのBlockは、複数のABlock及び複数のJBlockを含む。
【0101】
図16は、第2実施形態に係る計算装置を例示する模式図である。
図16に示す例において、例えば、1つの半導体チップ内に、複数のJXFXFYモジュールJXFXFYMが設けられる(チップ内分割)。複数のJXFXFYモジュールJXFXFY
Mの1つは、Xmemと、Ymemと、Jmemと、JXモジュールJXMと、及び、FXFYモジュールFXFYMを含む。JXFXY0の、Xmem0、Ymem0及びJmem0は、BLOCK0に含まれる、X_B0データ、Y_B0データ、及び、J_B0データをそれぞれ保持する。JXFXY3の、Xmem3、Ymem3及びJmem3は、BLOCK3に含まれる、X_B3データ、Y_B3データ、及び、J_B3データをそれぞれ保持する。複数のJXFXFYモジュールJXFXFYMが、同時並列的に、複数のBlockにおける演算を行う。
【0102】
例えば、1つのControl Logic回路と、1つのX’memメモリ(グローバルメモリ)と、が設けられる。これらの回路及びメモリは、4つのJXFXFYモジュールに接続される。Control Logic回路及びX’memメモリは、4つのJXFXFYモジュールによって、共有される。X’memメモリの出力(read)ポートは、4つのJXFXFYモジュールと、ブロードキャストワイヤで接続される。X’memメモリの内部は、X’_B0~X’_B3のブロックに分割される。例えば、X’memメモリが、種々の粒度に分割される。例えば、JXFXFY0の出力は、X’_B0に接続される。JXFXFY1の出力は、X’_B1に接続される。これにより、4つのJXFXFYモジュールの出力を、同時にX’memメモリに書き込むことができる。例えば、X’memメモリを分割することで、writeポートを増やすことができる。
【0103】
図17は、第2実施形態に係る計算装置を例示する模式図である。
図17に示す例では、複数の半導体チップに、JXFXFYモジュールが設けられる(マルチチップ実装)。複数の半導体チップは、相互接続配線により、互いに接続される。例えば、Chip0~Chip3が設けられる。これらのチップのそれぞれに、第1メモリ11(Xmemメモリ及びX’memメモリ)、第2メモリ12(Ymemメモリ)、第3メモリ13(Jmemメモリ)、JXモジュールJXM、FXFYモジュールFXFYM、及び、Control Logic回路が設けられる。
【0104】
Chip0~3とは別に、モジュール(Join&Map)が設けられても良い。モジュール(Join&Map)は、各チップからの出力を統合(join)し、再度、各チップへ配布(Map)する。
【0105】
Chip0は、X’mem0、Xmem0、Ymem0及びJmem0を含む。Chip0の、Xmem0、Ymem0及びJmem0は、BLOCK0に含まれる、X_B0データ、Y_B0データ及びJ_B0データを保持する。Chip0の、X’memは、BLOCK0~3に含まれる、X_B0~3データにdt*cを乗じたデータ(X’_B0~3)を保持する。
【0106】
Chip0は、1ループにおいて、BLOCK0のXデータ(X_B0)、及び、Yデータ(Y_B0)の更新を行い、その結果を、Chip0の内部のXmem0及びYmem0に書き戻す。また、Chip0は、更新後のX_B0にdt*cを乗じたデータX’_BOをX’outbufにバッファリングした後に、チップ外に出力する。
【0107】
Chip3は、1ループにおいて、BLOCK3のXデータ(X_B3)及びYデータ(Y_B3)の更新を行い、その結果を、Chip3の内部のXmem3及びYmem3に書き戻す。Chip3は、更新後のX_B3にdt*cを乗じたデータX’_B3を、X’outbufにバッファリングした後に、チップ外に出力する。
【0108】
Join&Mapは、各チップから出力された、X’_B0、X’_B1、X’_B03、及び、X’_B03を統合し、それらを全チップにブロードキャストする。各チップは、Join&Mapから配布されたX’データを受け取り、X’memに格納する。
【0109】
図18(a)及び
図18(b)は、第2実施形態に係る計算装置を例示する模式図である。
これらの図は、複数のチップの相互接続配線による接続に関するいくつかの例を示している。相互接続配線には、BUS接続及びクロスバが含まれる。
【0110】
図18(a)に示すように、複数のチップ(回路部60:第1~第4回路部61~64)はBUS接続68bにより接続されても良い。
図18(a)に示す例の場合、複数の回路部60は、「HOST」(例えば制御回路40)と通信しても良い。例えば、「HOST制御」が行われる。または、複数の回路部60は、互いに、直接通信しても良い。例えば、「ダイレクト通信」が行われても良い。「HOST制御」の場合、「HOST」が、「Join」及び「Map」の演算を行っても良い。「ダイレクト通信」の場合は、各チップがX’Blockデータをブロードキャストし、その他のチップがそのデータを受信し、X'memに格納する.このように各チップが互いに通信することによって、Join&とMapの機能が実現される。
【0111】
図18(b)に示すように、複数の回路部60は、クロスバ68cにより接続されても良い。
図18(b)に示す例の場合、複数の回路部60(複数のチップ)は、複数の回路部60どうしが相互通信するためのパケット制御機構(ルーター)を含む。複数の回路部60の1つは、XBlockデータを、複数の回路部60の別の少なくとも1つに、ブロードキャストする。これにより、複数の回路部60において、xデータが共有される。
【0112】
図19(a)~
図19(f)は、実施形態に係る計算装置の動作を例示する模式図である。
図19(a)の例においては、JX演算の後で、FXFY演算が行われる。
【0113】
図19(b)の例においては、JX演算の並列演算が行われる。JX演算が高速化できる。
【0114】
図19(c)の例においては、JXモジュールJXMとFXFYモジュールFXFYMとが、互いにオーバーラップして動作する。これにより、演算が高速化できる。
【0115】
図19(d)の例においては、JX演算が並列に行われる。JX演算が高速化する。
【0116】
図19(e)の例においては、FXFYモジュールFXFYMが並列化(多重化)される。さらに、JXモジュールJXMとFXFYモジュールFXFYMとが、互いにオーバーラップして動作する。これにより、演算が高速化できる。
【0117】
図19(f)の例においては、ブロック並列演算が行われる。チップ内分割及びマルチチップ実装の少なくともいずれかが行われる。これにより、演算が高速化できる。
【0118】
図20は、実施形態に係る計算装置を含む情報処理装置を例示する模式図である。
図20に示すように、情報処理装置210は、計算装置120を含む。この例では、情報処理装置
210に、複数の計算装置120が設けられる。シリアルリンク73は、例えば、複数の計算装置120を相互に接続する。
【0119】
計算装置120は、情報処理装置210の一部として使用される。情報処理装置の1つの例において、例えば、サーバーに、計算装置120を含むアクセラレータカード75が設けられる。サーバーは、一般的なサーバーでも良い。アクセラレータカード75は、計算装置120の他に、メモリ76を含んでも良い。情報処理装置210は、例えば、中央処理装置(CPU)、メインメモリ、記憶装置(SDD)、及び、複数のアクセラレータカード75を含む。これらは、システムバスに接続される。例えば、計算装置120のバスインターフェース74がシステムバスと接続される。
【0120】
図21~
図28は、実施形態に係る計算装置の動作を例示するフローチャート図である。実施形態に係る計算装置は、例えば、これらの図に示す演算を実施できる。
【0121】
実施形態は、以下の構成(技術案)を含んでも良い。
(構成1)
第1メモリと、
第2メモリと、
第3メモリと、
第1演算モジュールと、
第2演算モジュールと、
を備え、
前記第1メモリの出力端子は、前記第1演算モジュールの入力端子に接続され、
前記第1メモリの前記出力端子は、前記第2演算モジュールの入力端子に接続され、
前記第2メモリの出力端子は、前記第2演算モジュールの入力端子に接続され、
前記第3メモリの出力端子は、前記第2演算モジュールの入力端子に接続され、
前記第2演算モジュールの出力端子は、前記第1演算モジュールの入力端子に接続される、計算装置。
(構成2)
前記第2演算モジュールは、JX関数回路及びJX更新回路を含み、
記第1メモリの前記出力端子及び前記第3メモリの前記出力端子は、前記JX関数回路の入力端子に接続され、
前記JX関数回路の出力端子及び前記第2メモリの前記出力端子は、前記JX更新回路の入力端子に接続され、
前記JX更新回路の出力端子は、前記第1演算モジュールの入力端子に接続される、構成1記載の計算装置。
(構成3)
前記第1演算モジュールは、1または複数の回路セットを含み、
前記回路セットは、第1演算回路及び第2演算回路を含み、
前記第1演算回路は、FX関数回路及びFX更新回路を含み、
前記第2演算回路は、FY関数回路及びFY更新回路を含み、
前記FX関数回路の出力端子は、前記FX更新回路の入力端子に接続され、
前記FX更新回路の出力端子は、前記FY関数回路の入力端子に接続され、
前記FY関数回路の出力端子は、前記FY更新回路の入力端子に接続される、構成1または2に記載の計算装置。
(構成4)
前記第1演算モジュールは、モジュール入力端子1とモジュール入力端子2とモジュール出力端子1とモジュール出力端子2を含み、
前記モジュール入力端子1は前記FX関数回路の入力端子と前記FY更新回路の入力端子とに接続され、
前記モジュール入力端子2は前記FX更新回路の入力端子に接続され、
前記モジュール出力端子1は前記FY更新回路の出力端子に接続され、
前記モジュール出力端子2は前記FX更新回路の出力端子に接続され、
構成3記載の計算装置。
(構成5)
前記複数の回路セットが設けられ、
前記複数の回路セットの別の1つは、別の第1演算回路及び別の第2演算回路を含み、
前記別の第1演算回路は、別のFX関数回路及び別のFX更新回路を含み、
前記別の第2演算回路は、別のFY関数回路及び別のFY更新回路を含み、
前記別のFX関数回路の出力端子は、前記別のFX更新回路の入力端子に接続され、
前記別のFX更新回路の出力端子は、前記別のFY関数回路の入力端子に接続され、
前記別のFY関数回路の出力端子は、前記別のFY更新回路の入力端子に接続され、
前記FX更新回路の前記出力端子は、前記別のFX更新回路の入力端子に接続され、
前記FY更新回路の出力端子は、前記別のFX関数回路の入力端子と前記別のFY更新回路の入力端子とに接続される、構成4記載の計算装置。
(構成6)
前記第1演算モジュールは、1または複数の回路セットを含み、
前記回路セットは、第1演算回路及び第2演算回路を含み、
前記第1演算回路は、FX関数回路及びFX更新回路を含み、
前記第2演算回路は、FY関数回路及びFY更新回路を含み、
前記FY関数回路の出力端子は、前記FY更新回路の入力端子に接続され、
前記FY更新回路の出力端子は、前記FX関数回路の入力端子に接続され、
前記FX関数回路の出力端子は、前記FX更新回路の入力端子に接続される、構成1または2に記載の計算装置。
(構成7)
前記第1演算モジュールは、モジュール入力端子1とモジュール入力端子2とモジュール出力端子1とモジュール出力端子2を含み、
前記モジュール入力端子1は前記FY更新回路の入力端子に接続され、
前記モジュール入力端子2は前記FY関数回路の入力端子と前記FX更新回路の入力端子とに接続され、
前記モジュール出力端子1は前記FY更新回路の出力端子に接続され、
前記モジュール出力端子2は前記FX更新回路の出力端子に接続され、
構成6記載の計算装置。
(構成8)
前記複数の回路セットが設けられ、
前記複数の回路セットの別の1つは、別の第1演算回路及び別の第2演算回路を含み、
前記別の第1演算回路は、別のFX関数回路及び別のFX更新回路を含み、
前記別の第2演算回路は、別のFY関数回路及び別のFY更新回路を含み、
前記別のFY関数回路の出力端子は、前記別のFY更新回路の入力端子に接続され、
前記別のFY更新回路の出力端子は、前記別のFX関数回路の入力端子に接続され、
前記別のFX関数回路の出力端子は、前記別のFX更新回路の入力端子に接続され、
前記FX更新回路の前記出力端子は、前記別のFY関数回路の入力端子と前記別のFX更新回路の入力端子に接続され、
前記FY更新回路の出力端子は、前記別のFY更新回路の入力端子に接続される、構成6記載の計算装置。
(構成9)
前記第2演算モジュールの前記出力は、前記FX更新回路に入力され、
前記第1メモリの前記出力は、前記FY更新回路に入力される、構成3~8のいずれか1つに記載の計算装置。
(構成10)
前記第1演算モジュールの出力端子の一部は、前記第1メモリの入力端子に接続され、
前記第1演算モジュールの出力端子の別の一部は、前記第2メモリの入力端子に接続される、構成1~9のいずれか1つに記載の計算装置。
(構成11)
前記第1メモリは、第1メモリ部分と、第2メモリ部分と、を含み、
前記第1メモリ部分が読み出し動作を実施している時に、前記第2メモリ部分が書き込み動作を実施し、
前記第2メモリ部分が読み出し動作を実施している時に、前記第1メモリ部分が書き込み動作を実施する、構成1~10のいずれか1つに記載の計算装置。
(構成12)
前記第1メモリは、第1変数群{x}を保持し、
前記第2メモリは、第2変数群{y}を保持し、
前記第3メモリは、第1パラメータ群{J}を保持し、
前記第1変数群{x}は、N個(前記Nは2以上の整数)のi番目(iは1以上前記N以下の整数)の第1変数xiを含み、
前記第2変数群{y}は、前記N個のi番目(iは1以上前記N以下の整数)の第2変数yiを含み、
前記第1パラメータ群{J}は、N×N個の第1パラメータJl,m(前記lは1以上前記N以下の整数であり、前記mは1以上前記N以下の整数)を含み、
前記第1演算モジュールは、第1変数更新及び第1サブ更新を実施し、
前記第2演算モジュールは、第2サブ更新を実施し、
前記第1変数更新は、前記i番目の前記第1変数xiを前記i番目の前記第2変数yiに基づいて更新することを含み、
前記第1サブ更新は、前記i番目の前記第2変数yiを前記i番目の前記第1変数xiに基づいて更新することを含み、
前記第2サブ更新は、前記i番目の前記第2変数yiを前記第1パラメータ群{J}の少なくとも一部及び前記第1変数群{x}の少なくとも一部に基づいて更新することを含む、構成1~11のいずれか1つに記載の計算装置。
(構成13)
前記第2演算モジュールは複数の乗算器を備え、
前記第2サブ更新に含まれる前記第1パラメータ群{J}の少なくとも一部及び前記第1変数群{x}の少なくとも一部に基づいて行う更新に含まれる乗算の内複数を、同一クロックにおいて実施する、構成12記載の計算装置。
(構成14)
複数の第1配線、及び、複数の第2配線をさらに備え、
前記第1パラメータ群{J}は、N×N(Nは2以上の整数)の行列を含み、
前記第2演算モジュールは、Pr個(Prは2以上前記N以下の整数であり、前記Nの約数)の積和モジュールを含み、前記Pr個の積和モジュールの1つは、Pc個(Pcは2以上N以下の整数であり、前記Nの約数)の乗算器を含み、前記Prは、前記行列の行の並列度に対応し、前記Pcは、前記行列の列の並列度に対応し、
前記第1メモリは、前記第1メモリが前記Pc個に分割された前記Pc個の第1メモリブロックを含み、
前記第3メモリは、前記第3メモリが前記Pc個に分割された前記Pc個の第3メモリブロックを含み、
前記複数の第1配線の1つは、前記Pc個の前記第1メモリブロックの1つと、前記Pr個の前記積和モジュールの全てと、を接続し、
前記複数の第1配線の別の1つは、前記Pc個の前記第1メモリブロックの別の1つと、前記Pr個の前記積和モジュールの別の全てと、を接続し、
前記複数の第2配線の1つは、前記Pc個の前記第3メモリブロックの1つと、前記Pr個の前記積和モジュールの1つと、を接続し、
前記複数の第2配線の別の1つは、前記Pc個の前記第3メモリブロックの前記1つと、前記Pr個の前記積和モジュールの別の1つと、を接続する、構成12または13に記載の計算装置。
(構成15)
前記Pr個の前記積和モジュールの少なくとも1つは、復号器を含む乗算器、及び、データ型変換器を含む乗算器の少なくともいずれかを含む、構成14記載の計算装置。
(構成16)
第1グローバルメモリと、第0モジュールと、第1モジュールと、を備え、
前記第0モジュールは、
第01メモリと、
第02メモリと、
第03メモリと、
第01演算モジュールと、
第02演算モジュールと、
を含み、
前記第01メモリの出力端子は、前記第01演算モジュールの入力端子に接続され、
前記第1グローバルメモリの出力端子は、前記第02演算モジュールの入力端子に接続され、
前記第02メモリの出力端子は、前記第02演算モジュールの入力端子に接続され、
前記第03メモリの出力端子は、前記第02演算モジュールの入力端子に接続され、
前記第02演算モジュールの出力端子は、前記第01演算モジュールの入力端子に接続され、
前記第01演算モジュールの出力端子の一部は、前記第01メモリの入力端子と前記第1グローバルメモリの入力端子とに接続され、
第1モジュールは、
第11メモリと、
第12メモリと、
第13メモリと、
第11演算モジュールと、
第12演算モジュールと、
を含み、
前記第11メモリの出力端子は、前記第11演算モジュールの入力端子に接続され、
前記第1グローバルメモリの出力端子は、前記第12演算モジュールの入力端子に接続され、
前記第12メモリの出力端子は、前記第12演算モジュールの入力端子に接続され、
前記第13メモリの出力端子は、前記第12演算モジュールの入力端子に接続され、
前記第12演算モジュールの出力端子は、前記第11演算モジュールの入力端子に接続され、
前記第11演算モジュールの出力端子の一部は、前記第11メモリの入力端子と前記第1グローバルメモリの入力端子とに接続される、計算装置。
(構成17)
第0チップと、第1チップと、相互接続配線と、を備え、
前記第0チップは、
第01メモリと、
第02メモリと、
第03メモリと、
第01演算モジュールと、
第02演算モジュールと、
第0チップ入力端子と、
第0チップ出力端子と、
を含み、
前記第01メモリは、第01ローカルメモリと第01グローバルメモリとを含み、
前記第01ローカルメモリの出力端子は、前記第01演算モジュールの入力端子に接続され、
前記第01グローバルメモリの出力端子は、前記第02演算モジュールの入力端子に接続され、
前記第02メモリの出力端子は、前記第02演算モジュールの入力端子に接続され、
前記第03メモリの出力端子は、前記第02演算モジュールの入力端子に接続され、
前記第02演算モジュールの出力端子は、前記第01演算モジュールの入力端子に接続され、
前記第01演算モジュールの出力端子の一部は、前記第01ローカルメモリの入力端子 と前記第0チップ出力端子とに接続され、
前記第0チップ入力端子は、前記第01グローバルメモリの入力端子に接続され、
前記第0チップ入力端子と前記第0チップ出力端子とは前記相互接続配線に接続され、
前記1チップは、
第11メモリと、
第12メモリと、
第13メモリと、
第11演算モジュールと、
第12演算モジュールと、
第1チップ入力端子と、
第1チップ出力端子と、
を含み、
前記第11メモリは、第11ローカルメモリと第11グローバルメモリとを含み、
前記第11ローカルメモリの出力端子は、前記第11演算モジュールの入力端子に接続され、
前記第11グローバルメモリの出力端子は、前記第12演算モジュールの入力端子に接続され、
前記第12メモリの出力端子は、前記第12演算モジュールの入力端子に接続され、
前記第13メモリの出力端子は、前記第12演算モジュールの入力端子に接続され、
前記第12演算モジュールの出力端子は、前記第11演算モジュールの入力端子に接続され、
前記第11演算モジュールの出力端子の一部は、前記第11ローカルメモリの入力端子と前記第1チップ出力端子とに接続され、
前記第1チップ入力端子は、前記第11グローバルメモリの入力端子に接続され、
前記第0チップ入力端子と前記第0チップ出力端子と前記第1チップ入力端子と前記第1チップ出力端子とは前記相互接続配線に接続される、計算装置。
【0122】
実施形態によれば、最適化問題を高速に計算できる計算装置が提供できる。
【0123】
以上、例を参照しつつ、本発明の実施の形態について説明した。しかし、本発明は、これらの例に限定されるものではない。例えば、計算装置に含まれるメモリ、及び演算モジュールなどの各要素の具体的な構成に関しては、当業者が公知の範囲から適宜選択することにより本発明を同様に実施し、同様の効果を得ることができる限り、本発明の範囲に包含される。
【0124】
各例のいずれか2つ以上の要素を技術的に可能な範囲で組み合わせたものも、本発明の要旨を包含する限り本発明の範囲に含まれる。
【0125】
本発明の実施の形態として上述した計算装置を基にして、当業者が適宜設計変更して実施し得る全ての計算装置も、本発明の要旨を包含する限り、本発明の範囲に属する。
【0126】
本発明の思想の範疇において、当業者であれば、各種の変更例及び修正例に想到し得るものであり、それら変更例及び修正例についても本発明の範囲に属するものと了解される。
【0127】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0128】
10…保持部、 11…第1メモリ、 11a、11b…第1、第2メモリ部分、 11bc…第1配線、 11d…第1メモリブロック、 12…第2メモリ、 13…第3メモリ、 13d…第3メモリブロック、 13pc…第2配線、 20…演算部、 21…第1演算モジュール、 21A…回路セット、 21a、21b…第1、第2演算回路、 22…第2演算モジュール、 22c…積和モジュール、 24…バッファ回路、 40…制御回路、 40s…制御信号、 60…回路部、 61~64…第1~第4回路部、 68b…BUS接続、 68c…クロスバ、 71…インターフェース回路、 72…初期値生成回路、 73…シリアルリンク、 74…バスインターフェース、 75…アクセラレータカード、 76…メモリ、 120…計算装置、 210…情報処理装置、 ACC…アキュムレータ、 ADDtree…加算器ツリー、 Aout…出力、 FXF…FX関数回路、 FXFYM……FXFYモジュール、 FXU…FX更新回路、 FYF…FY関数回路、 FYU…FY更新回路、 JXF…JX関数回路、 JXM…JXモジュール、 JXU…JX更新回路、 Jmem0~JmemPc…メモリブロック、 M…数、 MAC0~MACPr…演算モジュール、 MUL、MUL0~MULPr、MULc…乗算器、 MUXA、MUXB…マルチプレキサ、 Xmem0~XmemPc…メモリブロック、 reg…レジスタ