(57)【要約】  本発明は、データ計算技術の分野に関し、2つのN*N行列に対して乗算演算を実行するための時間を低減するための演算アクセラレータを開示する。演算アクセラレータは、第1のメモリと、第2の命令と、演算回路と、コントローラとを含む。演算回路は、バスを使用することにより、第1のメモリ及び第2のメモリとデータ通信を実行してもよい。演算回路は、第1のメモリ及び第2のメモリから行列データを抽出し、乗算演算を実行するように構成される。コントローラは、予め設定されたプログラム又は命令に従って、乗算演算を完了するように演算回路を制御するように構成される。演算アクセラレータは、2つの行列に対して乗算演算を実行するように構成されてもよい。
2020526830.tif 000002
【特許請求の範囲】
【請求項１】
演算アクセラレータであって、
第1の行列を記憶するように構成された第1のメモリであり、前記第1の行列はM*N行列である、第1のメモリと、
第2の行列を記憶するように構成された第2のメモリであり、前記第2の行列はN*K行列である、第2のメモリと、
前記第1のメモリ及び前記第2のメモリに接続された演算回路であり、前記演算回路は行列乗算回路と加算回路とを含み、前記行列乗算回路は演算ブロックから構成されるM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、前記演算ユニットは、前記第1のメモリ及び前記第2のメモリにより送信されたデータを受信するためにそれぞれ使用される2つの入力を備え、前記演算ユニットは前記2つのデータを乗算し、前記加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される、演算回路と、
前記演算回路に接続されたコントローラであり、前記コントローラが以下の動作、すなわち、
前記第2の行列のK個の列ベクトルを各演算グループの前記K個の演算ブロックにそれぞれ書き込む動作であり、前記第2の行列のベクトルの第g列内の第jのデータが、前記K個の演算ブロック内の第gの演算ブロック内の第jの演算ユニットに書き込まれる動作と、
前記第1の行列のM個の行ベクトルを前記M個の演算グループにそれぞれ送信する動作であり、前記第1の行列の第iの行ベクトルが前記M個の演算グループ内の第iの演算グループに送信され、前記第iの演算グループ内の各演算ブロック内の第jの演算ユニットが前記第iの行ベクトル内の第jのデータを受信し、
それにより、前記M個の演算グループ内の各演算ユニットが、前記演算ユニットにより受信された2つのデータに対して乗算演算を実行し、前記加算回路が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、前記第3の行列は前記第1の行列と前記第2の行列との積であり、前記第3の行列内の行i及び列gの要素は、前記第iの演算グループ内の第gの演算ブロックの計算結果であり、M、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である、動作と
を実行するように構成される、コントローラと
を含む演算アクセラレータ。
【請求項２】
前記加算回路は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、前記加算木は、対応する前記演算ブロック内のN個の演算ユニットに接続され、前記加算木は、前記加算木に接続された前記N個の演算ユニットの計算結果を加算するように構成される、請求項１に記載の演算アクセラレータ。
【請求項３】
前記演算ユニットは、
記憶ユニットに書き込まれるデータを記憶するように構成された記憶ユニットと、
前記記憶ユニットに接続された乗算回路であり、受信データと前記記憶ユニットに記憶された前記データとの積を計算するように構成された乗算回路と
を含む、請求項１又は２に記載の演算アクセラレータ。
【請求項４】
前記演算ユニットは、複数の記憶ユニットと、乗算回路と、前記複数の記憶ユニットに接続された第1の選択回路と、前記複数の記憶ユニット及び前記乗算回路に接続された第2の選択回路とを含み、前記複数の記憶ユニットは、データを記憶するように構成され、
前記第1の選択回路は、前記乗算回路が乗算演算を実行する前に、前記複数の記憶ユニットから、前記乗算回路が前記乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、
前記第2の選択回路は、前記乗算回路が前記乗算演算を実行するときに、前記乗算回路が前記乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、
前記乗算回路は、受信データと前記第2の選択回路により選択された前記記憶ユニットに記憶された前記データとの積を計算するように構成される、請求項１又は２に記載の演算アクセラレータ。
【請求項５】
前記第1のメモリは、第1のバスを使用することにより前記演算回路に接続され、前記第1のバスのビット幅は、Wi*N*Mであり、前記第2のメモリは、第2のバスを使用することにより前記演算回路に接続され、前記第2のバスのビット幅は、Wi*Nであり、Wiは、前記演算ユニットにより許容される入力データの最大ビット幅である、請求項１乃至４のうちいずれか１項に記載の演算アクセラレータ。
【請求項６】
前記演算アクセラレータは、前記第1のメモリ、前記第2のメモリ及び前記コントローラに接続された記憶ユニットアクセスコントローラを更に含み、
前記記憶ユニットアクセスコントローラは、前記コントローラの制御下で、前記第1の行列及び前記第2の行列を取得し、前記第1の行列を前記第1のメモリに保存し、前記第2の行列を前記第2のメモリに保存するように構成される、請求項１乃至５のうちいずれか１項に記載の演算アクセラレータ。
【請求項７】
前記演算アクセラレータは、
前記第1の行列のソースデータを記憶するように構成された第3のメモリと、
前記第1のメモリ、前記第2のメモリ、前記第3のメモリ及び前記コントローラに接続された記憶ユニットアクセスコントローラであり、前記記憶ユニットアクセスコントローラは、前記コントローラの制御下で、前記第1の行列の前記ソースデータ及び前記第2の行列を取得し、前記第1の行列の前記ソースデータを前記第3のメモリに保存し、前記第2の行列を前記第2のメモリに保存するように構成される、記憶ユニットアクセスコントローラと、
前記第1のメモリ、前記第3のメモリ及び前記コントローラに接続されたベクトル計算ユニットであり、前記ベクトル計算ユニットは、前記コントローラの制御下で、前記第1の行列の前記ソースデータを前記第1の行列に変換し、前記第1の行列を前記第1のメモリに保存するように構成される、ベクトル計算ユニットと
を更に含む、請求項１乃至５のうちいずれか１項に記載の演算アクセラレータ。
【請求項８】
前記第3のメモリは、前記演算回路に接続され、前記第3のメモリは、前記第3の行列を記憶するように更に構成される、請求項７に記載の演算アクセラレータ。
【請求項９】
前記演算アクセラレータは、前記演算回路、前記ベクトル計算ユニット及び前記コントローラに接続された累算器を更に含み、
前記累算器は、前記コントローラの制御下で、前記第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成され、
前記ベクトル計算ユニットは、前記コントローラの制御下で、前記第5の行列を前記第3のメモリに保存するように更に構成され、
前記第3の行列は、前記第1の行列と前記第2の行列との前記積であり、前記第1の行列は、第1の計算対象の行列の第1の部分を含み、前記第1の計算対象の行列の前記第1の部分は、前記第1の計算対象の行列の第1〜第N列の要素であり、前記第2の行列は、第2の計算対象の行列の第1の部分であり、前記第2の計算対象の行列の前記第1の部分は、前記第2の計算対象の行列の第1〜第N行の要素であり、前記第1の計算対象の行列は、M個の行の要素を含み、前記第2の計算対象の行列は、K個の列の要素を含み、前記第4の行列は、前記第1の計算対象の行列の第2の部分と前記第2の計算対象の行列の第2の部分との積であり、前記第1の計算対象の行列の前記第2の部分は、前記第1の計算対象の行列における前記第1の部分以外の部分であり、前記第2の計算対象の行列の前記第2の部分は、前記第2の計算対象の行列における前記第1の部分以外の部分である、請求項７に記載の演算アクセラレータ。
【請求項１０】
前記演算アクセラレータは、
前記コントローラに接続された命令フェッチバッファであり、前記コントローラにより使用される命令を記憶するように構成された命令フェッチバッファと、
前記命令フェッチバッファ、前記記憶ユニットアクセスコントローラ及び外部メモリに接続されたバスインタフェースユニットであり、前記外部メモリから前記命令を取得するために前記命令フェッチバッファにより使用され、前記外部メモリから前記第1の行列の前記ソースデータ、前記第1の行列及び前記第2の行列のうち少なくとも1つを取得するために前記記憶ユニットアクセスコントローラにより更に使用されるバスインタフェースユニットと
を更に含む、請求項１乃至９のうちいずれか１項に記載の演算アクセラレータ。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願への相互参照］
この出願は、2017年7月7日に中国特許庁に出願された「OPERATION  ACCELERATOR」という名称の中国特許第201710553286.X号に対する優先権を主張し、その全内容を参照により援用する。
【０００２】
［技術分野］
この出願は、データ計算技術の分野に関し、特に、演算アクセラレータに関する。
【背景技術】
【０００３】
現在、2つの行列A及びBの積は、以下の2つの方式のいずれかで計算され得る。
【０００４】
方式1:ベクトルプロセッサを使用することにより計算が実行される。
【０００５】
C=A×Bであり、ベクトルプロセッサは同時にM個の要素を計算できると仮定する。図１を参照すると、ベクトルプロセッサは、行列Aの行i内のベクトル(要素Ai1、Ai2、...、Ai(M-1)及びAiMを含む)をソースレジスタReg0にロードし、次いで、行列Bの行j内のベクトル(要素Bj1、Bj2、...、Bj(M-1)及びBjMを含む)をレジスタReg1にロードし、Reg0及びReg1内の対応する要素を乗算し、最後に、ベクトルプロセッサは、加算木を使用することにより累算演算を完了し、行列Cの行i及び列j内のデータCijを計算する。複数の計算の後に、行列Cが取得され得る。
【０００６】
方式2:計算速度を更に増加させるために、行列の乗算演算は、二次元計算アレイを使用することにより完了され得る。
【０００７】
例えば、二次元計算アレイは、N*Nシストリックアレイ(systolic  array)でもよい。1つのベクトルと1つの行列とを乗算する演算は、1つのこのようなシストリックアレイを使用することにより各クロックサイクルにおいて完了され得る。
【０００８】
方式1では、2つのN*N行列の乗算演算を完了するために、N^3個の乗算演算が必要であり、ベクトルプロセッサは、各クロックサイクルにおいてM個の要素を乗算し得るので、1つの乗算演算を完了するために必要な持続時間は、N^3/M個のクロックサイクルである。方式2では、2つのN*N行列の乗算演算を完了するために、N^3個の乗算演算が必要であり、シストリックアレイはN^2個の演算ユニットを有するので、1つの行列演算を完了するために必要な持続時間は、N^3/N^2=N個のクロックサイクルである。方式1と方式2との双方において、N*N行列の乗算演算を完了するのに長い時間がかかる。
【発明の概要】
【０００９】
この出願の実施形態は、2つのN*N行列に対して乗算演算を実行するための時間を低減するための演算アクセラレータを提供する。
【００１０】
上記の目的を達成するために、この出願の実施形態は、以下の技術的解決策を提供する。
【００１１】
第1の態様によれば、演算アクセラレータが提供される。演算アクセラレータは、第1の行列を記憶するように構成された第1のメモリであり、第1の行列はM*N行列である、第1のメモリと、第2の行列を記憶するように構成された第2のメモリであり、第2の行列はN*K行列である、第2のメモリと、第1のメモリ及び第2のメモリに接続された演算回路であり、演算回路は行列乗算回路と加算回路とを含み、行列乗算回路は演算ブロックを含むM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、演算ユニットは、第1のメモリ及び第2のメモリにより送信されたデータを受信するためにそれぞれ使用される2つの入力を備え、演算ユニットは2つのデータを乗算し、加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される、演算回路と、演算回路に接続されたコントローラであり、コントローラが以下の動作、すなわち、第2の行列のK個の列ベクトルを各演算グループのK個の演算ブロックにそれぞれ書き込む動作であり、第2の行列のベクトルの第g列内の第jのデータが、K個の演算ブロック内の第gの演算ブロック内の第jの演算ユニットに書き込まれる動作と、第1の行列のM個の行ベクトルをM個の演算グループにそれぞれ送信する動作であり、第1の行列の第iの行ベクトルがM個の演算グループ内の第iの演算グループに送信され、第iの演算グループ内の各演算ブロック内の第jの演算ユニットが第iの行ベクトル内の第jのデータを受信し、それにより、M個の演算グループ内の各演算ユニットが、演算ユニットにより受信された2つのデータに対して乗算演算を実行し、加算回路が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、第3の行列は第1の行列と第2の行列との積であり、第3の行列内の行i及び列gの要素は、第iの演算グループ内の第gの演算ブロックの計算結果でありM、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である、動作とを実行するように構成される、コントローラとを含む。
【００１２】
第1の態様において提供される方法では、M個の演算グループがM*N*K個の演算ユニットを含むので、演算アクセラレータは、1つのクロックサイクル内でM*N*K個の乗算演算を実行し得る。この場合、演算アクセラレータは、M*N行列とN*K行列との積を計算し得る。従来技術と比較して、この方法は、行列乗算演算により必要とされる時間を大幅に低減できる。
【００１３】
可能な設計では、加算回路は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、加算木は、対応する演算ブロック内のN個の演算ユニットに接続され、加算木は、加算木に接続されたN個の演算ユニットの計算結果を加算するように構成される。
【００１４】
この可能な設計では、加算回路の構成の構造が具体的に提供される。
【００１５】
可能な設計では、演算ユニットは、記憶ユニットに書き込まれるデータを記憶するように構成された記憶ユニットと、記憶ユニットに接続された乗算回路であり、受信データと記憶ユニットに記憶されたデータとの積を計算するように構成された乗算回路とを含む。
【００１６】
この可能な設計では、演算ユニットの構成の構造が具体的に提供される。
【００１７】
可能な設計では、演算ユニットは、複数の記憶ユニットと、乗算回路と、複数の記憶ユニットに接続された第1の選択回路と、複数の記憶ユニット及び乗算回路に接続された第2の選択回路とを含む。複数の記憶ユニットは、データを記憶するように構成され、第1の選択回路は、乗算回路が乗算演算を実行する前に、複数の記憶ユニットから、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、第2の選択回路は、乗算回路が乗算演算を実行するときに、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、乗算回路は、受信データと第2の選択回路により選択された記憶ユニットに記憶されたデータとの積を計算するように構成される。
【００１８】
この可能な設計では、記憶ユニットは、2つのblock(ブロック)に分割されてもよい。演算ユニットが複数の記憶ユニットを含むとき、演算ユニットが1つの記憶ユニット内の1つのblock内のデータに基づいて乗算演算を実行する場合、コントローラは、複数の記憶ユニット内の他の記憶ユニット又は乗算演算に関与する記憶ユニット内の他のblockにデータを更に書き込んでもよく、それにより、演算ユニットの作業効率を改善する。
【００１９】
可能な設計では、第1のメモリは、第1のバスを使用することにより演算回路に接続され、第1のバスのビット幅は、Wi*N*Mであり、第2のメモリは、第2のバスを使用することにより演算回路に接続され、第2のバスのビット幅は、Wi*Nであり、Wiは、演算ユニットにより許容される入力データの最大ビット幅である。
【００２０】
可能な設計では、演算アクセラレータは、第1のメモリ、第2のメモリ及びコントローラに接続された記憶ユニットアクセスコントローラを更に含み、記憶ユニットアクセスコントローラは、コントローラの制御下で、第1の行列及び第2の行列を取得し、第1の行列を第1のメモリに保存し、第2の行列を第2のメモリに保存するように構成される。
【００２１】
可能な設計では、演算アクセラレータは、第1の行列のソースデータを記憶するように構成された第3のメモリと、第1のメモリ、第2のメモリ、第3のメモリ及びコントローラに接続された記憶ユニットアクセスコントローラであり、記憶ユニットアクセスコントローラは、コントローラの制御下で、第1の行列のソースデータ及び第2の行列を取得し、第1の行列のソースデータを第3のメモリに保存し、第2の行列を第2のメモリに保存するように構成される、記憶ユニットアクセスコントローラと、第1のメモリ、第3のメモリ及びコントローラに接続されたベクトル計算ユニットであり、ベクトル計算ユニットは、コントローラの制御下で、第1の行列のソースデータを第1の行列に変換し、第1の行列を第1のメモリに保存するように構成される、ベクトル計算ユニットとを更に含む。
【００２２】
この可能な設計では、演算アクセラレータは、第1の行列のソースデータを使用することにより第1の行列を取得する能力を更に有する。
【００２３】
可能な設計では、第3のメモリは、演算回路に接続され、第3のメモリは、第3の行列を記憶するように更に構成される。
【００２４】
可能な設計では、演算アクセラレータは、演算回路、ベクトル計算ユニット及びコントローラに接続された累算器を更に含み、累算器は、コントローラの制御下で、第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成され、ベクトル計算ユニットは、コントローラの制御下で、第5の行列を第3のメモリに保存するように更に構成され、第3の行列は、第1の行列と第2の行列との積であり、第1の行列は、第1の計算対象の行列の第1の部分を含み、第1の計算対象の行列の第1の部分は、第1の計算対象の行列の第1〜第N列の要素であり、第2の行列は、第2の計算対象の行列の第1の部分であり、第2の計算対象の行列の第1の部分は、第2の計算対象の行列の第1〜第N行の要素であり、第1の計算対象の行列は、M個の行の要素を含み、第2の計算対象の行列は、K個の列の要素を含み、第4の行列は、第1の計算対象の行列の第2の部分と第2の計算対象の行列の第2の部分との積であり、第1の計算対象の行列の第2の部分は、第1の計算対象の行列における第1の部分以外の部分であり、第2の計算対象の行列の第2の部分は、第2の計算対象の行列における第1の部分以外の部分である。
【００２５】
可能な設計では、演算アクセラレータは、コントローラに接続された命令フェッチバッファであり、コントローラにより使用される命令を記憶するように構成された命令フェッチバッファと、命令フェッチバッファ、記憶ユニットアクセスコントローラ及び外部メモリに接続されたバスインタフェースユニットであり、外部メモリから命令を取得するために命令フェッチバッファにより使用され、外部メモリから第1の行列のソースデータ、第1の行列及び第2の行列のうち少なくとも1つを取得するために記憶ユニットアクセスコントローラにより更に使用されるバスインタフェースユニットとを更に含む。
【図面の簡単な説明】
【００２６】
【図１】従来技術において2つの行列の積を計算するプロセスの概略図である。
【図２】従来技術において畳み込みカーネルを重み行列に変換する概略図である。
【図３】従来技術において入力データを入力行列に変換する概略図である。
【図４】従来技術において2つの行列に対して乗算演算を実行するための方法の概略図である。
【図５】本発明の実施形態による演算アクセラレータの概略構成図である。
【図６】本発明の実施形態による演算回路の概略構成図である。
【図７】本発明の実施形態による演算回路における配線の概略図である。
【図８】本発明の実施形態による各演算ブロックにロードされた列ベクトルの概略図である。
【図９】本発明の実施形態による各演算グループ内の演算ユニット内のデータの概略図である。
【図１０】本発明の実施形態による各演算ブロックにロードされた行ベクトルの概略図である。
【図１１】本発明の実施形態による各演算グループ内の演算ユニット内のデータの概略図である。
【図１２】本発明の実施形態による各演算グループ内の演算ユニットにより計算されたデータの概略図である。
【図１３】本発明の実施形態による加算木と演算ブロックとの間の関係の概略図である。
【図１４】本発明の実施形態による演算ユニットの概略構成図である。
【図１５】本発明の実施形態による他の演算ユニットの概略構成図である。
【図１６】本発明の実施形態による他の演算アクセラレータの概略構成図である。
【図１７】本発明の実施形態による更に他の演算アクセラレータの概略構成図である。
【図１８】本発明の実施形態によるパディング行列(padding  matrix)の概略図である。
【図１９】本発明の実施形態による区分行列(partitioned  matrix)の概略図である。
【図２０】本発明の実施形態に従って行列乗算演算を完了するようにコントローラが演算アクセラレータを制御するフローチャートである。
【図２１】本発明の実施形態に従って行列乗算演算を実現するようにCPUが演算アクセラレータを制御するフローチャートである。
【発明を実施するための形態】
【００２７】
以下に、この出願の実施形態における添付の図面を参照して、この出願の実施形態における技術的解決策について説明する。この出願の説明において、別段の記載がない限り、「/」は、又はを意味し、例えば、A/Bは、A又はBを示してもよく、「複数」は、2つ以上を意味する。
【００２８】
本発明の実施形態において提供される演算アクセラレータは、機械学習、深層学習及び畳み込みニューラルネットワークのような分野に適用されてもよく、或いは、デジタル画像処理及びデジタル信号処理のような分野に適用されてもよく、或いは、行列乗算演算に関連する他の分野に適用されてもよい。
【００２９】
近年、画像分類、画像認識、音声認識及び他の関連分野における畳み込みニューラルネットワークの良好な性能のため、畳み込みニューラルネットワークは、学界及び産業界における研究開発の活発な分野となっている。畳み込みニューラルネットワークは、主に畳み込み及び全結合(fully  connected,  略称FC)演算を含む。畳み込み演算の計算量は、通常では全体のネットワークの計算量の70%より多くを占める可能性がある。本発明の実施形態において提供される演算アクセラレータは、畳み込みニューラルネットワークにおける畳み込み演算及びFC演算を実行し得る。
【００３０】
畳み込み演算は、厳密な意味で行列乗算演算と等価ではない。しかし、畳み込み演算は、適切なデータ調整を通じて行列乗算演算に変換され得る。通常では、畳み込みニューラルネットワークに複数の畳み込みカーネルが存在する。畳み込みカーネルは三次元であり、三次元のデータを含む。方向x及びyはデータの長さ及び幅であり、方向zはデータの深さと考えられてもよい。畳み込みカーネルは、実際にはフィルタ(filter)であり、主に画像から異なる特徴を抽出するように構成される。図２を参照すると、畳み込みカーネルは、実質的に一連の重みの組み合わせである。K個の畳み込みカーネルが存在すると仮定する。K個の畳み込みカーネルにおいて同じ位置にある方向zのN個の要素が抽出され、N*Kの重み行列(weight  matrix)が取得できる。畳み込みカーネルは、演算アクセラレータが行列乗算演算を実行するときに呼び出すために、演算アクセラレータの仕様(具体的には、演算アクセラレータにより計算できる行列の行数及び列数)に基づいて、重み行列の形式で演算アクセラレータのメモリに予め記憶されてもよい。本発明の実施形態では、「*」は「乗算」を示す。
【００３１】
図３を参照すると、畳み込みカーネルのストライド(stride)(本発明の実施形態では、ストライドは1である)に基づいて、演算アクセラレータは、方向zのM個の入力点のN個のデータ、すなわち、合計でM*N個のデータを抽出してもよい。入力行列(input  matrix)が形成されてもよい。演算アクセラレータは、入力行列及び重み行列に対して乗算演算を実行する必要がある。
【００３２】
FC演算は、実質的にベクトル及び行列の乗算演算である。FC演算の入力は9216個の要素を有するベクトルであり、4096個の点がFCにおいて出力される必要がある。この場合、FCにおいて出力される点を取得するために、9126個の要素を有するベクトル及び9216個の重みに対して点乗算演算が実行される必要があり、全ての4096個の点を取得するために、9216のベクトル及び9216×4096個の重みに対して点乗算演算が実行される必要がある。
【００３３】
図４は、行列C=A*Bの計算式を示し、AはM*Nの次元を有する行列であり、BはN*Kの次元を有する行列である。本発明の実施形態では、M、N及びKは正の整数である。計算を通じて行列C内の1つのデータを取得するために、行列A内の行ベクトル内のデータ及び行列B内の列ベクトル内の対応するデータに対して点乗算演算が実行される必要があり、次いで、加算が実行される。言い換えると、計算を通じて行列C内の1つのデータを取得するために、N個の乗算演算が実行される必要がある。この場合、計算を通じて行列Cを取得するために、M*N*K個の乗算演算が実行される必要がある。
【００３４】
演算アクセラレータ50が本発明の実施形態において提供される。図５に示すように、演算アクセラレータ50は、第1のメモリ501と、第2のメモリ502と、演算回路503と、コントローラ504とを含む。演算回路503は、バスを使用することにより、第1のメモリ501及び第2のメモリ502とデータ通信を実行してもよい。演算回路503は、第1のメモリ501及び第2のメモリ502から行列データを抽出し、乗算演算を実行するように構成される。コントローラ504は、予め設定されたプログラム又は命令に従って、乗算演算を完了するように演算回路503を制御するように構成される。
【００３５】
第1のメモリ501は、第1の行列を記憶するように構成され、第1の行列はM*N行列である。行列Aが第1の行列である場合、第1の行列A内の行i及び列jの要素はAijと記されてもよい。本発明のこの実施形態で言及される第1のメモリ501と、以下に言及される第2のメモリ502、第3のメモリ506及び記憶ユニットはそれぞれ、レジスタ、ランダムアクセスメモリ(random  access  memory,  略称RAM)、スタティックランダムアクセスメモリ、フラッシュメモリ、又は他の読み取り可能且つ書き込み可能なメモリでもよい。
【００３６】
第2のメモリ502は、第2の行列を記憶するように構成され、第2の行列はN*K行列である。行列Bが第2の行列である場合、第2の行列B内の行j及び列gの要素はBjgと記されてもよい。
【００３７】
M、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である。M、N及びKの中のいずれかの2つのパラメータが等しくてもよく、或いは、全てのM、N及びKが等しくてもよい。
【００３８】
図６に示すように、演算回路503は、1つ以上の行列乗算回路5031と、1つ以上の加算回路5032とを含んでもよい。1つの加算回路5032は、1つの行列乗算回路5031に対応してもよい。1つの加算回路5032は、代替として、複数の行列乗算回路5031に対応してもよい。演算回路503に含まれる複数の行列乗算回路5031は、それぞれの行列乗算演算を独立して実行してもよい。図６は、演算回路503が2つの行列乗算回路5031を含む例を使用することにより描かれている。行列乗算回路5031は演算ブロックを含むM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、演算ユニットは、第1のメモリ及び第2のメモリにより送信されたデータを受信するためにそれぞれ使用される2つの入力を備え、演算ユニットは、2つのデータを一緒に乗算する。加算回路5032は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される。
【００３９】
コントローラ504は、第1の行列と第2の行列との積を計算するために、以下の動作、すなわち、
第2の行列のK個の列ベクトルを各演算グループのK個の演算ブロックにそれぞれ書き込む動作であり、第2の行列のベクトルの第g列内の第jのデータが、各演算グループ内の第gの演算ブロック内の第jの演算ユニットに書き込まれ、演算回路503は、コントローラ504の制御下で、第2のメモリ502内の第2の行列内のデータを読み取り、第2の行列内のデータを各演算グループのK個の演算ブロックにバッファリングしてもよく、或いは、コントローラ504は、第2の行列内のデータを演算回路503内の各演算グループのK個の演算ブロックに書き込むように第2のメモリ502を制御してもよい、動作と、
第1の行列のM個の行ベクトルをM個の演算グループにそれぞれ送信する動作であり、第1の行列の第iの行ベクトルがM個の演算グループ内の第iの演算グループに送信され、第iの演算グループ内の各演算ブロック内の第jの演算ユニットが第iの行ベクトル内の第jのデータを受信し、演算回路503は、コントローラ504の制御下で、第1のメモリ501内の第1の行列内のデータを読み取ってもよく、或いは、コントローラ504は、第1の行列内のデータを演算回路503内のM個の演算グループに送信するように第1のメモリ501を制御してもよく、
それにより、M個の演算グループ内の各演算ユニットが、演算ユニットにより受信された2つのデータに対して乗算演算を実行し、加算回路5032が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、第3の行列は、第1の行列と第2の行列との積であり、第3の行列内の行i及び列gの要素は、第iの演算グループ内の第gの演算ブロックの計算結果である、動作と
を実行してもよい。
【００４０】
任意選択で、第1のメモリ501は、第1のバスを使用することにより演算回路503に接続され、第1のバスのビット幅は、Wi*N*Mである。第2のメモリ502は、第2のバスを使用することにより演算回路503に接続され、第2のバスのビット幅は、Wi*Nである。Wiは、演算ユニットにより許容される入力データの最大ビット幅である。
【００４１】
具体的には、Wiは、演算ユニットの入力データのタイプに基づいて設定されてもよい。例えば、int(整数)8タイプのデータは8ビットのビット幅を有し、fp(浮動小数点数)16タイプのデータは16ビットのビット幅を有し、fp32タイプのデータは32ビットのビット幅を有する等である。演算ユニットにより許容される出力データのビット幅は、演算ユニットの計算結果の範囲に基づいて設定されてもよく、或いは、他の方式で決定されてもよい。例えば、演算アクセラレータ50が、入力行列と重み行列との積を計算するように構成されるとき、入力行列内のデータ及び重みデータ内のデータは、双方ともint8タイプであり、演算ユニットの出力結果もまた、int8タイプに設定されてもよい。この場合、出力データのビット幅は、入力データのビット幅に等しい。明らかに、演算ユニットの出力データは、int16タイプに変換されてもよい。この場合、出力データのビット幅は16ビットである。さらに、出力データのビット幅は、代替として、他の実際の要件に基づいて設計されてもよい。
【００４２】
具体的には、図６に示す演算回路503内の演算ブロック及び演算ユニットの配置方式に基づいて、図７は、演算回路503における具体的な配線の概略図である。
【００４３】
上記の実施形態に基づいて、演算回路503は、M*N*K個の演算ユニットを含むことが習得できる。図６及び図７を参照すると、これらの演算ユニットは、M個の演算グループに分類され、各演算グループは、N*K個の演算ユニットを含み、N*K個の演算ユニットは、K個の演算ブロックを形成するようにK個の列に配置され、各演算ブロックは、N個の演算ユニットを含む。
【００４４】
行列乗算演算を正式に実行する前に、演算アクセラレータ50は、事前に第2の行列内のデータをM個の演算グループにロードする必要がある。同じ第2の行列が全ての演算グループに使用されるので、第2のメモリ502は、ブロードキャストを通じて第2の行列内のデータをロードしてもよい。
【００４５】
図７を参照すると、演算回路503と第2のメモリ502との間に、ビット幅がWi*Nである第2のバスが存在し(Wiは演算ユニットにより許容される入力データの最大ビット幅であり、Nは1つの演算ブロック内の演算ユニットの数であり、この場合、第2のバスの幅はWi*Nである)、第2のバスは、データをブロードキャストし、M個の演算グループ内の1つの演算ブロックに対して列ベクトルのブロードキャストを毎回実行するように構成される。具体的には、第2の行列内の1つの列ベクトルは、まずM個のコピーに複製されてもよく、次いで、列ベクトルのM個のコピーは、M個の演算グループ内の対応する演算ブロックにブロードキャストされる。各演算ブロックにロードされる列ベクトルについては、図８を参照する。第2のメモリ502が、1つの列ベクトルをブロードキャストするために1つのサイクルを必要とする場合(サイクルは、特定のクロック信号に基づいて設定されるクロックサイクルでもよく、或いは、他の制御信号に基づいて生成される処理サイクルでもよい)、第2の行列内の全ての列ベクトルのブロードキャストを完了するためにK個のサイクルが必要とされる。
【００４６】
例えば、図６に示す演算グループ内の演算ブロックの配置方式に基づいて、行列Bが第2の行列である場合、第2の行列Bが
【数１】
2020526830.tif 000003
であると仮定する。この場合、N=5且つK=4である。第2の行列B内の4つの列ベクトルが4つの演算グループ内の4つの演算ブロックにそれぞれ書き込まれた後の演算ユニット内のデータについては、図９を参照する。
【００４７】
演算回路503と第1のメモリ501との間に、ビット幅がWi*N*Mである第1のバスが存在し(Wiは演算ユニットにより許容される入力データの最大ビット幅であり、Nは1つの演算ブロック内の演算ユニットの数であり、Mは演算グループの数であり、この場合、第1のバスの幅はWi*N*Mである)、第1のバスは、第1の行列内のデータを送信するように構成される。各演算グループに入力されるデータのビット幅はWi*Nである。各演算グループは、第1の行列の1つの行ベクトルを受信し、各演算グループ内の全ての演算ブロックにより同時に受信される行ベクトルは同じであり、演算グループにより受信される行ベクトルは異なる。具体的には、演算グループに送信されるべき第1の行列内の行ベクトルは、演算グループ内でK個のコピーに重複されてもよく、行ベクトルのK個のコピーは、演算グループ内のK個の演算ブロックにそれぞれ送信される。各演算ブロックにロードされる行ベクトルについては、図１０を参照する。各演算グループ内の1つの列における演算ユニットが同じデータを使用するので、第1のメモリ501は、行ブロードキャストを通じてデータを演算ユニットに送信してもよい。合計でM個の演算グループが存在するので、次元がM*Nである行列が1つのサイクル内で送信されてもよい。
【００４８】
例えば、図６に示す演算グループ内の演算ブロックの配置方式に基づいて、行列Aが第1の行列である場合、第1の行列Aが
【数２】
2020526830.tif 000004
であると仮定する。この場合、M=4且つN=5である。第2の行列A内の4つの行ベクトルが4つの演算グループにそれぞれ送信された後の演算ユニット内のデータについては、図１１を参照する。4つの演算グループ内の演算ユニットにより計算されたデータについては、図１２を参照する。各演算ブロック内の演算ユニットの計算結果は、第1の行列Aと第2の行列Bとの積、すなわち、第3の行列Cを取得するために加算される。
【００４９】
本発明のこの実施形態において提供される方法が畳み込みニューラルネットワークに適用されるとき、第1の行列は入力行列でもよく、第2の行列は重み行列でもよい。
【００５０】
本発明のこの実施形態において提供される方法では、M個の演算グループがM*N*K個の演算ユニットを含むので、演算アクセラレータは、1つのクロックサイクル内でM*N*K個の乗算演算を実行し得る。この場合、演算アクセラレータ50は、M*N行列とN*K行列との積を計算し得る。従来技術と比較して、この方法は、行列乗算演算により必要とされる時間を大幅に低減できる。
【００５１】
任意選択で、1つの行列乗算回路5031が1つの加算回路5032に対応するとき、加算回路5032は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、加算木は、対応する演算ブロック内のN個の演算ユニットに接続され、加算木は、加算木に接続されたN個の演算ユニットの計算結果を加算するように構成される。
【００５２】
演算ブロック内の全てのN個の演算ユニットの計算結果について累算演算が実行される必要があり、それにより、演算ブロックの計算結果が取得できる点に留意すべきである。蓄積演算は、図１３に示す加算木を使用することにより、1つの演算ブロック内の全ての演算ユニットの計算結果に対して具体的に実行されてもよい。加算木は、実質的に一連の加算器の組み合わせであり、接続方式が図１３に示されている。この場合、加算木はN個の演算ユニットの計算結果を加算する必要があるので、加算木の出力結果のビット幅はWaにより記され、Waは加算木の出力結果の範囲に依存する。各演算ユニットの計算結果のビット幅がWoである場合、加算木が累算を実行した後に取得された演算ブロックの出力結果は、Woにより示されることができる最大範囲を超える可能性がある。したがって、通常では、演算ブロックの出力結果を示すために、より大きいビット幅が使用される必要がある。例えば、演算ユニットの入力データの最大ビット幅は8ビットであり、加算木の出力データのビット幅は32ビットに設定されてもよい。
【００５３】
代替として、1つの加算回路5032は、複数の行列乗算回路5031に対応してもよい。1つの場合、1つの行列乗算回路5031は、M*K個の加算木に対応してもよく、複数の行列乗算回路5031に対応するM*K個の加算木は、1つの加算回路5032に配備されてもよい。図６を参照すると、図６に示す演算回路503に含まれる加算回路5032は、2つの行列乗算回路5031に対応する。この場合、加算回路5032は、2*M*K個の加算木を含み、2*M*K個の加算木のうちM*K個は、2つの行列乗算回路5031のうち一方におけるM*K個の演算ブロック内の演算ユニットにより出力される計算結果を加算するように構成され、2*M*K個の加算木のうち他方のM*K個の加算木は、2つの行列乗算回路5031内の他方の行列乗算回路5031におけるM*K個の演算ブロック内の演算ユニットにより出力される計算結果を加算するように構成される。
【００５４】
1つの場合、図１４を参照すると、演算ユニットは、記憶ユニットに書き込まれるデータを記憶するように構成された記憶ユニットと、記憶ユニットに接続された乗算回路であり、受信データと記憶ユニットに記憶されたデータとの積を計算するように構成された乗算回路とを含む。具体的には、説明を容易にするために、演算ユニット内の第1の行列内のデータは「第1のデータ」と呼ばれ、第2の行列内のデータは第2のデータと呼ばれる。この場合、図１４を参照すると、記憶ユニットは、第2のデータを記憶するように構成されてもよい。乗算回路は、第1のデータ及び第2のデータを入力し、計算結果を出力するように構成されたインタフェースを更に含んでもよい。記憶ユニットは、第2のデータを書き込むように構成されたインタフェースを更に含んでもよい。
【００５５】
他の場合、図１５を参照すると、演算ユニットは、複数の記憶ユニット(図１５は、演算ユニットが2つの記憶ユニットを含む例を使用することにより描かれている)と、乗算回路と、複数の記憶ユニットに接続された第1の選択回路と、複数の記憶ユニット及び乗算回路に接続された第2の選択回路とを含む。
【００５６】
複数の記憶ユニットは、データを記憶するように構成される。
【００５７】
第1の選択回路は、乗算回路が乗算演算を実行する前に、複数の記憶ユニットから、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成される。
【００５８】
第2の選択回路は、乗算回路が乗算演算を実行するときに、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成される。
【００５９】
乗算回路は、受信データと第2の選択回路により選択された記憶ユニットに記憶されたデータとの積を計算するように構成される。
【００６０】
具体的には、複数の記憶ユニットは、異なる行列内のデータを記憶してもよい。第1の選択回路は、行列内のデータが記憶される記憶ユニットを選択してもよい。
【００６１】
記憶ユニットは、2つのblock(ブロック)に分割されてもよい。演算ユニットが複数の記憶ユニットを含むとき、演算ユニットが1つの記憶ユニット内の1つのblock内のデータに基づいて乗算演算を実行する場合、コントローラ504は、複数の記憶ユニット内の他の記憶ユニット又は乗算演算に関与する記憶ユニット内の他のblockにデータを更に書き込んでもよく、それにより、演算ユニットの作業効率を改善する。
【００６２】
図１５を参照すると、行列乗算回路5031が、第1の行列Aと第2の行列Bとの積を計算する必要があり、さらに、第1の行列Aと行列Dとの積を計算する必要がある場合、コントローラ504は、第2の行列Bと行列Dとの双方内のデータを、演算ユニットの記憶ユニットに書き込んでもよい。第1の選択回路は、第2の行列B内の第2のデータ0を記憶ユニット0に書き込み、行列D内の第2のデータ1を記憶ユニット1に書き込むことを選択してもよい。乗算回路が第1のデータ及び第2のデータ0に対して乗算演算を実行するとき、第2の選択回路は、記憶ユニット0内の第2のデータ0を乗算回路に出力することを選択し、乗算回路が第1のデータ及び第2のデータ1に対して乗算演算を実行するとき、第2の選択回路は、記憶ユニット1内の第2のデータ1を乗算回路に出力することを選択する。
【００６３】
この場合、各演算ユニットは、4つの入力、すなわち、第1のデータ、第2のデータ及び2つのレジスタ選択信号を受信する。一方のレジスタ選択信号は、乗算回路が乗算演算を実行する前に、複数の記憶ユニットから、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように、第1の選択回路を制御するために使用される。他方のレジスタ選択信号は、乗算回路が乗算演算を実行するときに、乗算回路が乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように、第2の選択回路を制御するために使用される。
【００６４】
任意選択で、図１６を参照すると、演算アクセラレータ50は、第1のメモリ501、第2のメモリ502及びコントローラ504に接続された記憶ユニットアクセスコントローラ505を更に含んでもよい。
【００６５】
記憶ユニットアクセスコントローラ505は、コントローラ504の制御下で、第1の行列及び第2の行列を取得し、第1の行列を第1のメモリ501に保存し、第2の行列を第2のメモリ502に保存するように構成される。
【００６６】
記憶ユニットアクセスコントローラ505は、ダイレクトメモリアクセスコントローラ504(Direct  Memory  Access  Controller,  略称DMAC)又はロード/記憶ユニットでもよい。
【００６７】
任意選択で、図１６を参照すると、演算アクセラレータ50は、
第1の行列のソースデータを記憶するように構成された第3のメモリ506と、
第1のメモリ501、第2のメモリ502、第3のメモリ506及びコントローラ504に接続された記憶ユニットアクセスコントローラ505であり、記憶ユニットアクセスコントローラ505は、コントローラ504の制御下で、第1の行列のソースデータ及び第2の行列を取得し、第1の行列のソースデータを第3のメモリ506に保存し、第2の行列を第2のメモリ502に保存するように構成される、記憶ユニットアクセスコントローラ505と、
第1のメモリ501、第3のメモリ506及びコントローラ504に接続されたベクトル計算ユニット(vector  unit)507であり、ベクトル計算ユニット507は、コントローラ504の制御下で、第1の行列のソースデータを第1の行列に変換し、第1の行列を第1のメモリ501に保存するように構成される、ベクトル計算ユニット507と
を更に含んでもよい。
【００６８】
具体的には、適用シナリオにおいて、記憶ユニットアクセスコントローラ505により取得されるデータは、直接的には第1の行列ではない。この場合、記憶ユニットアクセスコントローラ505は、取得されたデータ(すなわち、第1の行列のソースデータ)を第3のメモリ506に保存してもよい。ベクトル計算ユニット507は、第1の行列を取得するために、第3のメモリ506内の第1の行列のソースデータを変換してもよい。
【００６９】
例えば、演算アクセラレータ50が、第1の行列が5*4行列であり、第1の行列のソースデータが4*4行列であることを必要とする場合、ベクトル計算ユニット507は、第1の行列のソースデータを、全てのデータが0である行ベクトルでパディング(padding)し、第1の行列を取得してもよい。例えば、第1の行列のソースデータが
【数３】
2020526830.tif 000005
である場合、第1の行列は
【数４】
2020526830.tif 000006
である。
【００７０】
他の例では、演算アクセラレータ50が、第1の行列が2*4行列であり、第1の行列のソースデータが4*4行列であることを必要とする場合、ベクトル計算ユニット507は、第1の行列として、第1の行列のソースデータ内のベクトルの最初の2つの行を含む行列を決定してもよい。例えば、第1の行列のソースデータが
【数５】
2020526830.tif 000007
である場合、第1の行列は
【数６】
2020526830.tif 000008
である。
【００７１】
或る場合、図１７を参照すると、第3のメモリ506は、演算回路503に接続され、第3のメモリ506は、第3の行列を記憶するように更に構成される。この場合、第3のメモリ506は、下記の累算器508を使用することにより演算回路503に更に接続されてもよい。演算回路503は、計算結果を累算器508に出力してもよい。累算器508は、第3の行列を第3のメモリに保存してもよい。
【００７２】
他の場合、図１６を参照すると、演算アクセラレータ50は、演算回路503、ベクトル計算ユニット507及びコントローラ504に接続された累算器508を更に含む。
【００７３】
累算器508は、コントローラ504の制御下で、第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成される。
【００７４】
ベクトル計算ユニット507は、コントローラ504の制御下で、第5の行列を第3のメモリ506に保存するように更に構成される。
【００７５】
第3の行列は、第1の行列と第2の行列との積であり、第1の行列は、第1の計算対象の行列の第1の部分を含み、第1の計算対象の行列の第1の部分は、第1の計算対象の行列の第1〜第N列の要素であり、第2の行列は、第2の計算対象の行列の第1の部分であり、第2の計算対象の行列の第1の部分は、第2の計算対象の行列の第1〜第N行の要素であり、第1の計算対象の行列は、M個の行の要素を含み、第2の計算対象の行列は、K個の列の要素を含み、第4の行列は、第1の計算対象の行列の第2の部分と第2の計算対象の行列の第2の部分との積であり、第1の計算対象の行列の第2の部分は、第1の計算対象の行列における第1の部分以外の部分であり、第2の計算対象の行列の第2の部分は、第2の計算対象の行列における第1の部分以外の部分である。
【００７６】
本発明のこの実施形態において提供される演算アクセラレータ50は、M*N行列とN*K行列との積を計算し得る点に留意すべきである。しかし、実際の演算では、計算される必要がある行列の次元は、M*N及びN*Kよりも大きくてもよく或いは小さくてもよい。計算される必要がある行列の次元がM*N及びN*Kよりも大きいとき、演算アクセラレータ50が計算を実行する毎に、計算される必要がある2つの行列の積の最終結果の部分的な結果のみが取得でき、複数のループ反復が更に必要とされ、部分的な結果が加算され、それにより、計算される必要がある2つの行列の積を取得する。
【００７７】
実質的に、計算される必要がある行列が或る程度まで変換された後に、本発明のこの実施形態において提供される演算アクセラレータ50は、いずれかの行数及び列数を有する2つの行列に対して乗算演算を実行してもよい。具体的な実現方式は以下の通りである。
【００７８】
演算アクセラレータ50がQ*R行列とR*T行列との積を計算する必要がある場合、以下の2つの場合が生じる。
【００７９】
場合1:QがMよりも小さく、RがNよりも小さく、TがKよりも小さい。
【００８０】
この場合、Q*R行列は、パディングを通じてM*N行列に再形成されてもよく、R*T行列は、パディングを通じてN*K行列に再形成されてもよく、次いで、本発明のこの実施形態において提供される演算アクセラレータ50は、行列乗算演算を実行するために使用される。具体的なパディング方法は、行列の周りに要素0でパディングすることであり、それにより、行列は、必要とされる行数及び列数を有する行列に変化する。例えば、M=N=8であるとき、図１８は、パディングを通じて4*5行列及び5*8行列を8*8行列に別々に再形成する例を示す。
【００８１】
場合2:QがMよりも大きいか、RがNよりも大きいか、或いは、TがKよりも大きい。
【００８２】
この場合、QがMよりも大きいとき或いはRがNよりも大きいとき、Q*R行列は、M*N行列に区分けされる必要があり、区分けの前に、Q*R行列は、パディングを通じて、行数がMの倍数であり列数がNの倍数である行列に再形成される必要がある。RがNよりも大きいとき或いはTがKよりも大きいとき、R*T行列は、N*K行列に区分けされる必要があり、区分けの前に、R*T行列は、パディングを通じて、行数がNの倍数であり列数がKの倍数である行列に再形成される必要がある。
【００８３】
Q*R行列の行数がMの2倍であり、Q*R行列の列数がNの2倍であり、R*T行列の行数がNの2倍であり、R*T行列の列数がKの2倍であると仮定する。Q*R行列は、
【数７】
2020526830.tif 000009
として記される4つのM*N行列に区分けされてもよく、A1、B1、C1及びD1はそれぞれM*N行列である。R*T行列は、
【数８】
2020526830.tif 000010
として記される4つのN*K行列に区分けされてもよく、A2、B2、C2及びD2はそれぞれN*K行列である。Q*R行列とR*T行列との積Sは、
【数９】
2020526830.tif 000011
である。
【００８４】
行列Sは、
【数１０】
2020526830.tif 000012
と
【数１１】
2020526830.tif 000013
との積を計算することにより取得されてもよい。
【数１２】
2020526830.tif 000014
と
【数１３】
2020526830.tif 000015
との積を計算するために、M*N行列とN*K行列との8つの乗算演算が完了する必要がある。M*N行列とN*K行列の8つの乗算演算は、A1A2、B1C2、A1B2、B1D2、C1A2、D1C2、C1B2及びD1D2である。8つの行列乗算演算は、演算回路503において8つの行列乗算回路5031を構成することにより完了してもよく、或いは、演算回路503において8つ以下の行列乗算回路5031により完了してもよい。例えば、2つの行列乗算回路5031が、8つの行列乗算演算を完了するために、4つの行列乗算演算をそれぞれ完了する。
【００８５】
8つの行列乗算演算が完了した後に、
【数１４】
2020526830.tif 000016
から、A1A2及びB1C2が行列Sの第1行及び第1列の要素を取得するために加算され、A1B2及びB1D2が行列Sの第1行及び第2列の要素を取得するために加算され、C1A2及びD1C2が行列Sの第2行及び第1列の要素を取得するために加算され、C1B2及びD1D2が行列Sの第2行及び第2列の要素を取得するために加算されることが習得できる。A1A2及びB1C2が例として使用される。A1A2及びB1C2はそれぞれM*K行列である。したがって、A1A2及びB1C2内の対応する位置における要素が加算され、次いで、行列Sの第1行及び第1列(ここでの行列Sの行及び列は
【数１５】
2020526830.tif 000017
により示される行及び列である)の要素が取得できる。
【００８６】
具体的には、
【数１６】
2020526830.tif 000018
及び
【数１７】
2020526830.tif 000019
内のいずれか2つの要素の積の計算結果が累算器508に記憶されてもよい。累算器508は、行列Sを取得するために、計算結果に対して加算演算を実行する。
【００８７】
Q*R行列及びR*T行列が4つの行列に区分けされることが、上記における説明の例として使用されている。実際には、Q*R行列及びR*T行列は、2つ、6つ又は8つの行列等に区分けされてもよい。計算原理は、上記のものと同じである。詳細は、ここでは再び説明しない。
【００８８】
例えば、M=N=K=3であると仮定する(この場合、行列Aの行数と列数のどちらも3ではなく、行列Bの行数と列数のどちらも3ではないので、行列Aは第1の行列ではなく、行列Bは第2の行列ではない)。行列
【数１８】
2020526830.tif 000020
と行列
【数１９】
2020526830.tif 000021
との積を計算するために、行列Aは4*5行列であるので、行列Aはパディングを通じて行列
【数２０】
2020526830.tif 000022
に再形成される必要があり、行列Bは5*4行列であるので、行列Bはパディングを通じて行列
【数２１】
2020526830.tif 000023
に再形成される必要がある。
【００８９】
図１９を参照すると、行列A及び行列Bは、4つの3*3行列に別々に区分けされてもよい。この場合、行列Aと行列Bとの積を計算するために、3*3行列の8つの乗算演算が実行される必要がある。3*3行列の8つの乗算演算は、A1A2、B1C2、A1B2、B1D2、C1A2、D1C2、C1B2及びD1D2である。A1A2の計算結果は
【数２２】
2020526830.tif 000024
であり、A1A2の計算結果が取得された後に、結果が累算器508に記憶される。B1C2の計算結果は
【数２３】
2020526830.tif 000025
であり、B1C2の計算結果が取得された後に、結果が累算器508に記憶される。累算器508は、
【数２４】
2020526830.tif 000026
を取得するために、A1A2及びB1C2内の対応する位置における要素を加算し、
【数２５】
2020526830.tif 000027
すなわち、行列Aと行列Bとの積の最初の3つの行及び最初の3つの列の共通領域内のデータである。行列Aと行列Bとの積の他の位置におけるデータも同様に計算される。詳細は、ここでは再び説明しない。
【００９０】
ベクトル計算ユニット507は、M*K個の演算ユニットを含んでもよい。ベクトル計算ユニット507は、必要に応じて、累算器508により出力されたデータに対してベクトル乗算、ベクトル加算、指数演算、対数演算又は次元比較のような更なる処理を実行してもよい。例えば、ベクトル計算ユニット507は、プーリング(pooling)、バッチ正規化(batch  normalization)又は局所応答正規化(local  response  normalization)のような、畳み込みニューラルネットワーク内の非畳み込み/非FC層のネットワーク計算を実行するように具体的に構成されてもよい。図１６を参照すると、ベクトル計算ユニット507が累算器508により出力されたデータに対して更なる処理を実行しない場合、累算器508は、第5の行列を第3のメモリ506に直接保存してもよい点に留意すべきである。
【００９１】
任意選択で、図１６及び図１７を参照すると、演算アクセラレータ50は、
コントローラ504に接続された命令フェッチバッファ(instruction  fetch  buffer)509であり、コントローラ504により使用される命令を記憶するように構成された命令フェッチバッファ509と、
命令フェッチバッファ509、記憶ユニットアクセスコントローラ505及び外部メモリに接続されたバスインタフェースユニット510(Bus  Interface  Unit,  略称BIU)であり、外部メモリから命令を取得するために命令フェッチバッファ509により使用され、外部メモリから第1の行列のソースデータ、第1の行列及び第2の行列のうち少なくとも1つを取得するために記憶ユニットアクセスコントローラ505により更に使用されるバスインタフェースユニット510と
を更に含んでもよい。
【００９２】
具体的には、図１６及び図１７を参照すると、本発明のこの実施形態において提供される演算アクセラレータ50は、中央処理装置(Central  Processing  Unit,  略称CPU)に搭載されたコプロセッサとして使用されてもよく、CPUは、計算タスクを演算アクセラレータ50に割り当てる。具体的には、CPUは、第1の行列、第2の行列及び命令を外部メモリに記憶してもよい。演算アクセラレータ50は、外部メモリから第1の行列、第2の行列及び命令を読み取ることにより行列乗算演算を完了してもよい。外部メモリは、具体的には、ダブルデータレート・シンクロナス・ダイナミックランダムアクセスメモリ(Double  Data  Rate  Synchronous  Dynamic  Random  Access  Memory,  略称DDR)又は他の読み取り可能且つ書き込み可能なメモリでもよい。外部メモリは、演算アクセラレータ50に対してプライベートなメモリでもよい。具体的には、第1のメモリ501、第2のメモリ502、第3のメモリ506及び命令フェッチバッファ509は、通常では、オンチップバッファ(On-Chip  Buffer)である。
【００９３】
例えば、演算アクセラレータ50は、畳み込みニューラルネットワークに適用される。図２０を参照すると、演算アクセラレータ50内のコントローラ504が、重み行列と入力行列との積の計算を完了するように演算アクセラレータ50を制御するプロセスは、以下のステップを具体的に含んでもよい。
【００９４】
2001.DMACは、DDRから重み行列を取得し、重み行列を第2のメモリ502に書き込む。
【００９５】
2002.DMACは、DDRから入力行列を取得し、入力行列を第1のメモリ501に送信する。
【００９６】
2003.演算回路503は、第2のメモリ502から重み行列を読み取り、重み行列のK個の列ベクトルを各演算グループのK個の演算ブロックにそれぞれ書き込む。
【００９７】
2004.演算回路503は、第1のメモリ501から入力行列を読み取り、入力行列内のM個の行ベクトルをM個の演算グループにそれぞれ送信する。
【００９８】
2005.演算回路503は、行列乗算計算を実行し、第3の行列を出力する。
【００９９】
第3の行列は、重み行列と入力行列との積である。
【０１００】
2006.演算回路503は、第3の行列を累算器508にバッファリングする。
【０１０１】
2007.累算器508は、第3の行列が最終結果であるか否かを決定する。
【０１０２】
はいである場合、プロセスは終了する。いいえである場合、ステップ2001に戻る。
【０１０３】
上記のステップの具体的な実現方式及び関連する説明については、上記の説明を参照する。詳細は、ここでは再び説明しない。演算アクセラレータ50は、行列乗算演算を正式に開始する前に、ステップ2001〜ステップ2004を完了する必要がある。ステップ2001〜ステップ2004の実行順序は、図２０に厳密に従う必要はなく、ステップ2003がステップ2001の後であり、ステップ2004がステップ2002の後であり、ステップ2005がステップ2004の後であることが確保されることのみが必要である。
【０１０４】
演算アクセラレータ50は、CPUに搭載されたコプロセッサとして使用されてもよい。したがって、CPUが行列乗算演算を実行するように演算アクセラレータ50を制御するプロセスについて簡単に説明する。図２１に示すように、プロセスは、以下のステップを具体的に含んでもよい。
【０１０５】
2101.CPUはタスクのスケジューリングを開始する。
【０１０６】
タスクは行列乗算演算タスクである。
【０１０７】
2102.CPUは重み行列を用意する。
【０１０８】
2103.CPUは重み行列をDDRに複製する。
【０１０９】
2104.CPUは入力データ及び命令を用意する。
【０１１０】
2105.CPUは入力データ及び命令をDDRに複製する。
【０１１１】
2106.CPUは、演算アクセラレータ50内の命令フェッチバッファ509に命令を入れる。
【０１１２】
このステップの後に、CPUは動作2107及び2108を実行し、演算アクセラレータ50は動作2109〜2113を実行する。
【０１１３】
2107.CPUは割込を受信する。
【０１１４】
割込は、演算アクセラレータ50が計算結果を取得するために行列乗算演算を実行して計算結果をDDRに書き込んだ後にCPUに送信される割込であり、割込は、計算結果を処理するためにCPUにより使用される。
【０１１５】
2108.CPUは割込を処理する。
【０１１６】
依然として入力データが存在する場合、ステップ2104に戻る。入力データが存在しない場合、処理は終了する。
【０１１７】
2109.演算アクセラレータ50は命令フェッチバッファ509から命令を読み取る。
【０１１８】
2110.演算アクセラレータ50はタスクの実行を開始する。
【０１１９】
2111.演算アクセラレータ50は命令に従って行列乗算演算を実行する。
【０１２０】
2112.演算アクセラレータ50は計算結果をDDRに書き込む。
【０１２１】
2113.演算アクセラレータ50は割込をCPUに送信する。
【０１２２】
上記の実施形態の全部又は一部は、ソフトウェア、ハードウェア、ファームウェア又はこれらのいずれかの組み合わせを通じて実現されてもよい。ソフトウェアプログラムが実施形態を実現するために使用されるとき、実施形態は、完全に或いは部分的にコンピュータプログラムプロダクトの形式で実現されてもよい。コンピュータプログラムプロダクトは、1つ以上のコンピュータ命令を含む。コンピュータプログラム命令がコンピュータ上にロードされて実行されたとき、この出願の実施形態による手順又は機能が、全部或いは部分的に生成される。コンピュータは、汎用コンピュータ、専用コンピュータ、コンピュータネットワーク又は他のプログラム可能装置でもよい。コンピュータ命令は、コンピュータ読み取り可能記憶媒体に記憶でき、或いは、1つのコンピュータ読み取り可能記憶媒体から他のコンピュータ読み取り可能記憶媒体に送信できる。例えば、コンピュータ命令は、有線(例えば、同軸ケーブル、光ファイバ又はデジタル加入者回線(Digital  Subscriber  Line,  略称DSL))又は無線(例えば、赤外線、無線又はマイクロ波)方式で、1つのウェブサイト、コンピュータ、サーバ又はデータセンタから他のウェブサイト、コンピュータ、サーバ、又はデータセンタに送信できる。コンピュータ読み取り可能記憶媒体は、コンピュータにアクセス可能ないずれかの使用可能媒体、又は1つ以上の使用可能媒体を統合するサーバ又はデータセンタのようなデータ記憶デバイスでもよい。使用可能媒体は、磁気媒体(フロッピーディスク、ハードディスク又は磁気テープ等)、光媒体(DVD等)、半導体媒体(ソリッドステートディスク(Solid  State  Disk,  略称SSD)等)等でもよい。
【０１２３】
この出願は、実施形態を参照して説明されているが、保護を請求するこの出願を実現するプロセスにおいて、当業者は、添付の図面、開示の内容及び添付の特許請求の範囲を閲覧することにより、開示された実施形態の他の変形を理解して実現し得る。特許請求の範囲において、「含む」(comprising)は、他の構成要素又は他のステップを除外せず、「1つ」は、複数の場合を除外しない。単一のプロセッサ又は他のユニットは、特許請求の範囲に列挙されるいくつかの機能を実現してもよい。いくつかの手段は、互いに異なる従属請求項に記録されるが、これは、これらの手段がより良い効果を生み出すように組み合わされることができないことを意味するのではない。
【０１２４】
この出願は、具体的な特徴及びその実施形態を参照して記載されているが、明らかに、この出願の真意及び範囲から逸脱することなく、様々な修正及び組み合わせがそれらに対して行われてもよい。対応して、明細書及び添付の図面は、添付の特許請求の範囲により定義されるこの出願の単なる例示の説明であり、この出願の範囲をカバーする修正、変形、組み合わせ又は均等物のいずれか又は全部と考えられる。明らかに、当業者は、この出願の真意及び範囲から逸脱することなく、この出願に様々な修正及び変更を行うことができる。この出願は、以下の特許請求の範囲及びそれらの等価な技術により定義される保護の範囲内に入ることを条件として、この出願のこれらの修正及び変形をカバーすることを意図する。
【図１】
2020526830.tif 000028
【図２】
2020526830.tif 000029
【図３】
2020526830.tif 000030
【図４】
2020526830.tif 000031
【図５】
2020526830.tif 000032
【図６】
2020526830.tif 000033
【図７】
2020526830.tif 000034
【図８】
2020526830.tif 000035
【図９】
2020526830.tif 000036
【図１０】
2020526830.tif 000037
【図１１】
2020526830.tif 000038
【図１２】
2020526830.tif 000039
【図１３】
2020526830.tif 000040
【図１４】
2020526830.tif 000041
【図１５】
2020526830.tif 000042
【図１６】
2020526830.tif 000043
【図１７】
2020526830.tif 000044
【図１８】
2020526830.tif 000045
【図１９】
2020526830.tif 000046
【図２０】
2020526830.tif 000047
【図２１】
2020526830.tif 000048
【手続補正書】
【提出日】令和2年2月20日(2020.2.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算アクセラレータであって、
第1の行列を記憶するように構成された第1のメモリであり、前記第1の行列はM*N行列である、第1のメモリと、
第2の行列を記憶するように構成された第2のメモリであり、前記第2の行列はN*K行列である、第2のメモリと、
前記第1のメモリ及び前記第2のメモリに接続された演算回路であり、前記演算回路は行列乗算回路と加算回路とを含み、前記行列乗算回路はM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含み、各演算ユニットは、前記第1のメモリ及び前記第2のメモリからそれぞれ2つのデータを受信し、前記演算ユニットは前記2つのデータを乗算し、前記加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算するように構成される、演算回路と、
前記演算回路に接続されたコントローラであり、前記コントローラが以下の動作、すなわち、
前記第2の行列のK個の列ベクトルを各演算グループの前記K個の演算ブロックにそれぞれ書き込む動作であり、前記第2の行列のベクトルの第g列内の第jのデータが、前記K個の演算ブロック内の第gの演算ブロック内の第jの演算ユニットに書き込まれる動作と、
前記第1の行列のM個の行ベクトルを前記M個の演算グループにそれぞれ送信する動作であり、前記第1の行列の第iの行ベクトルが前記M個の演算グループ内の第iの演算グループに送信され、前記第iの演算グループ内の各演算ブロック内の第jの演算ユニットが前記第iの行ベクトル内の第jのデータを受信し、
それにより、前記M個の演算グループ内の各演算ユニットが、前記演算ユニットにより受信された2つのデータに対して乗算演算を実行し、前記加算回路が、第3の行列を取得するために各演算ブロック内の演算ユニットの計算結果を加算し、前記第3の行列は前記第1の行列と前記第2の行列との積であり、前記第3の行列内の行i及び列gの要素は、前記第iの演算グループ内の第gの演算ブロックの計算結果であり、M、N及びKは0よりも大きい整数であり、iは0よりも大きくM+1よりも小さい整数であり、gは0よりも大きくK+1よりも小さい整数であり、jは0よりも大きくN+1よりも小さい整数である、動作と
を実行するように構成される、コントローラと
を含む演算アクセラレータ。
【請求項２】
前記加算回路は、M*K個の加算木を含み、1つの加算木は、1つの演算ブロックに対応し、前記加算木は、対応する前記演算ブロック内のN個の演算ユニットに接続され、前記加算木は、前記加算木に接続された前記N個の演算ユニットの計算結果を加算するように構成される、請求項１に記載の演算アクセラレータ。
【請求項３】
前記演算ユニットは、
第2のデータを記憶するように構成された記憶ユニットであり、前記第2のデータは、前記第2の行列からの前記データである、記憶ユニットと、
前記記憶ユニットに接続された乗算回路であり、第1のデータと前記記憶ユニットに記憶された前記第2のデータとの積を計算するように構成され、前記第1のデータは、前記第1の行列からの前記データである、乗算回路と
を含む、請求項１又は２に記載の演算アクセラレータ。
【請求項４】
前記演算ユニットは、複数の記憶ユニットと、乗算回路と、前記複数の記憶ユニットに接続された第1の選択回路と、前記複数の記憶ユニット及び前記乗算回路に接続された第2の選択回路とを含み、前記複数の記憶ユニットは、データを記憶するように構成され、
前記第1の選択回路は、前記乗算回路が乗算演算を実行する前に、前記複数の記憶ユニットから、前記乗算回路が前記乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、
前記第2の選択回路は、前記乗算回路が前記乗算演算を実行するときに、前記乗算回路が前記乗算演算を実行するときに使用されるデータを記憶するための記憶ユニットを選択するように構成され、
前記乗算回路は、受信データと前記第2の選択回路により選択された前記記憶ユニットに記憶された前記データとの積を計算するように構成される、請求項１又は２に記載の演算アクセラレータ。
【請求項５】
前記第1のメモリは、第1のバスを使用することにより前記演算回路に接続され、前記第1のバスのビット幅は、Wi*N*Mであり、前記第2のメモリは、第2のバスを使用することにより前記演算回路に接続され、前記第2のバスのビット幅は、Wi*Nであり、Wiは、前記演算ユニットにより許容される入力データの最大ビット幅である、請求項１乃至４のうちいずれか１項に記載の演算アクセラレータ。
【請求項６】
前記演算アクセラレータは、前記第1のメモリ、前記第2のメモリ及び前記コントローラに接続された記憶ユニットアクセスコントローラを更に含み、
前記記憶ユニットアクセスコントローラは、前記コントローラの制御下で、前記第1の行列及び前記第2の行列を取得し、前記第1の行列を前記第1のメモリに保存し、前記第2の行列を前記第2のメモリに保存するように構成される、請求項１乃至５のうちいずれか１項に記載の演算アクセラレータ。
【請求項７】
前記演算アクセラレータは、
前記第1の行列のソースデータを記憶するように構成された第3のメモリと、
前記第1のメモリ、前記第2のメモリ、前記第3のメモリ及び前記コントローラに接続された記憶ユニットアクセスコントローラであり、前記記憶ユニットアクセスコントローラは、前記コントローラの制御下で、前記第1の行列の前記ソースデータ及び前記第2の行列を取得し、前記第1の行列の前記ソースデータを前記第3のメモリに保存し、前記第2の行列を前記第2のメモリに保存するように構成される、記憶ユニットアクセスコントローラと、
前記第1のメモリ、前記第3のメモリ及び前記コントローラに接続されたベクトル計算ユニットであり、前記ベクトル計算ユニットは、前記コントローラの制御下で、前記第1の行列の前記ソースデータを前記第1の行列に変換し、前記第1の行列を前記第1のメモリに保存するように構成される、ベクトル計算ユニットと
を更に含む、請求項１乃至５のうちいずれか１項に記載の演算アクセラレータ。
【請求項８】
前記第3のメモリは、前記演算回路に接続され、前記第3のメモリは、前記第3の行列を記憶するように更に構成される、請求項７に記載の演算アクセラレータ。
【請求項９】
前記演算アクセラレータは、前記演算回路、前記ベクトル計算ユニット及び前記コントローラに接続された累算器を更に含み、
前記累算器は、前記コントローラの制御下で、前記第3の行列及び第4の行列内の対応する位置における要素を加算し、第5の行列を取得するように構成され、
前記ベクトル計算ユニットは、前記コントローラの制御下で、前記第5の行列を前記第3のメモリに保存するように更に構成され、
前記第3の行列は、前記第1の行列と前記第2の行列との前記積であり、前記第1の行列は、第1の計算対象の行列の第1の部分を含み、前記第1の計算対象の行列の前記第1の部分は、前記第1の計算対象の行列の第1〜第N列の要素であり、前記第2の行列は、第2の計算対象の行列の第1の部分であり、前記第2の計算対象の行列の前記第1の部分は、前記第2の計算対象の行列の第1〜第N行の要素であり、前記第1の計算対象の行列は、M個の行の要素を含み、前記第2の計算対象の行列は、K個の列の要素を含み、前記第4の行列は、前記第1の計算対象の行列の第2の部分と前記第2の計算対象の行列の第2の部分との積であり、前記第1の計算対象の行列の前記第2の部分は、前記第1の計算対象の行列における前記第1の部分以外の部分であり、前記第2の計算対象の行列の前記第2の部分は、前記第2の計算対象の行列における前記第1の部分以外の部分である、請求項７に記載の演算アクセラレータ。
【請求項１０】
前記演算アクセラレータは、
前記コントローラに接続された命令フェッチバッファであり、前記コントローラにより使用される命令を記憶するように構成された命令フェッチバッファと、
前記命令フェッチバッファ、前記記憶ユニットアクセスコントローラ及び外部メモリに接続されたバスインタフェースユニットであり、前記外部メモリから前記命令を取得するために前記命令フェッチバッファにより使用され、前記外部メモリから前記第1の行列のソースデータ、前記第1の行列及び前記第2の行列のうち少なくとも1つを取得するために前記記憶ユニットアクセスコントローラにより更に使用されるバスインタフェースユニットと
を更に含む、請求項６乃至９のうちいずれか１項に記載の演算アクセラレータ。
【請求項１１】
前記演算アクセラレータは畳み込みニューラルネットワークに適用され、前記第1の行列は入力行列であり、前記第2の行列は重み行列である、請求項１乃至１０のうちいずれか１項に記載の演算アクセラレータ。
【請求項１２】
M=N=Kである、請求項１乃至１１のうちいずれか１項に記載の演算アクセラレータ。
【請求項１３】
演算回路により実行される演算方法であり、前記演算回路はM個の演算グループを含み、各演算グループはK個の演算ブロックを含み、各演算ブロックはN個の演算ユニットを含む、方法であって、
前記演算回路は、第1のメモリから第1の行列を読み取り、前記第1の行列内のM個の行ベクトルを前記M個の演算グループにそれぞれ送信し、前記第1の行列はM*N行列であり、
前記演算回路は、第2のメモリから第2の行列を読み取り、重み行列のK個の列ベクトルを各演算グループの前記K個の演算ブロックにそれぞれ書き込み、前記第2の行列はN*K行列であり、
前記演算回路は、1つのクロックサイクル内で前記第1の行列と前記第2の行列との行列乗算計算を実行する、方法。
【請求項１４】
前記演算回路は、加算回路を含み、
前記加算回路は、各演算ブロックの計算結果を取得するために、同じ演算ブロックに属する演算ユニットの計算結果を加算する、請求項１３に記載の方法。
【請求項１５】
前記演算回路は畳み込みニューラルネットワークに適用され、前記第1の行列は入力行列であり、前記第2の行列は重み行列である、請求項１３又は１４に記載の方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００３２
【補正方法】変更
【補正の内容】
【００３２】
FC演算は、実質的にベクトル及び行列の乗算演算である。FC演算の入力は9216個の要素を有するベクトルであり、4096個の点がFCにおいて出力される必要がある。この場合、FCにおいて出力される点を取得するために、9216個の要素を有するベクトル及び9216個の重みに対して点乗算演算が実行される必要があり、全ての4096個の点を取得するために、9216のベクトル及び9216×4096個の重みに対して点乗算演算が実行される必要がある。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】変更
【補正の内容】
【００４１】
具体的には、Wiは、演算ユニットの入力データのタイプに基づいて設定されてもよい。例えば、int(整数)8タイプのデータは8ビットのビット幅を有し、fp(浮動小数点数)16タイプのデータは16ビットのビット幅を有し、fp32タイプのデータは32ビットのビット幅を有する等である。演算ユニットにより許容される出力データのビット幅は、演算ユニットの計算結果の範囲に基づいて設定されてもよく、或いは、他の方式で決定されてもよい。例えば、演算アクセラレータ50が、入力行列と重み行列との積を計算するように構成されるとき、入力行列内のデータ及び重み行列内のデータは、双方ともint8タイプであり、演算ユニットの出力結果もまた、int8タイプに設定されてもよい。この場合、出力データのビット幅は、入力データのビット幅に等しい。明らかに、演算ユニットの出力データは、int16タイプに変換されてもよい。この場合、出力データのビット幅は16ビットである。さらに、出力データのビット幅は、代替として、他の実際の要件に基づいて設計されてもよい。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１２４
【補正方法】変更
【補正の内容】
【０１２４】
この出願は、具体的な特徴及びその実施形態を参照して記載されているが、明らかに、この出願の範囲から逸脱することなく、様々な修正及び組み合わせがそれらに対して行われてもよい。対応して、明細書及び添付の図面は、添付の特許請求の範囲により定義されるこの出願の単なる例示の説明であり、この出願の範囲をカバーする修正、変形、組み合わせ又は均等物のいずれか又は全部と考えられる。明らかに、当業者は、この出願の真意及び範囲から逸脱することなく、この出願に様々な修正及び変更を行うことができる。この出願は、以下の特許請求の範囲及びそれらの等価な技術により定義される保護の範囲内に入ることを条件として、この出願のこれらの修正及び変形をカバーすることを意図する。
【国際調査報告】
2020526830.tif 000049
2020526830.tif 000050
2020526830.tif 000051
2020526830.tif 000052