(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025006743
(43)【公開日】2025-01-17
(54)【発明の名称】演算装置
(51)【国際特許分類】
G06F 17/10 20060101AFI20250109BHJP
【FI】
G06F17/10 Z
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2023107725
(22)【出願日】2023-06-30
(71)【出願人】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(71)【出願人】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(71)【出願人】
【識別番号】520124752
【氏名又は名称】株式会社ミライズテクノロジーズ
(74)【代理人】
【識別番号】110000028
【氏名又は名称】弁理士法人明成国際特許事務所
(72)【発明者】
【氏名】関 直樹
(72)【発明者】
【氏名】笹田 裕太
(72)【発明者】
【氏名】滝澤 哲郎
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056FF01
5B056FF02
5B056FF04
5B056FF07
5B056FF08
5B056FF16
(57)【要約】
【課題】数論変換をより高速に実行可能な演算装置を提供する。
【解決手段】数論変換を行うための演算装置100は、2つの入力データのバタフライ演算を行うように構成された演算コアを並列に複数備え、数論変換のバタフライ演算の特定のステージの演算を実行し、4つ以上の入力データと同数の出力データを出力する演算コアグループであって、異なるステージの演算を実行する複数の演算コアグループを、ステージの実行される順に直列に備える演算部40と、演算コアグループから出力された出力データを予め定められた順番に並び替えた並び替えデータを生成し、並び替えデータを、出力データを出力した演算コアグループの直後の演算コアグループに入力データとして入力する、並び替え部と、を備え、演算部は、それぞれの演算コアグループで、異なるステージの演算を並列に実行する。
【選択図】
図13
【特許請求の範囲】
【請求項1】
数論変換を行うための演算装置(100)であって、
2つの入力データのバタフライ演算を行うように構成された演算コアを並列に複数備え、数論変換のバタフライ演算の特定のステージの演算を実行し、4つ以上の前記入力データと同数の出力データを出力する演算コアグループであって、
異なる前記ステージの演算を実行する複数の前記演算コアグループを、前記ステージの実行される順に直列に備える演算部(40,41)と、
前記演算コアグループから出力された前記出力データを予め定められた順番に並び替えた並び替えデータを生成し、前記並び替えデータを、前記出力データを出力した前記演算コアグループの直後の前記演算コアグループに前記入力データとして入力する、並び替え部(30)と、を備え、
前記演算部は、それぞれの前記演算コアグループで、異なる前記ステージの演算を並列に実行する、
演算装置。
【請求項2】
請求項1に記載の演算装置であって、
前記出力データまたは前記並び替えデータを一時的に記憶するバッファを備え、
前記演算コアグループは、前記バッファに前記出力データを出力し、
前記並び替え部は、前記バッファから前記出力データを取得し、生成した前記並び替えデータを前記バッファに出力し、
前記出力データを出力した前記演算コアグループの直後の前記演算コアグループは、前記バッファから前記並び替えデータを前記入力データとして取得する、
演算装置。
【請求項3】
請求項2に記載の演算装置であって、
前記並び替え部は、
前記順番が定義された順番データに従い前記並び替えデータを生成する生成部(31)を備え、
DMA(Direct Memory Access)機能を用いて前記出力データを前記バッファから前記生成部に転送し、
前記DMA機能を用いて前記並び替えデータを前記生成部から前記バッファに転送する、
演算装置。
【請求項4】
請求項1に記載の演算装置であって、
前記演算コアは、
1つの前記入力データである第1入力データが入力される第1入力部(81)と、
前記第1入力データとは異なる1つの前記入力データである第2入力データが入力される第2入力部(82)と、
入力された値に予め定められた係数を乗算した値を出力する乗算器(83)と、
1つの前記出力データである第1出力データを出力する第1出力部(84)と、
前記第1出力データとは異なる1つの前記出力データである第2出力データを出力する第2出力部(85)と、を備え、
前記第1出力部は、前記第1入力データと前記第2入力データを加算した値を前記第1出力データとして出力し、
前記第2出力部は、前記第1入力データから前記第2入力データを減算した値に、前記係数を乗算した値を、前記第2出力データとして出力する、
演算装置。
【請求項5】
請求項1に記載の演算装置であって、
前記入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータである、
演算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、演算装置に関する。
【背景技術】
【0002】
例えば、特許文献1には、耐量子計算機暗号の演算を高速に実行可能なコプロセッサが開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2022/0171885号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
耐量子計算機暗号の一つである格子暗号の演算では数論変換が実行されるが、数論変換は演算量が多く、完了までに時間がかかる。そのため、数論変換をより高速に実行可能な演算装置が望まれている。
【課題を解決するための手段】
【0005】
本開示は、以下の形態として実現することが可能である。
【0006】
本開示の一形態によれば、数論変換を行うための演算装置(100)が提供される。この演算装置は、2つの入力データのバタフライ演算を行うように構成された演算コアを並列に複数備え、数論変換のバタフライ演算の特定のステージの演算を実行し、4つ以上の前記入力データと同数の出力データを出力する演算コアグループであって、異なる前記ステージの演算を実行する複数の前記演算コアグループを、前記ステージの実行される順に直列に備える演算部(40,41)と、前記演算コアグループから出力された前記出力データを予め定められた順番に並び替えた並び替えデータを生成し、前記並び替えデータを、前記出力データを出力した前記演算コアグループの直後の前記演算コアグループに前記入力データとして入力する、並び替え部(30)と、を備え、前記演算部は、それぞれの前記演算コアグループで、異なる前記ステージの演算を並列に実行する。
【0007】
この形態によれば、演算装置は、数論変換を実行する際に、それぞれの演算コアグループで数論変換のバタフライ演算の異なるステージを並列に実行する。そのため、数論変換のバタフライ演算の異なるステージを並列に実行しない場合と比べて、数論変換をより高速に実行できる。
【図面の簡単な説明】
【0008】
【
図1】第1実施形態における演算装置の概略構成を示す説明図。
【
図2】第1実施形態におけるデータの流れを説明する図。
【
図3】第1実施形態における第1演算コアグループの概略構成を示す説明図。
【
図5】第1実施形態における第2演算コアグループの概略構成を示す説明図。
【
図6】第1実施形態における第3演算コアグループの概略構成を示す説明図。
【
図7】8個のデータの数論変換のバタフライ演算を説明する図。
【
図8】第1実施形態における数論変換処理の工程図。
【
図9】第1実施形態における各演算コアの入力データと出力データを説明する図。
【
図10】第1実施形態におけるステージ1のNTT演算処理の工程図。
【
図11】第1実施形態におけるステージ2のNTT演算処理の工程図。
【
図12】第1実施形態におけるステージ3のNTT演算処理の工程図。
【
図13】第1実施形態におけるパイプライン処理の例のタイムチャートを示す図。
【
図14】第2実施形態におけるデータの流れを説明する図。
【
図15】第2実施形態における第1演算コアグループの概略構成を示す説明図。
【
図16】第2実施形態における第2演算コアグループの概略構成を示す説明図。
【
図17】第2実施形態における第3演算コアグループの概略構成を示す説明図。
【
図18】第2実施形態における第4演算コアグループの概略構成を示す説明図。
【
図19】16個のデータの数論変換のバタフライ演算を説明する図。
【
図20】第2実施形態における数論変換処理の工程図。
【
図21】第2実施形態のステージ1のNTT演算における各演算コアの入力データと出力データを説明する図。
【
図22】第2実施形態のステージ2のNTT演算における各演算コアの入力データと出力データを説明する図。
【
図23】第2実施形態におけるステージ3のNTT演算処理の工程図。
【
図24】第2実施形態のステージ3のNTT演算における各演算コアの入力データと出力データを説明する図。
【
図26】ステージ4のNTT演算における各演算コアの入力データと出力データを説明する図。
【
図27】第2実施形態におけるパイプライン処理の例のタイムチャートを示す図。
【
図28】8個のデータの逆数論変換のバタフライ演算を説明する図。
【
図29】逆数論変換のバタフライ演算のパイプライン処理の例のタイムチャートを示す図。
【発明を実施するための形態】
【0009】
A.第1実施形態:
図1に示す演算装置100は、数論変換を行うための装置である。演算装置100は、数論変換のバタフライ演算を行うことで、データの暗号化または復号を行う。数論変換を、NTT(Number Theoretic Transform)とも呼ぶ。演算装置100は、CPU10と、メモリ20と、並び替え部30と、演算部40と、を備える。
【0010】
メモリ20には、数論変換のバタフライ演算によって暗号化または復号が行われるデータに含まれるデータが記憶される。数論変換のバタフライ演算によって暗号化または復号が行われるデータは、例えば、演算装置100を備えるパーソナルコンピュータやタブレット等が実行するプログラムの正当性を検証するための認証データに含まれるデータである。上述したデータは、演算装置100を備えるパーソナルコンピュータやタブレット等が、サーバ等の通信装置に接続する場合に、通信装置の正当性を検証するための認証データに含まれるデータであってもよい。メモリ20は、SRAM(Static Random Access Memory)として構成されている。なお、メモリ20は、DRAM(Direct Random Access Memory)や不揮発性メモリ等でもよい。メモリ20を記憶部とも呼ぶ。
【0011】
並び替え部30には、順番データが記憶されている。順番データは、メモリ20から取得したデータ、および、後述する演算部40から出力された出力データの、並び替えの順番が定義されたデータである。並び替え部30には、複数の順番データ、すなわち、複数種類の並び替えの順番が記憶されている。順番データは、更新、追加、および削除することが可能である。また、並び替え部30は、順番データに従い並び替えデータを生成する生成部31を備える。ここで、並び替えデータは、メモリ20から取得したデータまたは出力データを、予め定められた順番に並び替えたデータである。すなわち、並び替え部30は、メモリ20から取得したデータまたは出力データを、予め定められた順番に並び替える。また、並び替え部30は、DMA(Direct Memory Access)機能を有する。並び替え部30は、例えば、DMAコントローラを有することで、DMA機能を実現する。並び替え部30は、DMA機能を用いることで、並び替え部30とメモリ20の間、および、並び替え部30と演算部40の間で、CPU10を介さずにデータの転送を行う。並び替え部30は、FPGA(Field Programmable Gate Array)やASIC(Application Specific Integrated Circuit)などの回路によって実現される。
【0012】
図2に示すように、演算部40は、第1バッファ50と、第1演算コアグループ51と、第2バッファ52と、第3バッファ60と、第2演算コアグループ61と、第4バッファ62と、第5バッファ70と、第3演算コアグループ71と、第6バッファ72と、を備える。第1バッファ50と、第3バッファ60と、第5バッファ70は、並び替えデータを一時的に記憶する。第2バッファ52と、第4バッファ62と、第6バッファ72は、出力データを一時的に記憶する。以下において各バッファを区別なく呼ぶときは、単にバッファと呼ぶ。すなわち、バッファは、出力データまたは並び替えデータを一時的に記憶する。
【0013】
並び替え部30は、
図2に示すように、並び替え部30とメモリ20の間、および、並び替え部30と演算部40の間でデータの転送を行う。並び替え部30は、並び替え部30とバッファの間でデータの転送を行うことにより、並び替え部30と演算部40の間でデータの転送を行う。具体的には、並び替え部30は、DMA機能を用いて並び替えデータを生成部31から第1バッファ50、第3バッファ60、および第5バッファ70に転送する。また、並び替え部30は、DMA機能を用いて出力データを第2バッファ52、第4バッファ62、および第6バッファ72から生成部31に転送する。
【0014】
第1演算コアグループ51は、
図3に示すように、第1演算コア53と、第2演算コア54と、第3演算コア55と、第4演算コア56と、を備える。第1演算コア53は、2つの入力データの数論変換のバタフライ演算を行うように構成されている。第1演算コア53は、FPGAやASICなどの回路によって実現される。
【0015】
第1演算コア53は、
図4に示すように、第1入力部81と、第2入力部82と、乗算器83と、第1出力部84と、第2出力部85と、を備える。第1入力部81には、1つの入力データである第1入力データが入力される。第2入力部82には、第1入力データとは異なる1つの入力データである第2入力データが入力される。乗算器83には、予め定められた係数が入力される。乗算器83は、乗算器83に入力された値に予め定められた係数を乗算した値を出力する。第1出力部84は、1つの出力データである第1出力データを出力する。第2出力部85は、第1出力データとは異なる1つの出力データである第2出力データを出力する。
【0016】
第1出力部84は、第1入力データと第2入力データを加算した値を第1出力データとして出力する。第2出力部85は、第1入力データから第2入力データを減算した値に、乗算器83に入力される係数を乗算した値を、第2出力データとして出力する。すなわち、第1演算コア53は、第1入力部81に入力される値と、第2入力部82に入力される値と、乗算器83に入力される係数との間で行われるバタフライ演算の結果を、第1出力部84および第2出力部85から出力する。第1入力部81に値Aが入力され、第2入力部82に値Bが入力され、乗算器83に係数Cが入力された場合、第1出力部84は値Xを出力し、第2出力部85は値Yを出力する。ここで、値Xと値Yは、それぞれ以下の式(1)と式(2)で表される。
X=A+B・・・式(1)
Y=(A-B)×C・・・式(2)
【0017】
第2演算コア54と、第3演算コア55と、第4演算コア56は、第1演算コア53と同じ構成である。そのため、これらの詳細な説明は省略する。
【0018】
第2演算コアグループ61は、
図5に示すように、第5演算コア63と、第6演算コア64と、第7演算コア65と、第8演算コア66と、を備える。第3演算コアグループ71は、
図6に示すように、第9演算コア73と、第10演算コア74と、第11演算コア75と、第12演算コア76と、を備える。第5演算コア63から第12演算コア76は、第1演算コア53と同じ構成である。そのため、これらの詳細な説明は省略する。以下において各演算コアを区別なく呼ぶときは、単に、演算コアと呼ぶ。上述したように、演算部40は、同一の演算コアを複数備える。また、各演算コアグループを区別なく呼ぶときは、単に、演算コアグループと呼ぶ。本実施形態では、演算コアグループは、4つの演算コアを並列に備える。また、演算部40は、3つの演算コアグループを直列に備える。第2演算コアグループ61は第1演算コアグループ51の直後に設けられ、第3演算コアグループ71は第2演算コアグループ61の直後に設けられている。
【0019】
本実施形態では、各演算コアグループには、8個の入力データが入力される。8個の入力データは、各演算コアの第1入力部81と第2入力部82に、それぞれ1つずつ入力される。また、各演算コアグループは、入力データと同数の出力データを出力する。各演算コアグループは、各演算コアの第1出力部84と第2出力部85から、出力データをそれぞれ1つずつ出力する。
【0020】
本実施形態では、演算装置100は、8個のデータの数論変換のバタフライ演算を行う。
図7に示すように、8個のデータの数論変換のバタフライ演算では、3つのステージの演算が行われる。まず、1つ目のステージでは、x0からx7の8個のデータのバタフライ演算によって、A0からA7の8個のデータが算出される。次に、2つ目のステージでは、A0からA7の8個のデータのバタフライ演算によって、B0からB7の8個のデータが算出される。最後に、3つ目のステージでは、B0からB7の8個のデータのバタフライ演算によって、X0からX7の8個のデータが算出される。
図7に示すW
8は法P(Pは正の整数)における1の原始8乗根であり、W
4は法Q(Qは正の整数)における1の原始4乗根である。x0からx7は数論変換が行われる前のデータであり、X0からX7は数論変換が行われた後のデータである。本実施形態では、上述した数論変換のバタフライ演算の、1つ目のステージの演算をステージ1のNTT演算、2つ目のステージの演算をステージ2のNTT演算、3つ目のステージの演算をステージ3のNTT演算とも呼ぶ。
【0021】
図7に示すステージ1のNTT演算は第1演算コアグループ51によって実行され、ステージ2のNTT演算は第2演算コアグループ61によって実行され、ステージ3のNTT演算は第3演算コアグループ71によって実行される。すなわち、各演算コアグループは、数論変換のバタフライ演算の特定のステージの演算を実行する。演算部40は、3つの演算コアグループを、数論変換のバタフライ演算のステージの実行される順に直列に備える。
【0022】
演算装置100は、
図8に示す数論変換処理を実行することで、8個のデータの数論変換のバタフライ演算を実行する。以下では、数論変換のバタフライ演算が実行される8個のデータの組を、データセットとも呼ぶ。すなわち、演算装置100は、数論変換処理を実行することで、1つのデータセットの数論変換のバタフライ演算を実行する。まず、ステップS10において、演算装置100は、ステージ1のNTT演算処理を実行する。次に、ステップS20において、演算装置100は、ステージ2のNTT演算処理を実行する。最後に、ステップS30において、演算装置100は、ステージ3のNTT演算処理を実行する。
【0023】
以下では、
図2、
図9、および
図10を参照して、ステージ1のNTT演算処理について説明する。
図10のステップS110において、並び替え部30は、1つのデータセットを、DMA機能を用いてメモリ20から並び替え部30に転送する。このとき、並び替え部30は、
図7に示すx0からx7の8個のデータをメモリ20から並び替え部30に転送する。ここで転送されたデータは、x0,x1,x2,x3,x4,x5,x6,x7の順に並んでいる。言い換えれば、並び替え部30は、1つのデータセットをメモリ20から取得する。
【0024】
ステップS120において、並び替え部30は、ステップS110で転送したデータを、ビットリバースした順に並び替える。具体的には、並び替え部30は、x0,x1,x2,x3,x4,x5,x6,x7の順に並んでいるデータを、x0,x4,x2,x6,x1,x5,x3,x7の順に並び替える。
【0025】
ステップS130において、並び替え部30は、ステップS120で生成した並び替えデータを、DMA機能を用いて並び替え部30から第1バッファ50に転送し、第1バッファ50に記憶させる。
【0026】
ステップS140において、第1演算コアグループ51は、第1バッファ50から並び替えデータを入力データとして取得し、取得した入力データを各演算コアの第1入力部81と第2入力部82に入力する。第1演算コアグループ51は、
図9に示すように、x0を第1演算コア53の第1入力部81に入力し、x4を第1演算コア53の第2入力部82に入力し、x2を第2演算コア54の第1入力部81に入力し、x6を第2演算コア54の第2入力部82に入力し、x1を第3演算コア55の第1入力部81に入力し、x5を第3演算コア55の第2入力部82に入力し、x3を第4演算コア56の第1入力部81に入力し、x7を第4演算コア56の第2入力部82に入力する。また、ステップS140において、第1演算コア53の乗算器83には係数W
8
0が、第2演算コア54の乗算器83には係数W
8
2が、第3演算コア55の乗算器83には係数W
8
1が、第4演算コア56の乗算器83には係数W
8
3が、それぞれ入力される。
【0027】
ステップS150において、各演算コアは、第1入力部81に入力された値と、第2入力部82に入力された値と、乗算器83に入力された係数との間でバタフライ演算を実行し、その結果を第1出力部84および第2出力部85から出力する。第1演算コア53の第1出力部84、第1演算コア53の第2出力部85、第2演算コア54の第1出力部84、第2演算コア54の第2出力部85、第3演算コア55の第1出力部84、第3演算コア55の第2出力部85、第4演算コア56の第1出力部84、第4演算コア56の第2出力部85は、それぞれ、出力データとして、A0,A4,A2,A6,A1,A5,A3,A7を第2バッファ52に出力する。上記の出力データは、第2バッファ52に記憶される。
【0028】
ステップS160において、並び替え部30は、ステップS150で出力された出力データを、DMA機能を用いて第2バッファ52から並び替え部30に転送する。言い換えれば、並び替え部30は、バッファから出力データを取得する。以上で説明したようにして、ステージ1のNTT演算処理が実行される。
【0029】
以下では、
図2、
図9、および
図11を参照して、ステージ2のNTT演算処理について説明する。
図11のステップS210において、並び替え部30は、ステージ1のNTT演算処理のステップS160で並び替え部30に転送された出力データを並び替える。具体的には、並び替え部30は、A0,A4,A2,A6,A1,A5,A3,A7の順に並んでいる出力データを、A0,A2,A1,A3,A4,A6,A5,A7の順に並び替える。
【0030】
ステップS220において、並び替え部30は、ステップS210で生成した並び替えデータを、DMA機能を用いて並び替え部30から第3バッファ60に転送し、第3バッファ60に記憶させる。
【0031】
ステップS230において、第2演算コアグループ61は、第3バッファ60から並び替えデータを入力データとして取得し、取得した入力データを各演算コアの第1入力部81と第2入力部82に入力する。第2演算コアグループ61は、
図9に示すように、A0を第5演算コア63の第1入力部81に入力し、A2を第5演算コア63の第2入力部82に入力し、A1を第6演算コア64の第1入力部81に入力し、A3を第6演算コア64の第2入力部82に入力し、A4を第7演算コア65の第1入力部81に入力し、A6を第7演算コア65の第2入力部82に入力し、A5を第8演算コア66の第1入力部81に入力し、A7を第8演算コア66の第2入力部82に入力する。また、ステップS230において、第5演算コア63および第7演算コア65の乗算器83には係数W
4
0が、第6演算コア64および第8演算コア66の乗算器83には係数W
4
1が、それぞれ入力される。
【0032】
ステップS240において、各演算コアは、バタフライ演算を実行する。第5演算コア63の第1出力部84、第5演算コア63の第2出力部85、第6演算コア64の第1出力部84、第6演算コア64の第2出力部85、第7演算コア65の第1出力部84、第7演算コア65の第2出力部85、第8演算コア66の第1出力部84、第8演算コア66の第2出力部85は、それぞれ、出力データとして、B0,B2,B1,B3,B4,B6,B5,B7を第4バッファ62に出力する。上記の出力データは、第4バッファ62に記憶される。
【0033】
ステップS250において、並び替え部30は、ステップS240で出力された出力データを、DMA機能を用いて第4バッファ62から並び替え部30に転送する。以上で説明したようにして、ステージ2のNTT演算処理が実行される。
【0034】
以下では、
図2、
図9、および
図12を参照して、ステージ3のNTT演算処理について説明する。
図12のステップS310において、並び替え部30は、ステージ2のNTT演算処理のステップS250で並び替え部30に転送された出力データを並び替える。具体的には、並び替え部30は、B0,B2,B1,B3,B4,B6,B5,B7の順に並んでいる出力データを、B0,B1,B2,B3,B4,B5,B6,B7の順に並び替える。
【0035】
ステップS320において、並び替え部30は、ステップS310で生成した並び替えデータを、DMA機能を用いて並び替え部30から第5バッファ70に転送し、第5バッファ70に記憶させる。
【0036】
ステップS330において、第3演算コアグループ71は、第5バッファ70から並び替えデータを入力データとして取得し、取得した入力データを各演算コアの第1入力部81と第2入力部82に入力する。第3演算コアグループ71は、
図9に示すように、B0を第9演算コア73の第1入力部81に入力し、B1を第9演算コア73の第2入力部82に入力し、B2を第10演算コア74の第1入力部81に入力し、B3を第10演算コア74の第2入力部82に入力し、B4を第11演算コア75の第1入力部81に入力し、B5を第11演算コア75の第2入力部82に入力し、B6を第12演算コア76の第1入力部81に入力し、B7を第12演算コア76の第2入力部82に入力する。また、ステップS330において、第9演算コア73から第12演算コア76の乗算器83には、係数1が入力される。
【0037】
ステップS340において、各演算コアは、バタフライ演算を実行する。第9演算コア73の第1出力部84、第9演算コア73の第2出力部85、第10演算コア74の第1出力部84、第10演算コア74の第2出力部85、第11演算コア75の第1出力部84、第11演算コア75の第2出力部85、第12演算コア76の第1出力部84、第12演算コア76の第2出力部85は、それぞれ、出力データとして、X0,X4,X2,X6,X1,X5,X3,X7を第6バッファ72に出力する。上記の出力データは、第6バッファ72に記憶される。
【0038】
ステップS350において、並び替え部30は、ステップS340で出力された出力データを、DMA機能を用いて第6バッファ72から並び替え部30に転送する。
【0039】
ステップS360において、並び替え部30は、ステップS350で転送された出力データを並び替える。具体的には、並び替え部30は、X0,X4,X2,X6,X1,X5,X3,X7の順に並んでいるデータを、X0,X1,X2,X3,X4,X5,X6,X7の順に並び替える。
【0040】
ステップS370において、並び替え部30は、ステップS360で生成した並び替えデータを、DMA機能を用いて並び替え部30からメモリ20に転送し、メモリ20に記憶させる。以上で説明したようにして、ステージ3のNTT演算処理が実行される。
【0041】
演算装置100は、複数のデータセットの数論変換処理を実行する場合に、パイプライン処理を行う。パイプライン処理は、ステージ1のNTT演算処理を実行するステージと、ステージ2のNTT演算処理を実行するステージと、ステージ3のNTT演算処理を実行するステージの、3つのステージで構成される。このとき、演算部40は、それぞれの演算コアグループで、異なるステージのNTT演算を並列に実行する。以下では、
図13を用いて、演算装置100が第1データセットから第4データセットの4つのデータセットの数論変換処理を実行する場合のパイプライン処理について説明する。
図13において、NTT1はステージ1のNTT演算処理を、NTT2はステージ2のNTT演算処理を、NTT3はステージ3のNTT演算処理を意味する。
【0042】
まず、第1サイクルにおいて、演算装置100は、第1データセットのステージ1のNTT演算処理を実行する。
【0043】
次に、第2サイクルにおいて、演算装置100は、第1データセットのステージ2のNTT演算処理と、第2データセットのステージ1のNTT演算処理を、並列に実行する。
【0044】
次に、第3サイクルにおいて、演算装置100は、第1データセットのステージ3のNTT演算処理と、第2データセットのステージ2のNTT演算処理と、第3データセットのステージ1のNTT演算処理を、並列に実行する。
【0045】
次に、第4サイクルにおいて、演算装置100は、第2データセットのステージ3のNTT演算処理と、第3データセットのステージ2のNTT演算処理と、第4データセットのステージ1のNTT演算処理を、並列に実行する。
【0046】
次に、第5サイクルにおいて、演算装置100は、第3データセットのステージ3のNTT演算処理と、第4データセットのステージ2のNTT演算処理を、並列に実行する。
【0047】
最後に、第6サイクルにおいて、演算装置100は、第4データセットのステージ3のNTT演算処理を実行する。
【0048】
以上で説明した第1実施形態によれば、演算装置100は、複数のデータセットの数論変換処理を実行する場合にパイプライン処理を行い、それぞれの演算コアグループで異なるステージのNTT演算を並列に実行する。パイプライン処理が行われない場合、
図13に示す例では、第3サイクルで第1データセットのステージ3のNTT演算処理が完了した後に、第4サイクルにおいて、第2データセットのステージ1のNTT演算処理が実行される。この場合、4つのデータセットの数論変換処理が完了するには、第12サイクルまで必要になる。したがって、複数のデータセットの数論変換処理を実行する際にパイプライン処理を行うことで、パイプライン処理を行わない場合と比べて、数論変換をより高速に実行できる。
【0049】
また、本実施形態では、並び替え部30は、DMA機能を有し、DMA機能を用いて、並び替えデータを並び替え部30から第1バッファ50、第3バッファ60、および第5バッファ70に転送し、出力データを第2バッファ52、第4バッファ62、および第6バッファ72から並び替え部30に転送する。そのため、並び替え部30がDMA機能を有さない場合と異なり、並び替え部30がDMA機能を有する場合は並び替え部30とバッファの間で直接データを転送できるため、データの転送にかかる時間を短縮できる。したがって、数論変換をより高速に実行できる。
【0050】
また、本実施形態では、並び替え部30に順番データが記憶されており、生成部31が順番データに従って並び替えデータを生成する。そのため、CPU10が並び替えデータを生成する場合と比べて、CPU10にかかる負荷を小さくすることができる。
【0051】
また、本実施形態では、演算コアグループに入力される入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータである。そのため、演算装置100が数論変換のバタフライ演算を実行することで、データの暗号化または復号ができる。
【0052】
また、本実施形態では、並び替え部30および演算コアは、FPGAやASICなどの回路によって実現される。そのため、CPU10がメモリ20に記憶されたプログラムを実行することで並び替え部30および演算コアとして機能する場合に比べて、数論変換のバタフライ演算を高速に実行できる。
【0053】
また、本実施形態では、並び替え部30がメモリ20から取得したデータおよび出力データを並び替えることにより、同一の演算コアを複数用いて数論変換のバタフライ演算を実行できる。
【0054】
B.第2実施形態:
第1実施形態では、演算部40は、3つの演算コアグループを直列に備える。また、各演算コアグループは、4つの演算コアを並列に備える。これに対して、第2実施形態では、演算部41は、4つの演算コアグループを直列に備える。また、各演算コアグループは、8つの演算コアを並列に備える。演算部41以外の演算装置100の各部の構成は、第1実施形態と同じである。
【0055】
図14に示すように、演算部41は、第1バッファ50と、第1演算コアグループ151と、第2バッファ52と、第3バッファ60と、第2演算コアグループ161と、第4バッファ62と、第5バッファ70と、第3演算コアグループ171と、第6バッファ72と、第7バッファ180と、第4演算コアグループ181と、第8バッファ182と、を備える。第7バッファ180は、並び替えデータを一時的に記憶する。第8バッファ182は、出力データを一時的に記憶する。
【0056】
第1演算コアグループ151は、
図15に示すように、第1演算コア201、第2演算コア202、第3演算コア203、第4演算コア204、第5演算コア205、第6演算コア206、第7演算コア207、および第8演算コア208を備える。第2演算コアグループ161は、
図16に示すように、第9演算コア209、第10演算コア210、第11演算コア211、第12演算コア212、第13演算コア213、第14演算コア214、第15演算コア215、および第16演算コア216を備える。第3演算コアグループ171は、
図17に示すように、第17演算コア217、第18演算コア218、第19演算コア219、第20演算コア220、第21演算コア221、第22演算コア222、第23演算コア223、および第24演算コア224を備える。第4演算コアグループ181は、
図18に示すように、第25演算コア225、第26演算コア226、第27演算コア227、第28演算コア228、第29演算コア229、第30演算コア230、第31演算コア231、および第32演算コア232を備える。第1演算コア201から第32演算コア232は、第1実施形態における第1演算コア53と同じ構成である。本実施形態では、各演算コアグループには、16個の入力データが入力される。
【0057】
第2実施形態では、演算装置100は、16個のデータの数論変換のバタフライ演算を行う。
図19に示すように、16個のデータの数論変換のバタフライ演算では、4つのステージの演算が行われる。まず、1つ目のステージでは、x0からx15の16個のデータのバタフライ演算によって、A0からA15の16個のデータが算出される。次に、2つ目のステージでは、A0からA15の16個のデータのバタフライ演算によって、B0からB15の16個のデータが算出される。次に、3つ目のステージでは、B0からB15の16個のデータのバタフライ演算によって、C0からC15の16個のデータが算出される。最後に、4つ目のステージでは、C0からC15の16個のデータのバタフライ演算によって、X0からX15の16個のデータが算出される。
図19に示すW
16は法R(Rは正の整数)における1の原始16乗根である。本実施形態では、上述した数論変換のバタフライ演算の、1つ目のステージの演算をステージ1のNTT演算、2つ目のステージの演算をステージ2のNTT演算、3つ目のステージの演算をステージ3のNTT演算、4つ目のステージの演算をステージ4のNTT演算とも呼ぶ。
【0058】
図19に示すステージ1のNTT演算は第1演算コアグループ151によって実行され、ステージ2のNTT演算は第2演算コアグループ161によって実行され、ステージ3のNTT演算は第3演算コアグループ171によって実行され、ステージ4のNTT演算は第4演算コアグループ181によって実行される。
【0059】
演算装置100は、
図20に示す数論変換処理を実行することで、16個のデータの数論変換のバタフライ演算を実行する。本実施形態では、データセットは、数論変換のバタフライ演算が実行される16個のデータの組を意味する。まず、ステップS410において、演算装置100は、ステージ1のNTT演算処理を実行する。次に、ステップS420において、演算装置100は、ステージ2のNTT演算処理を実行する。次に、ステップS430において、演算装置100は、ステージ3のNTT演算処理を実行する。最後に、ステップS440において、演算装置100は、ステージ4のNTT演算処理を実行する。
【0060】
以下では、
図10,
図14、および
図21を参照して、第2実施形態におけるステージ1のNTT演算処理について説明する。なお、
図10に示す第1実施形態でのステージ1のNTT演算処理と同じ処理が実行される部分については、説明を省略する。
【0061】
図10のステップS110において、並び替え部30は、
図19に示すx0からx15の16個のデータをメモリ20から並び替え部30に転送する。ここで転送されたデータは、x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15の順に並んでいる。
【0062】
ステップS120において、並び替え部30は、ステップS110で転送したデータを、ビットリバースした順に並び替える。具体的には、並び替え部30は、x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15の順に並んでいるデータを、x0,x8,x4,x12,x2,x10,x6,x14,x1,x9,x5,x13,x3,x11,x7,x15の順に並び替える。
【0063】
ステップS140において、第1演算コアグループ151は、
図21に示すように、x0を第1演算コア201の第1入力部81に入力し、x8を第1演算コア201の第2入力部82に入力し、x4を第2演算コア202の第1入力部81に入力し、x12を第2演算コア202の第2入力部82に入力し、x2を第3演算コア203の第1入力部81に入力し、x10を第3演算コア203の第2入力部82に入力し、x6を第4演算コア204の第1入力部81に入力し、x14を第4演算コア204の第2入力部82に入力し、x1を第5演算コア205の第1入力部81に入力し、x9を第5演算コア205の第2入力部82に入力し、x5を第6演算コア206の第1入力部81に入力し、x13を第6演算コア206の第2入力部82に入力し、x3を第7演算コア207の第1入力部81に入力し、x11を第7演算コア207の第2入力部82に入力し、x7を第8演算コア208の第1入力部81に入力し、x15を第8演算コア208の第2入力部82に入力する。また、ステップS140において、第1演算コア201の乗算器83には係数W
16
0が、第2演算コア202の乗算器83には係数W
16
4が、第3演算コア203の乗算器83には係数W
16
2が、第4演算コア204の乗算器83には係数W
16
6が、第5演算コア205の乗算器83には係数W
16
1が、第6演算コア206の乗算器83には係数W
16
5が、第7演算コア207の乗算器83には係数W
16
3が、第8演算コア208の乗算器83には係数W
16
7が、それぞれ入力される。
【0064】
ステップS150において、各演算コアは、バタフライ演算を実行する。第1演算コア201の第1出力部84、第1演算コア201の第2出力部85、第2演算コア202の第1出力部84、第2演算コア202の第2出力部85、第3演算コア203の第1出力部84、第3演算コア203の第2出力部85、第4演算コア204の第1出力部84、第4演算コア204の第2出力部85、第5演算コア205の第1出力部84、第5演算コア205の第2出力部85、第6演算コア206の第1出力部84、第6演算コア206の第2出力部85、第7演算コア207の第1出力部84、第7演算コア207の第2出力部85、第8演算コア208の第1出力部84、第8演算コア208の第2出力部85は、それぞれ、出力データとして、A0,A8,A4,A12,A2,A10,A6,A14,A1,A9,A5,A13,A3,A11,A7,A15を第2バッファ52に出力する。上記の出力データは、第2バッファ52に記憶される。
【0065】
以下では、
図11、
図14、および
図22を参照して、ステージ2のNTT演算処理について説明する。なお、
図11に示す第1実施形態でのステージ2のNTT演算処理と同じ処理が実行される部分については、説明を省略する。
【0066】
図11のステップS210において、並び替え部30は、ステージ1のNTT演算処理のステップS160で並び替え部30に転送された出力データを並び替える。具体的には、並び替え部30は、A0,A8,A4,A12,A2,A10,A6,A14,A1,A9,A5,A13,A3,A11,A7,A15の順に並んでいる出力データを、A0,A4,A2,A6,A1,A5,A3,A7,A8,A12,A10,A14,A9,A13,A11,A15の順に並び替える。
【0067】
ステップS230において、第2演算コアグループ161は、
図22に示すように、A0を第9演算コア209の第1入力部81に入力し、A4を第9演算コア209の第2入力部82に入力し、A2を第10演算コア210の第1入力部81に入力し、A6を第10演算コア210の第2入力部82に入力し、A1を第11演算コア211の第1入力部81に入力し、A5を第11演算コア211の第2入力部82に入力し、A3を第12演算コア212の第1入力部81に入力し、A7を第12演算コア212の第2入力部82に入力し、A8を第13演算コア213の第1入力部81に入力し、A12を第13演算コア213の第2入力部82に入力し、A10を第14演算コア214の第1入力部81に入力し、A14を第14演算コア214の第2入力部82に入力し、A9を第15演算コア215の第1入力部81に入力し、A13を第15演算コア215の第2入力部82に入力し、A11を第16演算コア216の第1入力部81に入力し、A15を第16演算コア216の第2入力部82に入力する。また、ステップS230において、第9演算コア209および第13演算コア213の乗算器83には係数W
8
0が、第10演算コア210および第14演算コア214の乗算器83には係数W
8
2が、第11演算コア211および第15演算コア215の乗算器83には係数W
8
1が、第12演算コア212および第16演算コア216の乗算器83には係数W
8
3が、それぞれ入力される。
【0068】
ステップS240において、各演算コアは、バタフライ演算を実行する。第9演算コア209の第1出力部84、第9演算コア209の第2出力部85、第10演算コア210の第1出力部84、第10演算コア210の第2出力部85、第11演算コア211の第1出力部84、第11演算コア211の第2出力部85、第12演算コア212の第1出力部84、第12演算コア212の第2出力部85、第13演算コア213の第1出力部84、第13演算コア213の第2出力部85、第14演算コア214の第1出力部84、第14演算コア214の第2出力部85、第15演算コア215の第1出力部84、第15演算コア215の第2出力部85、第16演算コア216の第1出力部84、第16演算コア216の第2出力部85は、それぞれ、出力データとして、B0,B4,B2,B6,B1,B5,B3,B7,B8,B12,B10,B14,B9,B13,B11,B15を第4バッファ62に出力する。上記の出力データは、第4バッファ62に記憶される。
【0069】
以下では、
図14、
図23、および
図24を参照して、第2実施形態におけるステージ3のNTT演算処理について説明する。なお、
図23において、
図12に示す第1実施形態でのステージ3のNTT演算処理と同じ処理が実行される部分については、同一の符号を付記し、説明を省略する。
【0070】
図23のステップS311において、並び替え部30は、ステージ2のNTT演算処理のステップS250で並び替え部30に転送された出力データを並び替える。具体的には、並び替え部30は、B0,B4,B2,B6,B1,B5,B3,B7,B8,B12,B10,B14,B9,B13,B11,B15の順に並んでいる出力データを、B0,B2,B1,B3,B4,B6,B5,B7,B8,B10,B9,B11,B12,B14,B13,B15の順に並び替える。
【0071】
ステップS331において、第3演算コアグループ71は、
図24に示すように、B0を第17演算コア217の第1入力部81に入力し、B2を第17演算コア217の第2入力部82に入力し、B1を第18演算コア218の第1入力部81に入力し、B3を第18演算コア218の第2入力部82に入力し、B4を第19演算コア219の第1入力部81に入力し、B6を第19演算コア219の第2入力部82に入力し、B5を第20演算コア220の第1入力部81に入力し、B7を第20演算コア220の第2入力部82に入力し、B8を第21演算コア221の第1入力部81に入力し、B10を第21演算コア221の第2入力部82に入力し、B9を第22演算コア222の第1入力部81に入力し、B11を第22演算コア222の第2入力部82に入力し、B12を第23演算コア223の第1入力部81に入力し、B14を第23演算コア223の第2入力部82に入力し、B13を第24演算コア224の第1入力部81に入力し、B15を第24演算コア224の第2入力部82に入力する。また、ステップS331において、第17演算コア217、第19演算コア219、第21演算コア221、および第23演算コア223の乗算器83には係数W
4
0が、第18演算コア218、第20演算コア220、第22演算コア222、および第24演算コア224の乗算器83には係数W
4
1が、それぞれ入力される。
【0072】
ステップS341において、各演算コアは、バタフライ演算を実行する。第17演算コア217の第1出力部84、第17演算コア217の第2出力部85、第18演算コア218の第1出力部84、第18演算コア218の第2出力部85、第19演算コア219の第1出力部84、第19演算コア219の第2出力部85、第20演算コア220の第1出力部84、第20演算コア220の第2出力部85、第21演算コア221の第1出力部84、第21演算コア221の第2出力部85、第22演算コア222の第1出力部84、第22演算コア222の第2出力部85、第23演算コア223の第1出力部84、第23演算コア223の第2出力部85、第24演算コア224の第1出力部84、第24演算コア224の第2出力部85は、それぞれ、出力データとして、C0,C2,C1,C3,C4,C6,C5,C7,C8,C10,C9,C11,C12,C14,C13,C15を第6バッファ72に出力する。上記の出力データは、第6バッファ72に記憶される。
【0073】
以下では、
図14、
図25、および
図26を参照して、ステージ4のNTT演算処理について説明する。
図25のステップS510において、並び替え部30は、ステージ3のNTT演算処理のステップS350で並び替え部30に転送された出力データを並び替える。具体的には、並び替え部30は、C0,C2,C1,C3,C4,C6,C5,C7,C8,C10,C9,C11,C12,C14,C13,C15の順に並んでいる出力データを、C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15の順に並び替える。
【0074】
ステップS520において、並び替え部30は、ステップS510で生成した並び替えデータを、DMA機能を用いて並び替え部30から第7バッファ180に転送し、第7バッファ180に記憶させる。
【0075】
ステップS530において、第4演算コアグループ181は、第7バッファ180から並び替えデータを入力データとして取得し、取得した入力データを各演算コアの第1入力部81と第2入力部82に入力する。第4演算コアグループ181は、
図26に示すように、C0を第25演算コア225の第1入力部81に入力し、C1を第25演算コア225の第2入力部82に入力し、C2を第26演算コア226の第1入力部81に入力し、C3を第26演算コア226の第2入力部82に入力し、C4を第27演算コア227の第1入力部81に入力し、C5を第27演算コア227の第2入力部82に入力し、C6を第28演算コア228の第1入力部81に入力し、C7を第28演算コア228の第2入力部82に入力し、C9を第29演算コア229の第1入力部81に入力し、C10を第29演算コア229の第2入力部82に入力し、C11を第30演算コア230の第1入力部81に入力し、C12を第30演算コア230の第2入力部82に入力し、C13を第31演算コア231の第1入力部81に入力し、C14を第31演算コア231の第2入力部82に入力し、C15を第32演算コア232の第1入力部81に入力し、C16を第32演算コア232の第2入力部82に入力する。また、ステップS530において、第25演算コア225から第32演算コア232の乗算器83には、係数1が入力される。
【0076】
ステップS540において、各演算コアは、バタフライ演算を実行する。第25演算コア225の第1出力部84、第25演算コア225の第2出力部85、第26演算コア226の第1出力部84、第26演算コア226の第2出力部85、第27演算コア227の第1出力部84、第27演算コア227の第2出力部85、第28演算コア228の第1出力部84、第28演算コア228の第2出力部85、第29演算コア229の第1出力部84、第29演算コア229の第2出力部85、第30演算コア230の第1出力部84、第30演算コア230の第2出力部85、第31演算コア231の第1出力部84、第31演算コア231の第2出力部85、第32演算コア232の第1出力部84、第32演算コア232の第2出力部85は、それぞれ、出力データとして、X0,X8,X4,X12,X2,X10,X6,X14,X1,X9,X5,X13,X3,X11,X7,X15を第8バッファ182に出力する。上記の出力データは、第8バッファ182に記憶される。
【0077】
ステップS550において、並び替え部30は、ステップS540で出力された出力データを、DMA機能を用いて第8バッファ182から並び替え部30に転送する。
【0078】
ステップS560において、並び替え部30は、ステップS550で転送された出力データを並び替える。具体的には、並び替え部30は、X0,X8,X4,X12,X2,X10,X6,X14,X1,X9,X5,X13,X3,X11,X7,X15の順に並んでいるデータを、X0,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15の順に並び替える。
【0079】
ステップS570において、並び替え部30は、ステップS560で生成した並び替えデータを、DMA機能を用いて並び替え部30からメモリ20に転送し、メモリ20に記憶させる。以上で説明したようにして、ステージ4のNTT演算処理が実行される。
【0080】
演算装置100は、複数のデータセットの数論変換処理を実行する場合に、パイプライン処理を行う。第2実施形態では、パイプライン処理は、ステージ1のNTT演算処理を実行するステージと、ステージ2のNTT演算処理を実行するステージと、ステージ3のNTT演算処理を実行するステージと、ステージ4のNTT演算処理を実行するステージの、4つのステージで構成される。以下では、
図27を用いて、演算装置100が第1データセットから第4データセットの4つのデータセットの数論変換処理を実行する場合のパイプライン処理について説明する。
図27において、NTT4はステージ4のNTT演算処理を意味する。
【0081】
まず、第1サイクルにおいて、演算装置100は、第1データセットのステージ1のNTT演算処理を実行する。
【0082】
次に、第2サイクルにおいて、演算装置100は、第1データセットのステージ2のNTT演算処理と、第2データセットのステージ1のNTT演算処理を、並列に実行する。
【0083】
次に、第3サイクルにおいて、演算装置100は、第1データセットのステージ3のNTT演算処理と、第2データセットのステージ2のNTT演算処理と、第3データセットのステージ1のNTT演算処理を、並列に実行する。
【0084】
次に、第4サイクルにおいて、演算装置100は、第1データセットのステージ4のNTT演算処理と、第2データセットのステージ3のNTT演算処理と、第3データセットのステージ2のNTT演算処理と、第4データセットのステージ1のNTT演算処理を、並列に実行する。
【0085】
次に、第5サイクルにおいて、演算装置100は、第2データセットのステージ4のNTT演算処理と、第3データセットのステージ3のNTT演算処理と、第4データセットのステージ2のNTT演算処理を、並列に実行する。
【0086】
次に、第6サイクルにおいて、演算装置100は、第3データセットのステージ4のNTT演算処理と、第4データセットのステージ3のNTT演算処理を、並列に実行する。
【0087】
最後に、第7サイクルにおいて、演算装置100は、第4データセットのステージ4のNTT演算処理を実行する。
【0088】
以上で説明した第2実施形態によれば、演算装置100は、複数のデータセットの数論変換処理を実行する場合にパイプライン処理を行い、それぞれの演算コアグループで異なるステージのNTT演算を並列に実行する。そのため、第1実施形態と同様に、パイプライン処理を行わない場合と比べて、数論変換をより高速に実行できる。
【0089】
C.他の実施形態:
(C-1)第1実施形態では、演算部40は3つの演算コアグループを直列に備え、各演算コアグループは4つの演算コアを並列に備える。第2実施形態では、演算部41は4つの演算コアグループを直列に備え、各演算コアグループは8つの演算コアを並列に備える。これに対して、演算部40は2つの演算コアグループを直列に備え、各演算コアグループは2つの演算コアを並列に備えてもよい。また、演算部40はm個(mは5以上の整数)の演算コアグループを直列に備え、各演算コアグループは2の(m-1)乗個の演算コアを並列に備えてもよい。すなわち、演算部40はn個(nは2以上の整数)の演算コアグループを直列に備え、各演算コアグループは2の(n-1)乗個の演算コアを並列に備えてもよい。この場合、演算部40には、2のn乗個の入力データが入力される。すなわち、演算装置100は、2のn乗個のデータのバタフライ演算を行う。
【0090】
(C-2)上記実施形態では、入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータであるが、入力データは、数論変換によって暗号化または復号が行われるデータに含まれるデータでなくてもよい。
【0091】
(C-3)上記実施形態では、バッファは、演算部40に設けられている。これに対して、並び替え部30がバッファの機能を有してもよい。この場合、並び替え部30は、並び替えデータを演算コアグループに入力データとして入力する。また、演算コアグループは、並び替え部30に出力データを出力する。
【0092】
(C-4)上記実施形態では、演算装置100は、数論変換のバタフライ演算を実行可能に構成されている。これに対して、演算装置100は、数論変換および逆数論変換のバタフライ演算を実行可能に構成されてもよい。逆数論変換を、INTT(Inverse Number Theoretic Transform)とも呼ぶ。例えば、8個のデータの逆数論変換のバタフライ演算では、
図28に示すように、3つのステージの演算が実行される。演算装置100が3つの演算コアグループを直列に備える場合、第1演算コアグループ51はステージ1のINTT演算を実行し、第2演算コアグループ61はステージ2のINTT演算を実行し、第3演算コアグループ71はステージ3のINTT演算を実行する。
【0093】
演算装置100は、複数のデータセットの数論変換処理を実行する場合と同様に、複数のデータセットの逆数論変換のバタフライ演算を実行する場合についても、パイプライン処理を行う。パイプライン処理は、ステージ1のINTT演算を実行するステージと、ステージ2のINTT演算を実行するステージと、ステージ3のINTT演算を実行するステージの、3つのステージで構成される。このとき、演算部40は、
図29に示すように、それぞれの演算コアグループで、異なるステージのINTT演算を並列に実行する。
図29において、INTT1はステージ1のINTT演算を、INTT2はステージ2のINTT演算を、INTT3はステージ3のINTT演算を意味する。
【0094】
逆数論変換のバタフライ演算の最後のステージでは、シフト演算が実行される。例えば、8個のデータの逆数論変換のバタフライ演算では、
図28に示すように、最後のステージにおいて各出力データに1/8が乗算される。演算装置100が数論変換および逆数論変換のバタフライ演算を実行可能に構成される場合、並び替え部30は、演算部40で逆数論変換のバタフライ演算の最後のステージのうちシフト演算を除く演算が実行された後に、演算部40から並び替え部30に転送された出力データに対してシフト演算を行う機能を有する。
【0095】
本開示は、上述の実施形態に限られるものではなく、その趣旨を逸脱しない範囲において種々の構成で実現することができる。例えば、発明の概要の欄に記載した各形態中の技術的特徴に対応する実施形態中の技術的特徴は、上述の課題の一部又は全部を解決するために、あるいは、上述の効果の一部又は全部を達成するために、適宜、差し替えや、組み合わせを行うことが可能である。また、その技術的特徴が本明細書中に必須なものとして説明されていなければ、適宜、削除することが可能である。
【符号の説明】
【0096】
10…CPU、20…メモリ、30…並び替え部、31…生成部、40,41…演算部、50…第1バッファ、51…第1演算コアグループ、52…第2バッファ、53…第1演算コア、54…第2演算コア、55…第3演算コア、56…第4演算コア、60…第3バッファ、61…第2演算コアグループ、62…第4バッファ、63…第5演算コア、64…第6演算コア、65…第7演算コア、66…第8演算コア、70…第5バッファ、71…第3演算コアグループ、72…第6バッファ、73…第9演算コア、74…第10演算コア、75…第11演算コア、76…第12演算コア、81…第1入力部、82…第2入力部、83…乗算器、84…第1出力部、85…第2出力部、100…演算装置、151…第1演算コアグループ、161…第2演算コアグループ、171…第3演算コアグループ、180…第7バッファ、181…第4演算コアグループ、182…第8バッファ