(57)【特許請求の範囲】
【請求項１】
ニューラルネットワークの演算予定データ、中間演算結果、最終演算結果又はキャッシュ予定データの少なくとも１つを含むデータの記憶に用いられるメモリと、
前記演算予定データ、中間演算結果、最終演算結果及び／又はキャッシュ予定データの幅の調節に用いられるデータ幅調節回路と、
ニューラルネットワークの演算予定データに対する演算に用いられる演算回路と、
メモリ、データ幅調節回路又は演算回路の少なくとも１つの制御に用いられる制御回路と、を含み、
前記演算回路は、
ビット幅が異なるデータの演算を行う第１演算モジュールを含み、
前記第１演算モジュールは、ニューラルネットワーク中のビット幅が異なるデータの演算を行う加法器回路と乗法器を含み、
前記第１演算モジュールは、シフト、レジスタ及び複数の加法器を含むビットシリアル加算ツリーを更に含み、各加法器はａ端子とｂ端子を含み、前記ビットシリアル加算ツリーはＸ＋１層構造を含み、Ｘは正の整数であり、当該ビットシリアル加算ツリーの運行方式としては、
各レジスタと加法器の中にあるキャリー出力端子Ｃｉｎは０として初期化され、各演算予定データの最低ｎビットは各々第１層の加法器にあるａ端子又はｂ端子に入力され、第１層にある各加法器ではａ端子又はｂ端子に入力された演算予定データの最低ｎビットに対し加法演算が完成され、確定した結果値ｓをハイレベル加法器のａ又はｂ端子に伝送し、各加法器が取得したキャリー値Ｃｏｕｔは同層の加法器のキャリー入力Ｃｉｎに伝達され、次回に入力される演算予定データと加法演算を行い、
上の層の加法器の操作は、前の層の加法器を参考し、入力されたデータに加法演算を行い、その結果を更に上の層に送り、キャリーを同層の加法器にリターンし、第Ｘ層に到達するまで行い、第Ｘ層の加法器はシフト装置を経て演算結果をシフトし、レジスタから送ってくる元の結果と加法演算をした後にレジスタに保存し、その後、次回のクロックを待って、次に低い演算データのｎビットを選択し、ビットシリアル加算ツリーに伝送して相応する演算を行う、
ことを特徴とする計算ビット幅の動的な配置が可能な処理装置。
【請求項２】
ニューラルネットワークの演算予定データに対する演算に用いられる前記演算回路は、
演算データに基づいて演算回路の乗法器と加法器回路の類型を確定して演算を行うことを含む、
ことを特徴とする請求項１に記載の装置。
【請求項３】
前記メモリは、
ニューラルネットワークの演算予定データを記憶する入力記憶モジュールと、
中間演算結果と最終演算結果を記憶する出力記憶モジュールと、
データのキャッシュを記憶するキャッシュモジュールと、を含み、
ここで、前記入力記憶モジュールは、
ニューロンのパラメータを記憶するニューロン記憶モジュールと、
シナプスのパラメータを記憶するシナプス記憶モジュールと、を含む、
ことを特徴とする請求項１又は請求項２に記載の装置。
【請求項４】
前記演算回路は複数の演算モジュールを含み、前記シナプス記憶モジュールは複数のシナプス記憶サブモジュールを含み、前記演算モジュールはそれぞれ一つ、又は、複数のシナプス記憶サブモジュールに対応するように連結される、
ことを特徴とする請求項３に記載の装置。
【請求項５】
乗法器はビットシリアル演算器を含み、
前記ビットシリアル演算器は、
乗数をビット幅が低い複数のデータに分け、各々被乗数と乗算した後に累積する演算に用いられるベース乗法器と、
乗数及び／又は被乗数をスパース方式で示す状態で乗法演算を行うために用いられるスパース乗法器と、
ベクトル間の乗法演算に用いられる融合ベクトル乗法器と、の中の少なくとも一つを含み、
前記ベース乗法器は第１ベース乗法器、第２ベース乗法器又はスパース乗法器であり、
前記第１ベース乗法器は、
Ｎビット幅を持つ乗数の記憶に用いられる乗法記憶ユニットと、
毎回乗数の低いＮビットのシフト（１＜ｎ≦Ｎ）に用いられ、シフト操作をした後の乗数を再度乗法記憶ユニットに伝送する第１シフトレジスタと、
毎回乗数の低いＮビットと被乗数を入力し、乗数の低いＮビットの中で各ビットの値を各々乗数とＡＮＤ演算を行ってＡＮＤ演算結果の取得に用いられる入力選択回路と、
ＡＮＤ演算結果を入力し且つシフトするのに用いられる第２シフトレジスタと、
シフトしたデータを入力し、互いに加算するのに用いられる加法器と、
加法器からの加算結果を記憶し、前記加算結果を再度加法器に入力して次回の加算に参加させるのに用いられる結果レジスタと、を含み、
前記第２ベース乗法器は、
Ｎビット幅を持つ乗数の記憶に用いられる乗法記憶ユニットと、
毎回乗数の低いＮビットのシフトに利用され、シフト操作をした乗数を再度乗法記憶ユニットに伝送する第１シフトレジスタと、
シフトした乗数を一時記憶するバックアップレジスタと、
毎回乗数の低いＮビットと被乗数を入力し、乗数の低いＮビットの中で各ビットの値を各々乗数とＡＮＤ演算を行ってＡＮＤ演算結果の取得に用いられる入力選択回路と、
ＡＮＤ演算結果を入力し且つシフトするのに用いられる第２シフトレジスタと、
被乗数をシフトし、乗数の低いｍビットをシフトして除去するのに用いられる第３のシフトレジスタと、
シフトしたデータを入力し互いに加算するのに用いられる加法器と、
加法器からの加算結果を記憶し、再度加法器に入力して次回の加算に参加させるのに用いられる結果レジスタと、を含み、
第１ベース乗法器又は第２ベース乗法器は、乗法記憶ユニットの現在の乗数値がすべて０かどうかを判断する判断回路を更に含み、
前記スパース乗法器は、
Ｎビット幅を持ち、スパース方式で表示される乗数を記憶する乗法記憶ユニットと、
毎回低いビットから乗数値が１のビットを選択する入力選択回路と、
毎回ビット数が１以下の各低いビットをシフトし、再度、乗法記憶ユニットに伝送して次回の乗数にする第１シフトレジスタと、
ビット数が１のビットにしたがってシフト操作を行う第２シフトレジスタと、
シフトした後のデータを入力して加算する加法器と、
加法器の加算結果を記憶する結果レジスタと、
数値が１のビットにしたがって結果レジスタの内部結果をシフトした後、再度加法器に入力して次回の演算に参加する第３シフトレジスタと、
乗法記憶ユニットにある現在の乗数値が０かどうかを判断する判断回路と、を含む、
ことを特徴とする請求項２に記載の装置。
【請求項６】
前記ビットシリアル演算器は、
演算予定データを入力し、一ビット又は複数ビットのデータに対する乗算及び／又は加法演算を行って演算結果を出力する演算ユニットと、
演算結果を入力して記憶するメモリユニットと、
演算結果を入力して、データシフト、設定されたルールに従ってデータビット幅を拡張／減少させ、特定の設定されたルールに従ってデータの某一ビット又は複数ビットに対して操作を行う処理ユニットと、を含む、
ことを特徴とする請求項５に記載の装置。
【請求項７】
0006865847.tif 000011
【請求項８】
請求項１乃至請求項７のいずれか１項に記載の装置が含まれている、
ことを特徴とするチップ。
【請求項９】
請求項８に記載のチップを含む、
ことを特徴とする電子設備。
【請求項１０】
請求項１乃至請求項７のいずれか１項に記載の装置を使用する方法であって、
制御回路は、制御命令を生成してメモリ、データ幅調節回路と演算回路に伝送し、
メモリは、受信した制御命令に基づいて演算回路にニューラルネットワークの演算予定データを入力し、
データ幅調節回路は、受信した制御命令に基づいてニューラルネットワークの演算予定データの幅を調節し、
演算回路は、入力された演算予定データとニューラルネットワークのパラメータ及び制御命令に基づいて、計算ビット幅が異なるニューラルネットワークの演算予定データに対して演算を行い、演算結果をメモリにリターンさせ、
第１演算モジュールを利用してビット幅が異なるデータの演算を行うことを更に含み、
加法器および乗法器を利用してニューラルネットワークの中のビット幅が異なるデータの演算を加速化する、ことを含み、
計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算は、ビットシリアル加算ツリーを利用してビット幅が異なるデータに対する演算を含み、
Ｍ個の演算予定データを設定し、ここで、最大ビット幅はＮであり、Ｍ，Ｎはすべて正の整数であり、Ｎビット幅のデータが不足する場合、同ビット数をＮビットまで補充し、
ビットシリアル加算ツリーにはｘ＋１層を含み、ここで、ｘは正の整数であり、第一層から第ｘ層までの加法器はビット数字に対する加法演算ｎを行い、ｎ≧１であり、第Ｘ＋１層の加法器はＮビットより少ない数字に対する加法演算を行い、
まず、レジスタ、各加法器の中にあるキャリー出力端子Ｃｉｎを０に初期化し、各演算予定データの最下位のｎビットを取って、各々第１層にある加法器のａ端子又はｂ端子に入力し、各加法器ではａ端子又はｂ端子に入力された演算予定データの最下位のｎビットに対する加法演算を行い、取得した結果値ｓを１層高い層にある加法器のａ又はｂ端子に伝送し、取得したキャリー値Ｃｏｕｔを同層にある加法器のキャリーポータルＣｉｎに伝送し、次回のクロックを待って、入力された演算予定データと加法演算を行い、
上の一層にある加法器の操作も類似し、入力されたデータに対して加法演算を行った後、演算結果を再度、一層高い層に伝達し、キャリーを同層の加法器に伝達し、第ｘ層に到達するまで第ｘ層の加法器は演算結果をシフトし、レジスタから送られる元の結果と加法演算を行った後にレジスタに記憶させ、その後、演算予定データは順次に低いｎビットを選択してビットシリアル加算ツリーに送って相応する演算を行う、ことを特徴とする装置を使用する方法。
【請求項１１】
ニューラルネットワークの演算予定データ幅の調節は、
精度を落とさない状態で、データのビット幅に対して増加、減少若しくは不変にする方式、
精度損失の設定が可能な状態で、データのビット幅に対して増加、減少若しくは不変にする方式、又は
指定の変換又は演算要求に基づいて、データのビット幅に対して増加、減少若しくは不変にする方式の中で少なくとも一つを含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記メモリは、
ニューラルネットワークの演算予定データを記憶する入力記憶モジュールと、
中間演算結果と最終演算結果を記憶する出力記憶モジュールと、
データのキャッシュを記憶するキャッシュモジュールと、を含み、
前記入力記憶モジュールは、
ニューロンパラメータを記憶するニューロン記憶モジュールと、
シナプスパラメータを記憶する記憶モジュールと、を含み、
前記出力記憶モジュールは、
中間演算結果を記憶する中間演算結果記憶サブモジュールと、
最終演算結果を記憶する最終演算結果記憶サブモジュールと、を含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１３】
複数の演算モジュールを設定し、一つ又は複数のシナプスモジュールとそれぞれ対応させ、演算するとき、入力記憶モジュールはすべての演算モジュールに入力データを伝送し、シナプス記憶モジュールは対応する演算モジュールにシナプスデータを伝送し、演算モジュールは演算後、結果を出力記憶モジュールに記憶させる、
ことを特徴とする請求項１０に記載の方法。
【請求項１４】
ビットシリアル加算ツリーを利用してビット幅が異なるデータの演算を行うとき、
第１層の加法器が演算を行った後、第２番目の演算予定のｎビットデータを入力すること、を更に含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１５】
ビットシリアル加算ツリーを利用してビット幅が異なるデータの演算をするとき、
前記加法器は同加法器に演算予定データを入力させるａ端子又はｂ端子及びキャリーポータルＣｉｎ端子がすべて０の状態で、演算過程から遮断されること、を更に含む、
ことを特徴とする請求項１０に記載の方法。
【請求項１６】
計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算は、ビットシリアル演算器を利用した演算を含み、
ここで、
演算ユニットを利用して演算予定データを入力し、一ビット又は複数ビットのデータに対する乗算及び／又は加法演算を行って演算結果を出力し、
メモリユニットを利用して演算結果を入力して記憶させ、
処理ユニットを利用して演算結果を入力し、データのシフト、設定されたルールに基づくデータのビット幅の拡大又は縮小、及び特定設定ルールに基づくデータの一ビットまたは複数ビットに対する操作に用いられ、
或いは、
前記計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算は、第１ベース乗法器を利用したビット幅が異なるデータの演算を含み、
乗法記憶ユニットを利用して乗数を記憶させ、前記乗数のビット幅はＮビットであり、
第１シフトレジスタを利用して、毎回乗数の低いＮビットをシフトし、シフト操作を行った後の乗数を再度乗法記憶ユニットに送り、ここで１＜ｎ≦Ｎであり、
入力選択回路を利用して、毎回乗数の低いｎビットと被乗数を入力させ、乗数の低いｎビットの中にある各ビットの値は各々乗数とＡＮＤ演算を行ってＡＮＤ演算結果を取得し、
第２シフトレジスタを利用して、ＡＮＤ演算結果を入力し且つシフトを行い、
加法器を利用してシフトしたデータを入力し且つ加算し、
結果レジスタを利用して、加法器の加算した結果を記憶させ且つ加算した結果を再度加法器に入力させて次回の加算に参加させ、
或いは、
計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算は、第２ベース乗法器を利用してビット幅が異なるデータの演算を行うことを含み、
乗法記憶ユニットを利用して乗数を記憶させ、前記乗数のビット幅はＮビットであり、
第１シフトレジスタを利用して毎回乗数の低いＮビットをシフトし、シフト操作を行った後の乗数を再度乗法記憶ユニットに送り、ここで１＜ｎ≦Ｎであり、
バックアップレジスタを利用してシフトした乗数を一時記憶させ、
入力選択回路を利用して、毎回乗数の低いｎビットと被乗数を入力させ、乗数の低いｎビットの中の各ビットの値と各々乗数とＡＮＤ演算を行って、ＡＮＤ演算結果を取得し、
第２シフトレジスタを利用して、ＡＮＤ演算結果を入力し且つシフトを行い、
第３のシフトレジスタを利用して、ＡＮＤ演算結果を入力し且つシフトを行い、
加法器を利用してシフトした後のデータを入力して加算し、
結果レジスタを利用して、加法器の加算した結果を記憶し且つ加算した結果を再度加法器に入力させて次回の加算に参加させ、
計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算は、スパース乗法器を利用してビット幅が異なるデータに対する演算を行うことを含み、
乗法記憶ユニットを利用して乗数を記憶させ、前記乗数はスパース方式で示し、ビット幅はＮビットであり、
入力選択回路を利用して毎回乗数の低いビットから乗数値が１のビットを選択し、
第１シフトレジスタを利用して毎回ビット数が１以下のすべての低いビットをシフトし、且つ、再度乗法記憶ユニットに伝送して次の乗数とし、
第２シフトレジスタを利用して、前記ビット数が１のビットに基づいてシフト操作を行い、
加法器を利用してシフトしたデータを入力して加算し、
結果レジスタを利用して加法器の加算結果を記憶し、
第３シフトレジスタを利用して数値が１のビットに基づいて結果レジスタにある結果に対してシフトした後に再度加法器に入力させて次の演算に参加させる、
ことを特徴とする請求項１０に記載の方法。
【請求項１７】
0006865847.tif 000012
【請求項１８】
計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算は、演算回路を通じてすべての連結層及び／又はプーリング層に対する演算を含む、
ことを特徴とする請求項１０乃至請求項１７のいずれか１項に記載の方法。
【請求項１９】
前記演算回路は受信した制御命令に基づいて第１演算モジュール中の対応する類型の乗法器と加法器回路を選択する、
ことを特徴とする請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータの分野に関し、特に人工知能分野の処理装置と処理方法に関する。
【背景技術】
【０００２】
近年、ビッグデータ時代の到来により、ニューラルネットワークアルゴリズムは、人工知能分野で重点研究プロジェクトとなっており、パターン識別と画像解析、知能ロボットなどで広く応用されている。
【０００３】
深層学習方法は、機械学習のなかでデータに対する特長学習の進行に基づく一つの方法である。観測値（例えば、画像）は、各ピクセル強度値のベクトル、またはより抽象的に一連のエッジと特定形態で表示される領域などが挙げられる。ある特定な表示方法を利用して実例を介してより簡単に学習させることができる（例えば表情認識や顔認識）。
【０００４】
今日に来て、深層ニューラルネットワークとニューラルネットワークのコンボリューション、深層信念ニューラルネットワーク、再帰ニューラルネットワークなどのいくつかの深層学習フレーム図がコンピュータビジョン、音声識別、自然言語処理、音響識別、生物情報学などの分野で既に利用され、すぐれた結果をもたらした。深層学習は、既にほとんど専門用語、または、ニューラルネットワークと呼ばれるまでになった。
【０００５】
深層学習（ニューラルネットワーク）に対する研究が活発化するにつれ、ニューラルネットワーク加速器が同時に出現し、専用メモリと演算モジュールの設計を通じてニューラルネットワーク加速器は、深層学習演算を行うとき、汎用プロセッサに比べ数十倍ひいては数百倍の高速に達し、小面積化と低消費電力化を達成した。
【発明の概要】
【０００６】
本発明は、計算ビット幅の動的な配置が可能な処理装置を提供し、
ニューラルネットワークの演算予定データ、中間演算結果、最終演算結果、キャッシュ予定データを含むデータの記憶に用いられるメモリと、
前記演算予定データ、中間演算結果、最終演算結果及び／又はキャッシュ予定データの幅の調節に用いられるデータ幅調節回路と、
ニューラルネットワークの演算予定データに対する演算に用いられる演算回路と、
メモリ、データ幅調節回路、演算回路の制御に用いられる制御回路と、を含む。
【０００７】
本発明は更に、計算ビット幅の動的な配置が可能な処理装置の使用方法を提供し、以下のステップを含む：
制御回路は、制御命令を生成してメモリ、データ幅調節回路と演算回路に伝送し、
メモリは、受信した制御命令に基づいて演算回路にニューラルネットワークの演算予定データを入力し、
データ幅調節回路は、受信した制御命令に基づいてニューラルネットワークの演算予定データの幅を調節し、
演算回路は受信した制御命令に基づいて、第１演算モジュール中の対応する類型の乗法器と加法器回路を選択し、
演算回路は、入力された演算予定データとニューラルネットワークのパラメータ及び制御命令に基づいて、計算ビット幅が異なるニューラルネットワークの演算予定データに対して演算を行う。
【０００８】
本発明は更に処理装置を提供し、データの記憶に利用されるメモリ、前記データは、ニューラルネットワークの演算予定データを含み；ニューラルネットワークの演算予定データに対する演算に利用される演算回路、加法器回路と乗法器を利用して計算ビット幅が異なるニューラルネットワークの演算予定データの計算を含み；メモリと演算回路の制御に利用される制御回路、演算予定データに基づいて演算回路の乗法器と加法器回路の類型を選択して演算を行い、演算結果をメモリにリターンさせる。
【０００９】
本発明は更に前記処理装置を使用する方法を提供し、次のステップを含む：制御回路は制御命令を生成して、メモリと演算回路に伝送し；メモリは受信した制御命令に基づいて演算回路にニューラルネットワークの演算予定データを入力し；演算回路は入力された制御命令に基づいて、第１演算モジュール中の対応する類型の乗法器と加法器回路を選択し；演算回路は入力された演算予定データとニューラルネットワークのパラメータ及び制御命令に基づいて、計算ビット幅が異なるニューラルネットワークの演算予定データに対する演算を行い、演算結果をメモリにリターンさせる。
【００１０】
本発明は更に演算装置を提供し、入力データの取得に利用される入力モジュール、該入力データは、処理予定データ、ネットワーク構造、ウェイトデータを含み、または、該入力データは、処理予定データ及び／又はオフラインモデルデータを含み；入力されるネットワーク構造とウェイトデータに基づいてオフラインモデルの生成に用いられるモデル生成モジュール；オフラインモデルに基づいて演算命令を生成しながらキャッシュ記憶させ、演算命令に基づいて演算予定データに対する演算を行い、演算結果の取得に用いられるニューラルネットワーク演算モジュール；前記演算結果の出力に用いられる出力モジュール；入力データの類型を検出しながら入力モジュールとモデル生成モジュール、ニューラルネットワーク演算モジュールの制御と演算に用いられる制御モジュール；を含む。
【００１１】
本発明は更に前記演算装置を利用した演算方法を提供し、次のステップを含む：
入力データの取得；
オフラインモデルの取得、或いは、入力データに基づいてオフラインモデルを確定し、オフラインモデルに基づいて演算命令を確定し、次の計算で呼出できるようにする；
前記演算命令を呼び出して、処理予定データに対する演算を行って演算結果を求めて出力する。
【００１２】
本発明は、複合スカラ命令をサポートする装置を提供し、制御装置モジュール、記憶モジュール、演算装置モジュールを含み、ここで、前記記憶モジュールは、複合スカラ命令とデータの記憶に用いられ、前記データは一種類以上あり、相異なる類型のデータは、記憶モジュールの相異なるアドレスに記憶され；前記制御装置モジュールは、記憶モジュールから複合スカラ命令を読み出し且つ制御命令への解読に用いられ；前記演算装置モジュールは制御命令を受信し、前記記憶モジュールからデータを読出し、読出しデータのアドレスに基づいてデータの類型を判断し、且つ、データに対して演算する。
【００１３】
本発明は更に複合スカラ命令の実行に利用するプロセッサを提供し、ここで、この複合スカラ命令は、操作コードフィールド、オペランドアドレスフィールド、宛先アドレスフィールドを含み；前記操作コードフィールドに記憶される操作コードは、異なる類型の操作の区別に利用され、前記オペランドアドレスフィールドは、オペランドの類型の区別に利用され、前記宛先アドレスフィールドは、演算結果が記憶されるアドレスである。
【００１４】
本発明は更に複合スカラ命令に対する実行方法を提供し、次のステップを含む：異なる類型のデータを異なるアドレスに記憶させ；複合スカラ命令を制御命令として解読し；
制御命令に基づいて操作データを読み出し、読み出した操作データのアドレスに基づいて操作データの類型を判断し、操作データに対して演算を行い；演算結果を対応する類型のアドレスに記憶させる。
【００１５】
本発明は更に計算装置を提供し、レジスタユニット、カウントユニット、記憶ユニットを含み、ここで、レジスタユニットは、カウントしようとする入力データが記憶ユニットに記憶されているアドレスを記録し；カウントユニットはレジスタユニットに連結され、カウント命令の取得に用いられ、カウント命令に従ってレジスタユニットから入力データのメモリアドレスを読み出し、記憶ユニットでカウントしようとする対応の入力データを取得し、且つ、入力データの中で与えられた条件を満足させるエレメント数を統計カウントしてカウント結果を得られ；記憶ユニットはカウントユニット連結され、カウントしようとする対応の入力データ及び前記カウント結果を記憶するのに用いられる。
【００１６】
本発明は更に前記カウント装置のカウント方法を提供し、次のステップを含む：カウントユニットはカウント命令を取得し、カウント命令がレジスタユニットから読み出した入力データのメモリアドレスに基づいて記憶ユニットでカウントしようとする対応の入力データ読み出しながら入力データのなかで与えられた条件を満足させるエレメント数を統計カウントして、カウント結果を取得し；統計したカウント結果を記憶ユニットに伝送する。
【図面の簡単な説明】
【００１７】
本発明の実施形態における技術的方法をより正確に説明するために、以下、実施例における使用すべき図面について簡単に紹介する。当然ながら、これら図面は、本発明の一部の実施例に過ぎず、当業者にとって、創造的努力をしない前提で、これら図面に基づいてほかの図面を取得することができる。
【図１】図１は、本発明の実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図２】図２は、本発明の実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図３】図３は、本発明の実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図４】図４は、本発明のほかの実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図５】図５は、本発明の更にほかの実施例でこの装置に利用するビットシリアル加算ツリー装置の原理図である。
【図６】図６は、本発明で提供する計算ビット幅を動的に配置できる処理装置の中にあるビットシリアル演算装置の構成原理図である。
【図７】図７は、本発明で提供するある実施例にある第１ベース乗法器の構造原理図である。
【図８】図８は、本発明で提供するある実施例にある第２ベース乗法器の構造原理図である。
【図９】図９は、本発明で提供するある実施例にあるスパース乗法器の構造原理図である。
【図１０】図１０は、本発明で提供するある実施例でベース乗法器あるいはスパース乗法器がベクトル乗算を行う装置構造原理図である。
【図１１】図１１は、本発明で提供するある実施例で融合ベクトル乗法器がベクトル乗算を行う装置構造原理図である。
【図１２】図１２は、本発明で提供する融合ベクトル乗法器とほかの乗法器の具体的な実行流れに関する構造原理図である。
【図１３】図１３は、本発明のある実施例で第２ベース乗法器とビットシリアル加算ツリーを組み合わせる原理図である。
【図１４】図１４は、本発明のある実施例で提供する計算ビット幅を動的に配置できる処理方法のフローチャートである。
【図１５】図１５は、本発明のほかの実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図１６】図１６は、本発明のほかの実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図１７】図１７は、本発明のもう一つの実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図１８】図１８は、本発明のもう一つの実施例で提供する計算ビット幅を動的に配置できる処理装置の構造原理図である。
【図１９】図１９は、本発明で提供するある実施例にあるベース乗法器の構造原理図である。
【図２０】図２０は、本発明で提供するある実施例にあるスパース乗法器の構造原理図である。
【図２１】図２１は、本発明で提供するある実施例でベクトル乗算を行うベース乗法器あるいはスパース乗法器の構造原理図である。
【図２２】図２２は、本発明で提供するある実施例でベクトル乗算を行う融合ベクトル乗法器の構造原理図である。
【図２３】図２３は、本発明で提供するスパース乗法器とほかの乗法器の具体的な実行流れに関する構造原理図である。
【図２４】図２４は、本発明のある実施例で提供する計算ビット幅を動的に配置できる処理方法に関するフローチャートである。
【図２５】図２５は、典型的なプログラミングフレーム図である。
【図２６】図２６は、本発明のある実施例で提供する演算方法の演算フローチャートである。
【図２７】図２７は、本発明のある実施例で提供する演算方法の構成図である。
【図２８】図２８は、本発明の実施例で提供する演算装置の構造原理図である。
【図２９Ａ】図２９Ａは、本発明の実施例で提供する記憶モジュールのＲＡＭ組織形式実例図である。
【図２９Ｂ】図２９Ｂは、本発明の実施例で提供する記憶モジュールのレジスタファイル編成実例図である。
【図３０Ａ】図３０Ａは、本発明の実施例で提供する複合スカラ命令の実例図である。
【図３０Ｂ】図３０Ｂは、本発明の実施例で提供するレジスタアドレス指定を利用するときの複合スカラ命令の実例図である。
【図３０Ｃ】図３０Ｃは、本発明の実施例で提供するレジスタの間接アドレス指定を利用するときの複合スカラ命令の実例図である。
【図３０Ｄ】図３０Ｄは、本発明の実施例で提供する直接的なアドレシングを利用するときの複合スカラ命令の実例図である。
【図３０Ｅ】図３０Ｅは、本発明の実施例で提供するＲＡＭアドレシングを利用するときの複合スカラ命令の実例図である。
【図３１】図３１は、本発明の実施例で提供する複合スカラ命令を支援する演算方法のフローチャートである。
【図３２】図３２は、本発明の実施例にある計数装置のフレーム構造原理図である。
【図３３】図３３は、本発明の実施例で示した計数装置の中にある計数部の構造原理図である。
【図３４】図３４は、図３３に示した計数部の中にある加法器の構造原理図である。
【図３５】図３５は、本発明の実施例に示した計数装置において実行される計数命令の命令集合様式の原理図である。
【図３６】図３６は、本発明の実施例に示した計数装置の中にある計数部実行過程のフローチャートである。
【図３７】図３７は、本発明の実施例に示した計数装置の構造原理図である。
【図３８】図３８は、本発明の実施例に示した計数装置の実行過程のフローチャートである。
【発明を実施するための形態】
【００１８】
以下、本発明の実施例における図面と合わせて本発明の実施例で記述した技術的方法を明確かつ完璧に記述する。もちろん記述される実施例は本発明の一部の実施例に過ぎず、全ての実施例ではない。本発明の実施例に基づいて当業者が創造的な労働をしなかったという前提条件の下で取得したあらゆる他の実施例はすべて本発明の保護の範囲に属する。
【００１９】
本発明における「メモリ」は、計算ビット幅を動的な配置が可能な処理装置の中に統合させることも、個別の部品にすることもできる。外部メモリとして計算ビット幅を動的に配置できるプロセッサとデータ伝送を行うメモリは、計算ビット幅を動的に配置できるプロセッサに統合させることもでき、個別の部品にすることもできる。外部メモリとして計算ビット幅を動的に配置できるプロセッサはデータ伝送を行う。
【００２０】
図１は、本実施例で提供する計算ビット幅を動的に配置できるプロセッサの構造原理図である。図１に示したように、本装置は、制御回路、データ幅調節回路、演算回路、メモリを含む。
【００２１】
制御回路は、データ幅調節回路、演算回路、メモリに制御信号を送ることで三者の実行を制御し、三者間のデータ伝送を調和させる。メモリは、関連データの記憶に用いられ、入力データ（演算予定データと制御命令を含む）、中間演算結果、最終演算結果、ニューロン、シナプス、キャッシュ予定データなどを含むことができる。需要に応じて、具体的な記憶データの内容と記憶編成方式、異なる呼び出し方式を計画することができる。図１に示したように前記データ幅調節回路は、データの幅調節に用いられる。この過程としては、メモリからデータを読み取った後、データ幅回路を通じてデータに対するビット幅調節を行った後、演算回路に伝達し、演算回路が計算結果をデータ幅調節回路を通じてデータに対するビット幅調節を行った後、メモリに伝達し、メモリはデータをデータ幅調節回路を通じてデータに対するビット幅調節を行った後、メモリにリターンさせること等がある。その具体的な操作は精度を落とさない状態でデータのビット幅を増加させたり、減少させたり、変わらないよう維持する。許す限りの精度損失がある状態でデータのビット幅を増加させたり、減少させたり、変わらないよう維持する。ある指定された変換、あるいは演算要求（例えば「ビットＡＮＤ演算」に従う演算を指定する場合）に基づいてデータのビット幅を増加させたり、減少させたり、変わらないよう維持することなどが含まれる。演算回路には少なくとも一つの加法演算器と少なくとも一つの乗法演算器が含まれることができ、データの演算に用いられる。少なくとも一つの加法演算器には加法器、加算ツリー及び／又はシリアル加算ツリーが含まれ、少なくとも一つの乗法器にはベース乗法器、スパース乗法器及び／又は融合ベクトル乗法器が含まれる。演算回路としては、コンパレータ及び／又はＡＬＵなどが含まれることが可能である。ここで、乗法演算器と加法演算器は計算ビット幅が異なるデータに対して演算を満足させ、異なる需要に応じてビット幅が異なる演算データ間の演算を行うことができる。ここで、乗法器はシリアル演算装置としてビットシリアル方式を通じて乗法演算を行うことができる。ここで、演算回路もデータビット幅調節回路を介さず直接メモリとデータ伝送するようにしても良い。
【００２２】
図２は、本実施例に示した計算ビット幅を動的に配置できるプロセッサの構造原理図である。図２に示すように、本装置の構造は、制御回路がメモリの各モジュールあるいはサブモジュールおよび演算回路とつながっており、少なくとも一つの制御信号一時メモリと少なくとも一つの制御信号処理器を含み、制御信号一時メモリは制御信号の記憶に利用され、好ましくは、この制御信号一時メモリは先入先出である。制御信号処理器は実行しようとする制御信号を読み出し、制御ロジックを分析した後、メモリ、データ幅調節回路、演算回路を制御および調和に用いられる。メモリには入力記憶モジュール、出力記憶モジュール、シナプス記憶モジュールが含まれ、ここで、出力記憶モジュールは、中間演算結果と最終演算結果の記憶に用いられることもある。データ幅調節回路は入力データ処理モジュールと出力データ処理モジュールに分けられ、入力データ処理モジュールは、入力記憶モジュールと又シナプスモジュールの中にあるデータに対するデータ幅調節を行うことに利用され、それは入力記憶モジュールの後部に設置できる。出力データ処理モジュールは演算回路が演算したデータに対する幅の調節を行った後に記憶するのに用いられる。演算回路は、主にコンボリューション演算回路層と完全に接続された層のコンボリューション演算、プーリング層の平均値あるいは最大値を計算する演算の加速に用いられる。好ましくは、演算回路は乗法器モジュール、加算ツリーモジュール、非線形演算モジュール（例えば、ｓｉｇｍｏｉｄ関数演算を実行するモジュール）が含まれる。この乗法器モジュール、加算ツリーモジュール、非線形演算モジュールはパイプライン方式を利用して平行に実行できる。本装置はコンボリュージョンニューラルネットワークの演算過程を加速化し、チップ内部とチップ外部でのデータ交換を減らし、記憶空間を節約できる。
【００２３】
図３は、公開されたほかの実施例に示した処理装置の構造原理図である。図３に示したように本装置の構造としては、制御回路はメモリの各モジュール及び演算回路と接続され、制御回路は、制御信号一時メモリと制御信号処理器を含み、制御信号の記憶に用いられる。制御信号処理器は実行すべき制御信号を読み取り、制御ロジックを分析した後、メモリと演算回路への制御と調和に利用する。好ましくは、制御信号一時メモリは先入先出する。メモリには入力記憶モジュール、出力記憶モジュール、シナプス記憶モジュールが含まれている。本装置でシナプス記憶モジュールには複数のシナプス記憶サブモジュールが含まれ、演算回路には複数の演算モジュールが含まれている。シナプス記憶サブモジュールを演算モジュールとそれぞれ対応するよう接続するが、一つのシナプス記憶サブモジュールを一つの演算モジュールと対応するよう接続することができ、複数のシナプス記憶サブモジュールを一つの演算モジュールと対応するように接続することもできる。データ幅調節回路は入力データ処理モジュールと出力データ処理モジュールに分けることができ、入力データ処理モジュールは入力記憶モジュール及び／又はシナプス記憶モジュールの中にあるデータに対するデータ幅調節に利用され、それは入力記憶モジュールの後部に配置することができる。出力データ処理モジュールは演算回路が演算したデータを幅調節した後、出力データ処理モジュールに記憶させることに用いられる。毎回演算するとき、入力記憶モジュールは入力データ処理モジュールを経てすべての演算モジュールに入力データを伝達し、シナプス記憶モジュールは対応する演算モジュールにシナプスデータを送り、演算モジュールが演算した後、出力データ処理モジュールは結果を出力記憶モジュールに書き込む。これにより、パラメータが多い大規模演算では演算効率を著しく高まる。本装置はコンボリュージョンニューラルネットワークの演算過程を効果的に加速化させ、しかもネットワークの規模が比較的大きく、パラメータが比較的多い場合に適用する。 
【００２４】
図４は、公開されたほかの実施例に示した処理装置の構造原理図である。図４に示す本装置の構造としては、制御回路はメモリのすべてのモジュール、演算回路、データ幅調節回路と接続されており、一つの命令キューと一つのデコーダーが含まれている。新しい命令を毎回実行するたびに命令キューから新しい命令を読み取りデコーダーに伝送する。デコーダーを通じて解読し、制御信号をメモリの各モジュールと演算回路、データ幅調節回路に入れる。メモリには入力記憶モジュールと出力記憶モジュール、シナプス記憶モジュール、キャッシュモジュールが含まれており、ここで、出力記憶モジュールは中間演算結果と最終演算結果を記憶することに利用できる。ここで、入力記憶モジュールとシナプス記憶モジュールが演算回路にデータを伝送するたびにすべて先にデータをキャッシュモジュールに入れる。その後キャッシュ予定データをデータ幅調節回路に読み取る。制御命令がデータに対し処理を求めるとデータ幅調節回路で相応する処理を行う。例えば精度を落とさないようにしつつデータのビット数を拡大し、データのもっとも低いビットを強制的に削除することでデータのビット幅を減らすことなどがある。データ幅調節回路で処理した後、再び該当する演算モジュールに入れる。制御命令がデータを処理することを求めないとデータは直接データ幅調節回路を介して該当の演算モジュールに伝送される。同様に、演算モジュールは演算を終えてから、まず結果をデータ幅調節回路にいれ、制御命令に基づいてデータ処理操作をするか、又は、データに対して操作しないで、キャッシュモジュールに入れ、更にキャッシュモジュールから出力記憶モジュールに書き込む。演算回路は複数の演算モジュールを含み、第一演算モジュールと第二演算モジュールを含む。演算モジュールの間には関連する演算を並列に行うことができ、相互にデータを送ってローカルデータの反復利用距離を縮め演算速度をさらに高めることができる。第一演算モジュールは主にニューラルネットワークアルゴリズムで同じだったり異なったりする計算ビット幅の線形演算の加速化に用いられ、ドット積、マトリックス乗算、加算、乗算と加算の混合；マトリックスとベクトル；マトリックスとリテラル；ベクトル間；ベクトルとリテラル；リテラルとリテラル、を含む。また、最大／最小値を比較演算して選択すること等にも用いられる。好ましい演算としては、内積値、マトリックス乗算及び／又はマトリックス加法演算が属する。第二演算は以上の第一演算モジュールで実行できない演算をすることに利用され、ここには非線形演算、除法演算、個別的な加法演算あるいは個別的な乗法演算が含まれる。こうするメリットとしては、制御命令に基づいて計算過程でデータのビット幅をダイナミックに調節し演算回路とメモリのハードウェア利用率をもっと高めることができるということにある。
【００２５】
図５は、公開されたある実施例を本装置に利用したビットシリアル加算ツリー装置の原理図であり、計算ビット幅をダイナミックに配置できる要求を満たすことができる。図５に示したようにＭ個の演算予定データの最大ビット幅はＮであり、ここで、Ｍ，Ｎはすべて正の整数である。もしＮビットに足りないデータであれば合理的な方式によりデータの精度に影響を与えない状態でそのビット数をＮビットまで補充する。利用できる方式には最高／最低ビットに０を補充すること、最高／最低ビットに符号ビットを補充すること、ビットシフト、演算操作を行うことが含まれる。ビットシリアル加算ツリーの第一層から第ｘ層までにある加法器はｎ（ｎ≧１）ビット数字に対する加法演算を実行でき、第ｘ＋１層にある加法器はＮビット以上の数字に対する加法演算を実行できる。まず、レジスタと各加法器の中にあるキャリー出力端子Ｃｉｎを０に初期化する。各演算予定データの一番低いｎビットを読み取り、それぞれ第一層にある加法器のａ，ｂ端子に入力し、各加法器ではａ，ｂ端子に入ってきた演算予定データの一番低いｎビットに対する加法演算を行い、得た結果値ｓをいっそう高い層にある加法器のａまたはｂ端子に伝送し、得たキャリー値Ｃｏｕｔは当該層にある加法器のキャリー出力Ｃｉｎに差戻し、次のステップを待って入ってきた演算予定データと加法演算を行う。上の層にある加法器の操作も同様であって、入ってきたデータと加法演算をした後、結果はより高い層に伝送され、キャリーは当該層にある加法器に差し戻す。これを第ｘ層に到達するまで繰り返す。第Ｘ層にある加法器は演算結果をシフトし、レジスタから来る下の結果と加法演算した後、レジスタに戻して保存させる。その後演算予定データから次の低いｎビットを選びビットシリアル加算ツリーに送り相応する演算を行う。このとき各加法器のＣｉｎは一個前のステップからこの加法器のＣｏｕｔ端子に出力されたキャリー結果である。好ましくは、この操作では第一層にある加法器の演算が終わった後に、直ちに第二回目の演算予定のｎビットデータを入力し、並列演算を通じて演算装置の使用率を高め、演算スピードをさらに高められる。すべての演算が行われた後レジスタの中にあるデータが得ようとする結果である。この実施例で加法器はこの加法器に入力される演算予定データ（ａ，ｂ端子）及びキャリー入力（Ｃｉｎ端子）がすべて０である状態で当該演算過程で遮断されるから電力消費を節約しようとする目的を実現することができる。
【００２６】
ここで、本実施例に示したビットシリアル演算器、例えばベース乗法器などは、図６に示したように、演算部、処理部、記憶部を含む。演算部は一つのビッ及び／又は複数のビットのデータに対する演算及び／又は加法演算を実行することに利用され、そこに入力される演算予定データは記憶部のデータ及び／又は処理部を介して処理されたデータであり、出力される演算結果は直接記憶部に入り記憶され、または処理部に入り処理される。処理部はデータのシフト、ある決められた規則に沿ってデータビット幅を拡大／縮小すること、ある決められた規則に沿ってデータの一つのビッ及び／又は複数のビットを修正するなどの処理操作を実行することに利用され、その処理予定データは演算部及び／又は記憶部から得られ、処理されたデータは演算部及び／又は処理部に伝送される。記憶部はデータを記憶することに利用され、演算予定データ、中間演算結果、最終演算結果などが含まれる。ここの記憶部はオンチップキャッシュメモリでも良い。ここで、各部品は自分の相異なる機能によってすべて複数の部品にもっと細分化できる。例えば、演算部は乗算部、加算部などに細分化できる。ビットシリアル演算器にある乗法器の具体的な実施例としては図７に示す第一ベース乗法器、図８に示す第二ベース乗法器、図９に示すスパース乗法器がある。
【００２７】
図７は、本発明にあるビットシリアル演算器の具体的な実施例である。第一ベース乗法器の装置原理図は計算ビット幅をダイナミックに配置できる要求を満たすことができる。この第一ベース乗法器は、本発明の装置に利用できる。図７に示したようにＭビットの被乗数とＮビットの乗数でＭ，Ｎはすべて正の整数である。ここで、乗数と被乗数の位置は制御モジュールの制御下で交替出来る。乗数の低いｎビット（ｎは正の整数であり、且つ、１≦ｎ≦Ｎであり、好ましくは１≦ｎ≦Ｎにすることで、演算の並列度をさらに満たし、ハードウェアソースを十分に利用して演算スピードを加速化することができる）を入力選択回路に入力して乗数の低いｎビットをそれぞれ被乗数とＡＮＤ演算を行う。即ち、乗数のこのビット値が１であれば被乗数それ自体を出力させ、そうでなければ０を出力させる。同時に、乗数を第一シフトレジスタに入れてシフトを行い、低いｎビットをシフトすれば次にまた入力選択回路に入力されるのは新しい低いｎビットである。入力選択回路が選択した結果を第二シフトレジスタに入力させ相応なシフトを行い、更に加算ツリーに入れて加法演算を行う。ここで加法演算を行うのは入力選択をして且つシフトを行ったデータとその前に加法演算を行った結果である。結果を得た後に中間演算結果として結果レジスタに記憶させる。次の被乗数を待って入力選択した後シフトするとき結果レジスタは中間演算結果を読み取り加算ツリー（装置）に入れて加法演算を行う。乗数がすべて０の場合、乗法演算は終わる。
【００２８】
このベース乗法器の演算の流れをより明確に示すために、以下、具体的な実施例を示す。被乗数が１０１１１０１１、すなわちＭ＝８であり、乗数は１０１１、すなわちＮ＝４だと仮定する。
【００２９】
ｎ＝２のとき、つまり、毎回２ビットをシフトするとき、この演算過程は次の通りである。まず、乗数のもっとも低い２ビットである１１を読み取り、被乗数とともに入力選択回路に伝送し、被乗数自体をすべて選択して第一シフトレジスタに送る。一番低いビットに対応するように選択した被乗数はシフトする必要がないから１０１１１０１１であり、次に低いビットに対応するよう選択した被乗数を１ビット左側にシフトすると１０１１１０１１０である。これを加算ツリーに伝送し、その前に足した数字がないため、結果レジスタに伝送されたのは１０１１１０１１と１０１１１０１１０の合計、つまり１０００１１０００１である。次に、乗数を右側に２ビットシフトした後、その一番低い２ビット、つまり１０を読み取り被乗数とともに入力選択回路に送り０と１０１１１０１１を得る。その後、第二シフトレジスタを通じて０を左側に２ビットシフトしてそのまま０になり，１０１１１０１１を左側に３ビットシフトして１０１１１０１１０００になる。結果レジスタにある１０００１１０００１とともに加算ツリーに伝送し演算を行い、１０００００００１００１を得て結果レジスタに送る。このとき、乗数を右側に２ビットシフトするとすべてが０であるから演算は終わる。結果レジスタの中にあるのが最終演算結果であり、つまり１０００００００１００１である。
【００３０】
図８は、公開されたほかの実施例に示した本装置に利用される第二ベース乗法器の装置原理図であり、計算ビットをダイナミックに配置できる要求を満たすことができる。図８に示したように、Ｍビットの被乗数とＮビットの乗数においてＭ，Ｎはすべて正の整数である。ここで、乗数と被乗数の位置は制御モジュールの制御のもとで交替させることができる。被乗数の低いｍビット（ｍは正の整数で、かつ、１≦ｍ≦Ｍ）を入力選択回路に入力させ、乗数の低いｎビット（ｎは正の整数で、かつ、１≦ｎ≦Ｎ）を入力選択回路に入力させ、被乗数の低いｍビットをそれぞれ乗数の低いｎビットと乗法演算させる。そして、乗数を第一シフトレジスタに伝送しシフトを行い、低いｎビットをシフトさせ、次に入力選択回路の中に入力させるのは新しい低いｎビットになる。入力選択後の結果は第二シフトレジスタに入力させ、相応なシフトをした後、更に加算ツリーに伝送して加法演算を行う。ここで加法演算をするのは入力選択し且つシフトを行ったデータとその前に加法演算を行った結果である。結果を得た後、中間演算結果として結果レジスタに記憶させる。つぎの被乗数で入力選択をしてシフトをするとき、結果レジスタは中間演算結果を読み取り、加算ツリー（装置）に送り、加法演算を行う。乗数がすべて０のとき、被乗数を第三シフトレジスタに伝送してシフトを行い、低いｍビットをシフトし、乗数はバックアップレジスタから読み取り、以上のステップを繰り返して行いながら演算する。被乗数と乗数がすべて０になるときに乗法演算は終わる。
【００３１】
図９は、本発明で提供するある実施例に示した装置に利用するスパース乗法器の装置原理図であり、計算ビット幅をダイナミックに配置できる要求を満たすことができる。つまり、乗数あるいは被乗数の２進数の中で１がまれにある状態であれば、乗数あるいは被乗数を疎らな方式で１の位置を示せば演算の有効性をさらに高めて演算スピードを加速化することができる。図９に示したように、Ｍビットの被乗数とＮビットの乗数において、Ｍ，Ｎはすべて正の整数であり、つまり、ここにある被乗数と乗数のビット数は同じくてもいいし、異なってもいい。ここで、乗数は疎らな表示方法を利用し、絶対位置あるいは相対位置の方式でこの乗数の中にある１の位置を表示する。ここで本実施例で提供するスパース乗法器の演算モジュールはすべて配置可能であるため、異なる表示方法を利用して演算を行うとき、演算装置の中にある装置は需要に応じて配置できる。  例えば、結果レジスタが加法演算をするときにはシフトする必要がなく、このとき結果レジスタと接続されているシフトレジスタが動作しないよう配置することができ、このとき、乗数のシフト情報もこのシフトレジスタに伝送しないようにすることもある。当業者としては、関連する具体的な細部はすべて需要に合わせて調節することによって、被乗数に対するシフトと結果に対する加法演算を含めた関連する具体的な細部を実行できることを理解することができる。
【００３２】
このスパース乗算の演算の流れの過程をより明確に示すために、一つの具体的な実施例をあげる。被乗数が１０１１１０１１、つまりＭ＝８であり、乗数は００１０００１０、つまりＮ＝８だと仮定する。絶対的な表示方式を利用して乗数を示すとすれば、絶対位置で乗数の中にある１の位置を示す。数値の右端にあるビットを第０ビットとし、第０ビットの左にあるビットを第１ビットとし、類推する。すると、この乗数は（１，５）で表示される。同時に、この実施例で結果レジスタと接続されているシフトレジスタが動作しないことを求めるから乗数のデータがこのシフトレジスタに伝送されてはならない。まず、乗数の一番目の数、つまり１を読み取り、第１ビットに一つの１があることを示す。被乗数をシフトレジスタに伝送した後１ビットシフトして１０１１１０１１０になり加法器に伝送する。その前の数字を加算するから結果レジスタに伝送される結果は１０１１１０１１０である。その後乗数の次の１の位置、つまり５を読み取り、被乗数とともにシフトレジスタに伝送する。シフトレジスタで被乗数を５ビット右側にシフトし１０１１１０１１０００００を得て加法器に伝送する。同時に結果レジスタの中にある結果１０１１１０１１０を読み取る。このような絶対表示方法ではシフトする必要がないから直接この結果を加法器に伝送し加法演算を行って１１０００１１０１０１１０を得る。加法演算した後の結果を再び結果レジスタに伝送する。このとき、乗数にある１はすべて既に計算が完了されているため演算は終わる。もし相対的な方式で乗数を示すとすれば、その表示方法を一番高いビット（最左端）の０ではない初めての数字から始まって、一番低いビットに行くまでの０ではない各二つの数字の間の離れているビット数で定義する。００１０００１０の場合、０ではない初めての数字と０ではない次の数字の間は４ビット離れていて、０ではない二番目の数字と一番低いビットの間は互いに１ビットぐらい離れているから（４，１）と表示する。ここで、この実施例にある結果レジスタと接続されていて被乗数と互いに接続されているシフトレジスタがすべて動作しなければならないと要求する。まず、乗数の一番目の数字４を読み取り、第二シフトレジスタに伝送すれば被乗数を右側に４ビットシフトし、結果レジスタの中にあるデータを右側に４ビットシフトした後、加法器に伝送して加法演算を行う。このとき結果レジスタのデータは０だから加法演算結果は１０１１１０１１００００と得られ、結果レジスタに伝送して記憶させる。その後乗数の二番目の数字１を読み取ればこの値をシフトレジスタに送り１０１１１０１１０と１０１１１０１１０００００を得て加法器に伝送して加法演算を行うことにして結果１１０００１１０１０１１０を得る。この結果は再び結果レジスタに送る。このとき乗数にある１はすべて既に計算が完了されたから演算は終わる。こうすれば、データの希薄性を効果的に利用して、効果的な演算つまり０ではないデータ間の演算だけが行える。こうして非効率的な演算を減らし、演算スピードを加速化させ、性能対電力消耗比を高めた。
【００３３】
0006865847.tif 000002
【００３４】
0006865847.tif 000003
【００３５】
0006865847.tif 000004
【００３６】
0006865847.tif 000005
【００３７】
以上、この装置と方法を利用してニューラルネットワークの演算スピードをはるかに高めると同時に動的配置可能性をもってデータビット幅の多様性、演算過程でデータのビット幅をダイナミックに変えられなければならない当該の要求を満たし、柔軟性や配置可能な程度が高くて演算スピードが速く電力消費が低いメリットを持つ。
【００３８】
本発明にある実施例のほかの側面では、計算ビット幅を動的に配置できる処理装置の処理方法を提供し、図１４に示すように、次のステップを含む。
Ｓ１４０１制御回路が制御命令を生成し、メモリ、データ幅調節回路、演算回路に伝送する。
Ｓ１４０２メモリは受信した制御命令に基づいて、演算回路にニューラルネットワークの演算予定データを入力する。
Ｓ１４０３データ幅調節回路は実際の要求に応じて演算予定データ、中間演算結果、最終演算結果及び／又はキャッシュ予定データの幅を調節する。
Ｓ１４０４演算回路は受信した制御命令に基づいて、対応する類型の乗法器と加法器回路、ビットシリアル演算器を選択する。
Ｓ１４０５演算回路は入力されるデータとニューラルネットワークのパラメータ及び制御命令に基づいて、計算ビット幅が異なるニューラルネットワークの演算予定データに対して演算を行う。
【００３９】
以上、この実施例の方法にあるデータ幅調節回路を利用して、ニューラルネットワークの演算スピードをはるかに高められると同時に、動的配置可能性を持ち、データビット幅の多様性と演算過程でデータビット幅を動的に変えられなければならない当該の要求を満たすことができる。
【００４０】
更には、ステップＳ１４０３の第一演算モジュールは、加法器回路、ベース乗法器、スパース乗法器及び／又は融合ベクトル乗法器を利用いてニューラルネットワークの演算予定データに対する演算を行うことを含む。具体的な加法器回路、ベース乗法器、スパース乗法器及び／又は融合ベクトル乗法器を動的に選択することで、処理方法が柔軟性が高く、配置可能性が高く、演算スピードが速く、電力消費が低い特徴を持たせることができる。
【００４１】
以下、他の方法に係る計算ビット幅を動的に配置できる処理装置と処理方法の実施例を紹介する。以下に紹介する方法にはデータ幅調節回路およびデータ幅調節回路と関係する機能部品が含まれないこともある。
【００４２】
図１５は、公開されたほかの実施例で提供する処理装置の構造原理図である。図１５に示したように、本装置を主に三つの部分に分けられ、つまり、制御回路、演算回路、メモリに分けられる。制御回路は、演算回路とメモリに制御信号を送信して二者の実行を制御し、二者間のデータ伝送を調和させる。各部分の機能は図１に示す実施例の各部分に関する記述内容を参考すればいいため、ここでは省略する。
【００４３】
図１６は、公開されたある実施例にある処理装置の構造原理図である。図１６に示した構造は図２に示す構造をベースにデータ幅調節回路をなくしたものであり、つまり、メモリを演算回路と直接接続したものである。相応の各設定方式は前記を参考できる。三つのモジュールはパイプライン方式を利用して並列に実行できる。本装置はコンボリュージョンニューラルネットワークの演算過程を加速化させ、チップ内部と外部でのデータ交換を減らし、メモリ空間を節約できる。
【００４４】
図１７は、公開されたほかの実施例にある処理装置の構造原理図である。図１７に示した構造は図３と似ており、違う部分としては、図１７にはデータ幅調整回路の関連構造と連結関係がないことである。図１７の各連結関係と実現する機能に対しては図３に示す実施例に記された内容を参考できるからここでは省略する。この実施例に係る処理装置は、パラメータが多い大規模の演算で演算スピードをはるかに高めることができる。この装置は、コンボリューションニューラルネットワークの演算過程を効果的に加速化でき、さらにはネットワークの規模が比較的に大きくてパラメータが比較的に多い場合に適用できる。
【００４５】
図１８は、公開されたほかの実施例にある処理装置の構造原理図である。図１８に示した構造は図４と似ており、違う部分としては、図１８にはデータ幅調節回路の関連構造と連結関係がないことである。図１８の各連結関係および実現する機能に対しては図４に示す実施例に記述された内容を参考できるからここでは省略する。
【００４６】
図１９は、公開されたほかの実施例で本装置に利用するベース乗法器の原理図であり、計算ビット幅を動的に配置できなければならない要求を満たすことができる。図１９に示したように、Ｍビットの被乗数とｎビットの乗数であり、Ｍ，Ｎはすべて正の整数である。つまり、ここで被乗数と乗数のビット数は同一でもよく、違ってもよい。乗数の低いｎビット（ｎは正の整数、且つ、１＜ｎ≦Ｎである）を入力選択回路に入力する。乗数の低いｎビットがそれぞれ被乗数とＡＮＤ演算を行う。つまり、乗数のこのビット値が１の場合、被乗数自身を取り、そうでなければ０を取る。同時に、乗数を第一シフトレジスタに伝送してシフトを行い、低いｎビットをシフトし、次に再び入力選択回路に入力するのは新しい低いｎビットである。入力選択した後の結果は第二シフトレジスタに入力して相応のシフトを行い、再び加算ツリーに伝送して累積する。ここで累積するのは入力選択を行いながらシフトしたデータとその前に累積した結果である。結果を取得した後、中間結果として中間レジスタに記録する。次の被乗数に対する入力選択をした後、シフトを行うとき、結果レジスタは中間結果を読み取って加算ツリー（装置）に送り累積する。乗数がすべて０であるとき乗法演算は終わる。
【００４７】
このベース乗法器の演算の流れの過程をより明確に示すため具体的な実施例をあげる。被乗数が１０１１１０１１、つまりＭ＝８であり、乗数は１０１１、つまりＮ＝４であると仮定する。
【００４８】
Ｎ＝２のとき、つまり毎回２ビットをシフトするとき、この演算過程は次の通りである。まず、乗数の一番低い２ビットである１１を読み取って被乗数とともに入力選択回路に送り、すべて被乗数自体を選択して第一シフトレジスタに伝送する。一番低いビットに対応するように選択した被乗数はシフトする必要がないから１０１１１０１１であり、次に低いビットに対応するように選択した被乗数を１ビットぐらい左にシフトすると１０１１１０１１０である。これを加算ツリーに伝送する。前に数字を加算してないから結果レジスタに送られたのは１０１１１０１１と１０１１１０１１０の合計、つまり１０００１１０００１である。次に、乗数を右側に２ビットシフトした後その一番低い２ビット、つまり１０を読み取って被乗数とともに入力選択回路に送り、０と１０１１１０１１を取得する。その後、シフトレジスタを通じて０を左側に２ビットシフトすると０、１０１１１０１１であり、左側に３ビットシフトすると１０１１１０１１０００である。結果レジスタにある１０００１１０００１とともに加算ツリーに送り、１０００００００１００１を取得して、結果レジスタに伝送する。このとき、乗数を右側に２ビットシフトすると、すべてが０になるから演算は終わる。結果レジスタの中にあるのが最終演算結果、つまり１０００００００１００１である。
【００４９】
図２０は、公開されたある実施例で本装置に利用したスパース乗法器の原理図で計算ビット幅を動的に配置できなければならないという要求を満たすことができる。文字とおりスパース乗法器はスパース演算に用いられ、つまり乗数あるいは被乗数がスパース表示方式で１の位置を示すとき演算の有効性をさらに高めて演算スピードが加速化できる。図２０に示したように、Ｍビットの被乗数とＮビットの乗数であり、Ｍ，Ｎはすべて正の整数である。つまり、ここで被乗数と乗数のビット数は同一でもよく、違ってもよい。ここで、乗数にスパース表示方式を利用し、絶対あるいは相対位置の方式でこの乗数にある１の位置を示す。ここで演算回路は、配置可能であるためほかの表示方式を利用して演算するとき演算装置の中にある装置を需要に応じて配置できる。例えば、結果レジスタが累積するとき、シフトする必要がないとこのとき結果レジスタと接続されているシフトレジスタは動作しないと決められ、このとき、乗数のシフト情報もこのシフトレジスタに伝達しなくてもよい。関連する具体的な細部は需要に応じて相応に調節して被乗数に対するシフトと結果に対する累積など関連する具体的な細部を実行できる。
【００５０】
このスパース乗法器の演算の流れの過程をより明確に示すため具体的な実施例をあげる。被乗数が１０１１１０１１、つまりＭ＝８で、乗数は００１０００１０、つまりＮ＝８であると仮定する。絶対的な表示方式を利用して乗数を示すと絶対位置で乗数の中にある１の位置を示す。数値の右端にあるビットを第０番目ビットとし、第０番目ビットの左にあるビットを第一ビットとしながらこのように類推する。すると、この乗数は（１，５）と表示される。同時に、この実施例で結果レジスタと接続されているシフトレジスタが動作しないように要求するから乗数のデータをこのシフトレジスタに伝達する必要はない。すると、まず乗数の一番目の数、つまり１を読み取って第一ビットに１があることを表示する。被乗数をシフトレジスタに伝送し、１ビットシフトした後１０１１１０１１０となり加法器に送る。以前の数字を加算するから結果レジスタに伝送される結果は１０１１１０１１０である。その後乗数の次の１の位置、つまり５を読み取って被乗数とともにシフトレジスタに伝送する。シフトレジスタで被乗数を５ビットぐらい右側にシフトして１０１１１０１１０００００を得て加法器に送る。同時に結果レジスタの中にある結果１０１１１０１１０を読み取る。このような絶対表示方法ではシフトする必要がないから直接この結果を加法器に送り累積を行って１１０００１１０１０１１０を得る。累積した結果を再び結果レジスタに伝送する。このとき、乗数にある１はすべて既に計算済だから演算は終わる。もし相対的な方式で乗数を示せばその表示方法を一番高いビット（左端）でありながら０ではない一番目の数字から始まって一番低いビットに向かうにつれ、０ではない各二つの数字の間のビット数で定義する。００１０００１０の場合０で場ない一番目の数字と０ではない次の数字の間は４ビットぐらい離れていて、０ではない二番目の数字と一番低いビットの間は互いに１ビットぐらい離れているから（４，１）と表示する。ここで、この実施例にある結果レジスタと接続されていながら被乗数と連結されているシフトレジスタがすべて動作しなければならないと要求する。まず乗数の一番目の数字４を読み取って二つのシフトレジスタに伝送すれば被乗数を右側に４ビットシフトして結果レジスタのなかにあるデータを右側に４ビットシフトした後、加法器に送り累積を行う。このとき、結果レジスタのデータは０であるから累積結果は１０１１１０１１００００となり、結果レジスタに伝送して記憶させる。その後、乗数の二番目の数字１を読み取ればこの値をシフトレジスタに送り１０１１１０１１０と１０１１１０１１０００００を得て加法器に伝送して累積することによって結果１１０００１１０１０１１０を得る。この結果は、再び結果レジスタに伝送する。このとき乗数にある１はすべて既に計算ずみなので演算は終わる。こうすればデータの希薄性を効果的に利用して効果的な演算つまり０でないデータ同士の演算だけが行える。そ野結果、効果がない演算を減らし演算スピードを加速化させ、性能対電力消耗比を高めた。
【００５１】
0006865847.tif 000006
【００５２】
0006865847.tif 000007
【００５３】
0006865847.tif 000008
【００５４】
融合ベクトル乗法器を利用して全体的に横方向の累積演算を行う。その構造を図２２に示すように、各次元の一成分に従う乗算積演算を終えれば即時加算ツリーに伝送して累積を行い、演算が最終結果を取得する。例えば、その演算流れの過程を図２３の楕円形フレームで示したように第１クッロク周期では各次元でＡｉ＊ｂｉ０（ｉ＝０，１，……，７）の乗算積を計算して取得し、加算ツリーに伝送して累積を行う。計算結果を結果レジスタに伝送してシフトレジスタに１を加算する。第２クロック周期では各次元でシフトレジスタに基づいて２＊Ａｉ＊ｂｉ１（ｉ＝０，１，……，７）の乗算積を計算して取得し、結果レジスタのデータとともに加算ツリーに伝送して累積を行い、シフトレジスタに１を加算する。第３周期では各次元でシフトレジスタに基づいて４＊Ａｉ＊ｂｉ２（ｉ＝０，１，……，７）の乗算積を計算して取得し、結果レジスタのデータとともに加算ツリーに伝送して累積を行い、シフトレジスタに１を加算する。最終の第４クッロク周期では８＊Ａｉ＊ｂｉ３（ｉ＝０，１，……，７）の乗算積を計算して取得し、結果レジスタのデータとともに加算ツリーに伝送して累積を行い、最終結果を算出する。だから、四つの演算周期の後に必要な結果を取得し、演算過程に合計３回のシフトを行った。これに対し、一般的な乗法器では各データを演算予定にはシフト操作を行わなければならない。即ち、操作数が４個の場合、合計４＊３＝１２回のシフト操作が求められる。したがって、この設計では演算順番の変化を通じてシフト値に対する計数操作を大幅に減少させ、性能対電力消耗比を効果的に向上させることができる。
【００５５】
本実施例のほかの側面において、計算ビット幅を動的に配置できる処理方法を提供する。図２４に示すように、次のステップを含む。
Ｓ２４００：制御回路が制御命令を生成し、メモリと演算回路に伝送する。
Ｓ２４０１：メモリは受信した制御命令に基づいて、演算回路にニューラルネットワークの演算予定データを入力する。
Ｓ２４０２：演算回路は受信した制御命令に基づいて、第１演算モジュールの中にある対応する類型の乗法器と加法器回路を選択する。
Ｓ２４０３：演算回路は入力される演算予定データとニューラルネットワークのパラメータ及び制御命令に基づいて、計算ビット幅が異なるニューラルネットワークの演算予定データに対して演算を行う。
【００５６】
更に、ステップＳ２４０３の第１演算モジュールは、加法器回路、ベース乗法器、スパース乗法器及び／又は融合ベクトル乗法器を利用してニューラルネットワークの演算予定データに対する演算を行う。
【００５７】
以上、この処理装置と方法を利用してニューラルネットワークの演算スピードをはるかに高められると同時に動的配置可能性をもってデータビット幅の多様性、演算過程にデータのビット幅を動的に変えられえる相応の要求を満足させることができ、柔軟性が高く、配置可能な程度が高く、演算スピードが速く、電力消費が低い長点をもつ。
【００５８】
また、本発明ではオフラインモデルの構築を含む演算方法と演算装置も提供する。オフラインモデルを生成した後、オフラインモデルに基づいて直接演算を行うことができ、深層学習のフレームを含む総体的なソフトウェアアーキテクチャを実行するときに発生する超過費用をなくし、以下、具体的な実施例と合わせて詳細に説明する。
【００５９】
典型的な応用場面で、ニューラルネットワーク加速機のプログラミングフレームワークは、普通、最上部にあって、プログラミングフレームワークはＣａｆｆｅ，Ｔｅｎｓｏｒｆｌｏｗ，Ｔｏｒｃｈなどに区分できる。図２５に示したように、下層から上層に向かって、順次にニューラルネットワークプロセッサ（ニューラルネットワーク演算に用いられる専用ハードウェア）、ハードウェアドライバ（ニューラルネットワークプロセッサを呼出すソフトウェア用）、ニューラルネットワークプロセッサのプログラミングライブラリ（ニューラルネットワークプロセッサを呼出すためのインタフェースを提供）、ニューラルネットワークプロセッサのプログラミングフレームワーク、及びニューラルネットワーク演算のために必要な高度なアプリケーションである。
【００６０】
本実施例のある側面では、ニューラルネットワークの演算方法を提供し、次のステップを含む。
ステップ１：入力データを取得する。
ステップ２：取得、または、入力データに基づいてオフラインモデルを確定し、オフラインモデルに基づいて演算命令を確定し、次の計算のために呼び出す。
ステップ３：前記演算命令を呼び出し、処理予定データに対する演算を行い、演算結果を取得して出力する。
【００６１】
ここで、入力データは、処理予定データ、ネットワークストラクチャー、ウェイト値を含み、あるいは、この入力データは、処理予定データに関するオフラインモデルデータを含む。
【００６２】
ここで、ステップ２におけるオフラインモデルは、既存のものでもよく、または、外部データ（例えば、ネットワークストラクチャーあるいはウェイと値）に基づいて後に生成されたものでよい。オフラインモデルの設定による演算命令の方式で取得すると、演算過程が高まる。
【００６３】
ステップ３における呼出演算命令は、入力データに処理予定データのみ含まれ、オフラインモデルあるいはオフラインモデルを確定するためのデータが含まれない状態で、演算命令にしたがってネットワーク演算を行う。
【００６４】
ある実施例では、入力データに処理予定データ、ネットワークストラクチャー、ウェイトデータが含まれているとき、次のステップを行う。
ステップ１１：入力データを取得する。
ステップ１２：ネットワークストラクチャーとウェイと値に基づいてオフラインモデルを構築する。
ステップ１３：オフラインモデルを解析して演算命令を取得しながらキャッシュ記憶させ、後の計算時に呼び出す。
ステップ１４：演算命令に基づいて、処理予定データに対する演算を行い演算結果を取得し、出力させる。
【００６５】
以上の実施例では、まず、ネットワークのストラクチャーとウェイト値に基づいてオフラインモデルを作成した後、オフラインモデルの極性を解析した後、演算命令を取得する。これにより、オフラインモデルを記憶しない低メモリとリアルタイム性の強い応用環境で性能を十分に発揮し、演算過程がより簡潔かつ迅速になる。
【００６６】
ある実施例で入力データに処理予定データとオフラインモデルが含まれるとき、次のようなステップを含む。
ステップ２１：入力データを取得する。
ステップ２２：オフラインモデルを解析し、演算命令を読み出してキャッシュ記憶させ、後の計算時に呼び出す。
ステップ２３：演算命令に基づいて処理予定データに対する演算を行い演算結果を取得し、出力させる。
【００６７】
以上の実施例では入力データにオフラインモデルが含まれる場合、オフラインモデルを作った後、演算を行うときオフラインモデルを解析した後、演算命令を取得して深層学習フレームを含む全般的なソフトウェアフレームを実行する過程に発生する追加費用をなくす。
【００６８】
ある実施例で入力データに処理予定データのみ含まれているとき、次のステップによって実行される。
ステップ３１：入力データを取得する。
ステップ３２：キャッシュ記憶されている演算命令を呼び出して、処理予定データに対する演算を行い演算結果を取得して出力する。
【００６９】
以上の実施例で入力データに処理予定データのみ含まれており、ニューラルネットワークストラクチャーとウェイと値が含まれていないとき、演算命令の呼び出しを通じて処理予定データに対する演算を行って演算結果を取得する。
【００７０】
ある実施例ではニューラルネットワークプロセッサを通じて演算命令に従って処理予定データに対する演算を行って演算結果を取得する。ここで、ニューラルネットワークプロセッサは主にニューラルネットワーク演算、命令、処理予定データ及び／又はネットワークモデル（例えばオフラインモデル）を受け付けた後、演算を行うのに用いられる。例えば、多層ニューラルネットワークの場合、入力層データおよびニューラル細胞、ウェイト値、偏差などのデータに基づいて、出力層データを計算して取得する。
【００７１】
他の実施例において、このニューラルネットワークプロセッサは受信した演算命令をキャッシュ記憶させる命令キャッシュユニットがある。
ある実施例において、ニューラルネットワークプロセッサは、処理予定データをキャッシュ記憶させるのに利用するデータキャッシュユニットもある。処理予定データはニューラルネットワークプロセッサに入った後、このデータキャッシュユニットに一時的に記憶させ、後に演算命令と合わせて再度演算を行う。
【００７２】
以上の演算方法に基づいて、本実施例では次のようなものを含む演算装置を提供する。
入力モジュール：入力データの取得に用いられ、この入力データは、処理予定データ、ネットワークストラクチャーとウェイト値を含み、または、この入力データは処理予定データとオフラインモデルデータを含む。
モデル生成モジュール：入力されたネットワークストラクチャーとウェイトデータに基づいてオフラインモデルの構築するに用いられる。
ニューラルネットワーク演算モジュール：入力モジュールにあるオフラインモデルデータあるいはモデル生成モジュールに構築されているオフラインモデルに基づいて演算命令を生成しかつキャッシュ記憶させ、演算命令に基づいて処理予定データに対して演算を行って演算結果の取得に用いられる。
出力モジュール：前記演算結果の出力に用いられる。
制御モジュール：入力データの類型を検査し且つ次の操作の実行に用いられる；
入力データに処理予定データ、ネットワークストラクチャーとウェイト値が含まれているとき、入力モジュールがネットワークストラクチャーとウェイト値をモデル生成モジュールに入力してオフラインモデルを構築するよう制御し、且つ、ニューラルネットワーク演算モジュールがモデル生成モジュールが入力するオフラインモデルに基づいて入力モジュールが入力する処理予定データに対する演算を行うよう制御する。
入力データに処理予定データとオフラインモデルが含まれているとき、入力モジュールが処理予定データとオフラインモデルをニューラルネットワーク演算モジュールに入力するよう制御し、且つ、オフラインモデルがオフラインモデルに基づいて演算命令を生成しながらキャッシュさせ、演算命令に基づいて処理予定データに対する演算を行うよう制御する。
入力データに処理予定データのみあるとき、入力モジュールが処理予定データをニューラルネットワーク演算モジュールに入力するよう制御し、且つ、ニューラルネットワーク演算モジュールがキャッシュ記憶されている演算命令を呼び出して処理予定データに対する演算を行うよう制御する。
【００７３】
前記ニューラルネットワーク演算モジュールはモデル解析ユニットとニューラルネットワークプロセッサを含み、ここで、
モデル解析ユニットは、オフラインモデルに基づいて演算命令の生成に用いられ、
ニューラルネットワークプロセッサは、次の段階の計算で呼出すために用いられる演算命令をキャッシュ記憶させ、あるいは入力データの中に処理予定データのみ含まれているときにキャッシュ記憶されている演算命令を呼び出し、且つ、演算命令に基づいて処理予定データに対する演算を行って演算結果の取得に用いられる。
【００７４】
ある実施例において、ニューラルネットワークプロセッサは命令キャッシュユニットを有し、演算命令をキャッシュ記憶させ、次の段階の計算で呼び出すのに用いられる。
【００７５】
ある実施例において、上記オフラインモデルは特殊な構造により定義されたテキストファイル、または、各種のニューラルネットワークモデルであってもよい。例えば、Ｃａｍｂｒｉｃｏｎ＿ｍｏｄｅｌ、ＡｌｅｘＮｅｔ＿ｍｏｄｅｌ、ＧｏｏｇｌｅＮｅｔ＿ｍｏｄｅｌ、ＶＧＧ＿ｍｏｄｅｌ、Ｒ−ＣＮＮ＿ｍｏｄｅｌ、ＧＡＮ＿ｍｏｄｅｌ、ＬＳＴＭ＿ｍｏｄｅｌ、ＲＮＮ＿ｍｏｄｅｌ、ＲｅｓＮｅｔ＿ｍｏｄｅｌなどのモデルであってもよい。しかし、本実施例であげたこのようなモデルに局限されない。
【００７６】
オフラインモデルは、オリジナルネットワークにある各計算ノードのネットワーク値および命令データをはじめ必要なネットワーク構成情報などを含む。ここで、命令には各計算ノードの計算属性および各計算ノード間の連結関係をはじめとする情報が含められているため、プロセッサが再度前記オリジナルネットワークを実行させるとき、このネットワークに対応するオフラインモデルを直接実行させることで、同一のネットワークに対してコンパイルなど操作をする必要がなくなり、プロセッサが同ネットワークを実行させるときの演算時間を短縮し、プロセッサの処理効率を高める。
【００７７】
好ましくは、プロセッサは汎用プロセッサである。例えば、ＣＰＵ（Ｃｅｎｔｒａｌ    Ｐｒｏｃｅｓｓｉｎｇ    Ｕｎｉｔ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ    Ｕｎｉｔ）、あるいはＩＰＵ（Ｉｎｔｅｌｌｉｇｅｎｃｅ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ），ＩＰＵは人工ニューラルネットワークの演算実行に用いられる処理装置である。
【００７８】
ある実施例において、処理予定データはニューラルネットワークを利用して処理できるポータルであり、例えば、連続する単一画像、音声、またはビデオストリームの中の少なくとも一つになり得る。
【００７９】
ある実施例において、前記ネットワークストラクチャーは各種のニューラルネットワーク構造でもよい。例えば、ＡｌｅｘＮｅｔ、ＧｏｏｇｌｅＮｅｔ、ＲｅｓＮｅｔ、ＶＧＧ、Ｒ−ＣＮＮ、ＧＡＮ、ＬＳＴＭ、ＲＮＮ、ＲｅｓＮｅｔなどでもよくて、この実施例で提供したこのような構造にのみ限らない。要するに、上述したネットワーク構造はオフラインモデルと相互対応するということである。例えば、ネットワーク構造がＲＮＮのとき、オフラインモデルはＲＮＮ＿ｍｏｄｅｌであり、このモデルにはＲＮＮネットワーク構造の中にある各ノードのネットワークウェイト値および命令データなど必要なＲＮＮネットワーク構成情報が含まれている。ここで、命令には各計算ノードの計算属性および各計算ノード間の連結関係などの情報が含まれる。
【００８０】
具体的には、入力モデルによる入力データの違いによって、本実施例の演算装置は次の三つの実行形式を有する。
１、入力モジュールからの入力データがネットワークストラクチャー、ウェイト値、処理予定データのとき、制御モジュールは入力モジュールがネットワークストラクチャーとウェイト値データをモデル生成モジュールに伝送し、処理予定データをモデル解析モジュールに伝送するよう制御する。制御モデルはモデル生成モジュールが具体的なネットワークストラクチャーおよび相応するウェイト値に基づいてオフラインモデル（オフラインモデルは既存の設定構造によって定義するテキストファイルでもよく、ニューラルネットワークのなかにある各計算ノードの計算属性および計算ノード間の連結関係などの情報を含んでもいい、例えば、相応するネットワークストラクチャーおよびウェイト値に基づいて同オフラインモデルを構築してもよい）を生成し、同オフラインモデルをモデル解析ユニットに伝送するよう制御する。制御モジュールは、モデル解析ユニットが受けたオフラインモデルを解析し、ニューラルネットワークプロセッサが識別できる演算命令を得て（つまり、前記オフラインモデルのテキストファイルに基づいて相応するネットワーク演算命令をマッピングし、ネットワークコンパイラー操作を必要としない）演算命令と処理予定データをニューラルネットワークプロセッサに送るよう制御する。ニューラルネットワークプロセッサは受信した演算命令に従って処理予定データに対する演算を行って演算結果を得て、この演算結果を出力モジュールに伝送して出力させるようにする。
【００８１】
２．入力モジュールが入力するデータがオフラインモデルと処理予定データであるとき、制御モジュールは入力モジュールがオフラインモデルと処理予定データをモデル解析ユニットに直接送るように制御し、次の動作原理は一番目の状態と同様である。
【００８２】
３．入力モジュールが入力するデータに処理予定データのみ含まれるとき、制御モジュールは入力モジュールがこの処理予定データをモデル解析ユニットを経てニューラルネットワークプロセッサに送り、ニューラルネットワークプロセッサはキャッシュ記憶されている演算命令に従って処理予定データに対する演算を行って演算結果を得るよう制御する。入力モジュールは、入力データの類型の判断に用いられる判断モジュールを含む。当然ながら、通常はこのような状態が始めて利用するニューラルネットワークプロセッサでは現れないように、命令キャッシュに既に確定された演算命令が存在する。
【００８３】
したがって、現在のネットワーク演算と以前のネットワーク演算のオフラインモデルが違うとき、入力モジュールが入力するデータにはネットワーク構造、ウェイト値データ、処理予定データが含まれるべきであり、モデル生成モジュールを通じて新しいオフラインモデルを生成した後、次のネットワーク演算を行う。現在のネットワーク演算が事前に既に相応するオフラインモデルを得たとき入力モジュールが入力するデータにはオフラインモデルと処理予定データが含まれるべきである。現在のネットワーク演算と以前のネットワーク演算のオフラインモデルが同様のとき、入力モジュールが入力するデータに処理予定データのみあってもいい。
【００８４】
公開されたある実施例では、演算装置がサブモジュールとしてコンピュータシステムのＣＰＵモジュールの中に集積されている。処理予定データとオフラインモデルはＣＰＵによって制御され演算装置に伝送される。モデル解析ユニットは送られてくるニューラルネットワークオフラインモデルを解析して演算命令を生成する。続いて、演算命令と処理予定データはニューラルネットワークプロセッサに伝送されて入り、演算処理を通じて演算結果を得てこの演算結果をメインメモリに送り返す。次の計算過程でネットワーク構造が変わらなく、処理予定データを繰り返し伝送して入れてくれればニューラルネットワーク計算が行われ演算結果が得られる。
【００８５】
以下、具体的な実施例を通じて演算装置および方法を詳しく説明する。
図２６に示したように本実施例における演算方法は、次のようなステップを含む。
入力データに処理予定データ、ネットワーク構造、ウェイト値データが含まれているとき、次のようなステップを実行する。
ステップ１１、入力データを得る。
ステップ１２、ネットワーク構造とウェイト値データに準じてオフラインモデルを構築する。
ステップ１３、オフラインモデルを解析して演算命令を得て且つキャッシュ記憶させ、次の計算で呼び出せるようにする。
ステップ１４、演算命令に従って処理予定データに対する演算を行ってニューラルネットワーク演算結果を得て出力させる。
【００８６】
入力データに処理予定データとオフラインモデルが含まれているとき、次のようなステップを実行する。
ステップ２１、入力データを得る。
ステップ２２、オフラインモデルを解析し、演算命令を得て且つキャッシュ記憶させ、次の計算で呼び出すことに用いられる。
ステップ２３、演算命令に従って処理予定データに対する演算を行い、ニューラルネットワーク結果を得て出力するようにする。
【００８７】
入力データに処理予定データのみ含まれているとき、次のようなステップを実行する。
ステップ３１、入力データを得る。
ステップ３２、キャッシュ記憶されている演算命令を呼び出して処理予定データに対する演算を行い、ニューラルネットワーク演算結果を得て出力するようにする。
【００８８】
ニューラルネットワークプロセッサを通じて演算命令に従って処理予定データに対する処理を行って演算結果を得る。このニューラルネットワークプロセッサには命令キャッシュ記憶ユニットとデータキャッシュ記憶部があり、それぞれ受ける演算命令と処理予定データをキャッシュ記憶させることに用いられる。
【００８９】
本実施例に係る入力のネットワーク構造はＡｌｅｘＮｅｔであり、ウェイト値データはｂｖｌｃ＿ａｌｅｘｎｅｔ．ｃａｆｆｅｍｏｄｅｌ、処理予定データは連続的になっている個別的な画像であり、オフラインモデルはＣａｍｂｒｉｃｏｎ＿ｍｏｄｅｌである。既にあるオフラインモデルの場合、このオフラインモデルＣａｍｂｒｉｃｏｎ＿ｍｏｄｅｌを解析して、一連の演算命令を生成し、次いで生成した演算命令をニューラルネットワークプロセッサ２７０７にある命令キャッシュ記憶ユニットに伝送し、入力モジュール２７０１が入力する画像をニューラルネットワークプロセッサ２７０７にあるデータキャッシュ記憶部に伝送する。
【００９０】
以上、本実施例の方法を利用すると、ニューラルネットワークプロセッサで演算する流れの過程を大幅に簡略化することができ、伝統的なすべてのプログラミングフレームワークを呼び出すときにもたらされる追加的なメモリとＩＯ費用をなくすことができる。この方法を利用すると、ニューラルネットワークアクセレレーターが低い内部記憶とリアルタイム性が高い環境で演算性能を十分に発揮できるようにする。
【００９１】
図２７に示したように、本実施例では演算装置を開示し、入力モジュール２７０１、モデル生成モジュール２７０２、ニューラルネットワーク演算モジュール２７０３、出力モジュール２７０４、制御モジュール２７０５を含み、ここで、ニューラルネットワーク演算モジュール１０３はモデル解析ユニット２７０６とニューラルネットワークプロセッサ２７０７を含む。
【００９２】
この装置のキーワードはオフライン実行であり、これはオフラインモデルを生成した後、オフラインモデルを利用して直接関連する演算命令を生成し且つウェイト値データを入れて、処理予定データに対する処理演算を行う。具体的には、
前述の入力モジュール２７０１はネットワーク構造、ウェイト値データ、処理予定データの組合あるいはオフラインモデルと処理予定データの組合を入力することに用いられる。入力がネットワーク構造、ウェイト値データ、処理予定データの場合、ネットワーク構造とウェイト値データをモデル生成モジュール２７０２に送り次の演算を実行することに用いられるオフラインモデルを生成する。入力がオフラインモデルと処理予定データであるとき、オフラインモデルと処理予定データを直接モデル解析ユニット２７０６に送って次の演算を実行する。
前述の出力モジュール２７０４は特定のネットワーク構造と処理予定データセットに基づいて生成した確定的な演算データの出力に用いられる。ここで、出力データはニューラルネットワークプロセッサ２７０７によって演算されて得られる。
前述のモデル生成モジュール２７０２は入ってくるネットワーク構造パラメータとウェイト値データにしたがって下の階で利用できるオフラインモデルの生成に用いられる。
前述のモデル解析ユニット２７０６は入ってくるオフラインモデルを解析し、ニューラルネットワークプロセッサ２７０７に直接伝送できる演算命令を生成すると同時に入力モジュール２７０１が入れてくれる処理予定データをニューラルネットワークプロセッサ２７０７に送ることに用いられる。
前述のニューラルネットワークプロセッサ２７０７は入ってくる演算命令と処理予定データにしたがって演算を行い、確定的な演算結果を得て出力モジュール２７０４に伝送することに用いられる。命令キャッシュ記憶ユニットとデータキャッシュ記憶部が含まれている。
【００９３】
前述の制御モジュール２７０５は入力データの類型を検査し且つ次の操作を実行することに用いられる。
入力データで処理予定データ、ネットワーク構造とウェイト値データが含まれているとき、入力モジュール２７０１がネットワーク構造とウェイト値データをモデル生成モジュール２７０２に入力してオフラインモデルを構築するように制御し、ニューラルネットワーク演算モジュール２７０３がモデル生成モジュール２７０２が入力するオフラインモデルに基づいて入力モジュール２７０１が入力する処理予定データに対する演算を行うように制御する。
【００９４】
入力データに処理予定データとオフラインモデルが含まれているとき、入力モジュール２７０１が処理予定データとオフラインモデルをニューラルネットワーク演算モジュール２７０３に入力するよう制御し、ニューラルネットワーク演算モジュール２７０３がオフラインモデルに基づいて演算命令を生成し且つキャッシュ記憶させ、演算命令に基づいて処理予定データに対するニューラルネットワーク演算を行うように制御し；
入力データに処理予定データのみ含まれているとき、入力モジュール２７０１が処理予定データをニューラルネットワーク演算モジュール２７０３に入力するよう制御し、ニューラルネットワーク演算モジュール２７０３がキャッシュ記憶されている演算命令を呼び出し、処理予定データに対するニューラルネットワーク演算を行うように制御する。
【００９５】
本実施例における入力されるネットワーク構造はＡｌｅｘＮｅｔで、ウェイト値データはｂｖｌｃ＿ａｌｅｘｎｅｔ．ｃａｆｆｅｍｏｄｅｌであり、処理予定データは連続的になっている個別的な画像である。モデル生成モジュール１０２は入力されるネットワーク構造とウェイト値データに基づいて新しいオフラインモデルＣａｍｂｒｉｃｏｎ＿ｍｏｄｅｌを生成する。生成されたオフラインモデルＣａｍｂｒｉｃｏｎ＿ｍｏｄｅｌは次の入力として個別的に使用できる。モデル解析ユニット２７０６はオフラインモデルＣａｍｂｒｉｃｏｎ＿ｍｏｄｅｌを解析して一連の演算命令を生成できる。モデル解析ユニット２７０６は生成された演算命令をニューラルネットワークプロセッサ２７０７にある命令キャッシュ記憶ユニットに送り、入力モジュール２７０１が伝送して入れてくれる入力画像をニューラルネットワークプロセッサ２７０７にあるデータキャッシュ記憶部に送る。
【００９６】
また、複合スカラ命令を支援する演算装置と演算方法を提供し、演算過程で複合スカラ命令（浮動小数点命令と固定小数点命令を統一させる命令）を提供することを通じて、浮動小数点命令と固定小数点命令を大きな程度で統一させて解読段階で命令の種類を区分せず、具体的な計算のときだけアドレスフィールドにあるオペランドのアドレスにしたがってオペランドが浮動小数点データか、固定小数点データかを確定して命令の解読論理を簡略化し、また命令セットをより簡素化させた。以下、具体的な実施例と組み合わせについて具体的に説明する。
【００９７】
図２８はある実施例で提供する複合スカラ命令を支援する装置の構造原理図である。図２８に示したように、装置には制御装置モジュール２８１０、記憶モジュール２８２０、演算装置モジュール２８３０、入出力モジュール２８４０が含まれている。
【００９８】
制御装置モジュール２８１０は記憶モジュールから命令を読み取り且つローカルの命令キューに記憶させ、また命令キューにある命令を制御信号に解読して記憶モジュール、演算装置モジュール、入出力モジュールの動作を制御することに用いられる。
【００９９】
記憶モジュール２８２０にはレジスタセット、ＲＡＭ、ＲＯＭなどの記憶部が含まれており、命令、オペランドなどの相異なるデータを記憶させることに用いられる。オペランドには浮動小数点データと固定小数点データが含まれ、記憶モジュールは浮動小数点データと固定小数点データを相異なるアドレスに対応する空間、例えば違うＲＡＭアドレスあるいは違うレジスタ番号に記憶させて、アドレスやレジスタ番号を通じて読み取るデータが浮動小数点か固定小数点かを判断できる。
【０１００】
演算装置モジュール２８３０は浮動小数点データと固定小数点データに対して四則演算、論理演算、シフト操作、補数演算などの操作を行う。ここで、四則演算には加算と減算、乗算、除算の四つの演算操作がある。論理演算には論理積、論理和、非含意、逆非含意など四つの演算操作がある。演算装置モジュールは制御装置モジュールの制御信号を受けた後、オペランドがあるアドレスあるいはレジスタ番号を読み取ってそれが浮動小数点類型のデータか固定小数点類型のデータ化を判断し、演算装置モジュールは記憶モジュールから操作データを読み取りながら対応する演算を行う。演算中間結果は記憶モジュールの中にあり、最終演算結果を入出モジュールに記憶させる。
【０１０１】
入出力モジュール２８４０は入出力されるデータを記憶、伝送することに利用できる。初期化するとき入出モジュールは初期の入力データとコンパイラされた符号スカラ命令を記憶モジュールに記憶させて演算が終わった後に演算装置モジュールが伝送する最終演算結果を取得する。ほかに入出力モジュールはメモリから命令をコンパイラすることに必要な情報を読み取ってコンピュータの翻訳機がプログラムを各種の命令でコンパイラするように提供する。
【０１０２】
以上からわかるように、本実施例に示した複合スカラ命令を支援する装置は複合スカラ命令に高い効率の実行環境を提供する。
【０１０３】
図２９Ａと図２９Ｂは、本実施例で提供する記憶モジュールの組織形式に関する実例図である。記憶モジュールは浮動小数点データと固定小数点データをほかの記憶空間、例えば異なるアドレスあるいはほかのレジスタ番号に記憶させ、アドレスやレジスタ番号を通じて読み取るデータが浮動小数点数か固定小数点数かを判断できる。
【０１０４】
本実施例において、初期アドレスが００００Ｈで最後のアドレスが３ＦＦＦＨであるＲＡＭと１６個のレジスタとなっているレジスタセットで構成された記憶モジュールを実例として、浮動小数点数の記憶と固定小数点数の記憶をどのように分離するかを示す。図２９Ａに示したように、ＲＡＭで固定小数点データは、ただアドレスが００００Ｈから１ＦＦＦＨまでのＲＡＭユニットにだけ、浮動小数点データは２０００Ｈから３ＦＦＦＨまでのＲＡＭユニットにだけ記憶され、命令は任意のＲＡＭユニットに記憶でき、命令セットの中で変わらない情報をＲＯＭに記憶させることもできる。図２９Ｂに示したようにレジスタセットで固定小数点データは０から７までのレジスタにだけ保存され、浮動小数点は８から１５までのレジスタにだけ保存される。レジスタの中に記憶されている値がＲＡＭアドレスであるとき、０から７までのレジスタは固定小数点データを記憶させるＲＡＭアドレスに利用され、８から１５までのレジスタは浮動小数点データを記憶させるＲＡＭアドレスに用いられる。
【０１０５】
図３０Ａは本実施例で提供する複合スカラ命令の実例図である。図３０Ａに示したように各命令にはオペコードフィールド、オペランドアドレスフィールド（あるいは即値）、宛先アドレスフィールドがある。オペコードフィールドにはオペコードが含まれており、オペランドアドレスフィールドにはソースオペランド・アドレス１とソースオペランド・アドレス２が含まれており、各ソースオペランドの記憶アドレスを表す。宛先アドレスフィールドはオペランド演算結果の記憶アドレスである。
【０１０６】
オペコードフィールドは類型の違う操作、例えば加算、減算、乗算、除算などを区別することに利用し、オペランドの類型を区別するには利用しない。
【０１０７】
オペランドアドレスフィールドにはＲＡＭアドレス、レジスタ番号、即値が含まれる。浮動小数点データと固定小数点データの記憶に利用するＲＡＭアドレ記憶スタ番号は違うからアドレスフィールドを利用して浮動小数点オペランドと固定小数点オペランドを区別できる。オペランドアドレスフィールドに記憶されているのが即値であるときは、演算装置モジュールが識別できるデータ類型標識ビットで浮動小数点オペランドと固定小数点オペランドを区分しなければならない。
【０１０８】
宛先アドレスフィールドは、ＲＡＭアドレスか、レジスタ番号である。このアドレスフィールドはオペランドの類型と互いに対応し、つまり、浮動小数点オペランドの演算結果を浮動小数点データに対応する記憶部に保管し、固定小数点オペランドの演算結果を固定小数点データに対する記憶部に保管する。
【０１０９】
したがって本発明で提供する複合スカラ命令は、浮動小数点命令と固定小数点命令を統一させた命令であり、浮動小数点命令と固定小数点命令を大きい程度で統一させ、解読段階で命令の類型を区分せず、具体的に計算するときだけオペランドを読み取るオペランドアドレスフィールドの中のアドレスにしたがってオペランドが浮動小数点データか固定小数点データかを確定するため、命令の解読論理を簡略化し、命令セットがより簡素化できるようにする。
【０１１０】
また、本発明で提供する複合スカラ命令にあわせて、いろいろなアドレス指定方式を利用すると、アドレス指定方式を確定する標識ビットを増加する必要がある。
【０１１１】
例えば、図２９Ａと図２９Ｂに示した記憶モジュール組織構造を利用する場合、加算命令の操作コードは０００１であるものの、いろんなアドレス指定方式を利用するとき、複合スカラ命令の構成は図３０Ｂから図３０Ｅに示したのと同じようになる。
【０１１２】
図３０Ｂは本実施例で提供するレジスタでアドレス指定するときの複合区カラー命令の実例図である。図３０Ｂに示したようにレジスタでアドレスを指定するとき、アドレス指定方式の標識ビットは０１で、ソース・オペランド１と２はそれぞれソース・オペランド１のレジスタ番号とソース・オペランド２のレジスタ番号に対応するレジスタに保管され、番号０から７までのレジスタに記憶されるのは固定小数点データで、番号８から１５までのレジスタに記憶されるのは浮動小数点データである。
【０１１３】
図３０Ｃは本実施例で提供するレジスタによる間接アドレス指定をするときの複合スカラ命令実例図である。図３０Ｃに示したように、レジスタによる間接アドレス指定をするとき、アドレス指定方式標識ビットは１０でありＲＡＭでソース・オペランド１と２のアドレスはそれぞれソース・オペランド１のレジスタ番号とソース・オペランド２のレジスタ番号に対応するレジスタに保管される。ここで、固定小数点データのＲＡＭアドレス（００００Ｈから１ＦＦＦＨまで）は０から７までのレジスタに保管され、浮動小数点データのＲＡＭアドレス（２０００Ｈから３ＦＦＦＨで）は８から１５までのレジスタに保管される。宛先アドレスフィールドには宛先レジスタ番号あるいは宛先ＲＡＭのアドレスが記憶される。固定小数点データはアドレスが００００Ｈから１ＦＦＦＨまでの範囲の中にあるＲＡＭユニットの中に保管され、浮動小数点データはアドレスが２０００Ｈから３ＦＦＦＨまでの範囲の中にあるＲＡＭユニットの中に保管される。
【０１１４】
図３０Ｄは本実施例で提供する即値によるアドレス指定をするとき複合スカラ命令の実例図である。図３０Ｄに示したようにオペランドアドレスフィールドのデータが二つの即値であればアドレス指定方式標識ビットは００で、アドレス方式標識ビットとオペランドアドレスフィールド間にデータ類型標識ビットが設定されている。即値が固定小数点類型であるとき、このデータ類型の標識ビットは０である。即値が浮動小数点類型のときこのデータ類型の標識ビットは１である。
【０１１５】
図３０Ｅは本実施例で提供するＲＡＭによるアドレス指定をするとき、複合スカラ命令の実例図である。図３０Ｅに示したようにオペランドアドレスフィールドがＲＡＭアドレスであればアドレス指定方式標識ビットは１１である。ソースオペランド１と２はそれぞれＲＡＭアドレスに対応するＲＡＭユニットに保管される。ここで、固定小数点データはＲＡＭアドレス００００Ｈから１ＦＦＦＨまでに対応するＲＡＭユニットの中に保管され、浮動小数点データはＲＡＭアドレス２０００Ｈから３ＦＦＦＨまでに対応するＲＡＭユニットの中に保管される。
【０１１６】
以上の各アドレス指定方式を利用する関連命令において、宛先アドレスフィールドには宛先レジスタ番号あるいは宛先ＲＡＭアドレスが記憶される。固定小数点データは０から７までのレジスタあるいはアドレスが００００Ｈから１ＦＦＦＨまでの範囲にあるＲＡＭユニットに記憶される。浮動小数点データは８から１５までのレジスタあるいはアドレスが２０００Ｈから３ＦＦＦＨまでの範囲にあるＲＡＭユニットに保存される。
【０１１７】
図３１は本実施例に示した複合スカラ命令を支援する演算方法のローチャートである。図４に示したように本発明の実施例では複合スカラ命令を支援する演算方法を提供し、前記複合スカラ命令を支援する装置を利用してデータ演算を行い、具体的に次のステップを含む。
Ｓ３１０１：類型の異なるデータを異なるアドレスに記憶させる。
記憶モジュールは浮動小数点データと固定小数点データを相異なるアドレスに対応するスペースに記憶させる。例えば相異なるＲＡＭアドレスあるいは相異なるレジスタ番号をあげられる。
Ｓ３１０２：複合スカラ命令を制御信号で解読する。
制御装置モジュールは記憶モジュールに入出力（ＩＯ）命令を送信して記憶モジュールから複合スカラ命令を読み取り、且つローカル命令キューを記憶させる。制御装置モジュールはローカル命令キューから複合スカラ命令を読み取りながら制御信号で解読する。
Ｓ３１０３：制御信号に基づいて操作データを読み取り、且つ読み取る操作データのアドレスにしたがって操作データの類型を判断し、操作データに対する演算を行う。
演算装置モジュールは制御装置モジュールから来る制御信号を受信した後、オペランドのアドレスフィールドを読み取り、読み取ったのが浮動小数点類型のデータか固定小数点累計のデータ化を判断する。もし、オペランドが即値であればデータ類型標識ビットによってオペランド類型を判断して計算する。もし、オペランドがＲＡＭあるいはレジスタからきたとすればＲＡＭアドレスあるいはレジスタ番号によってオペランド類型を判断し、記憶モジュールからオペランドを読み取り、且つ対応する演算を行う。
Ｓ３１０４：演算結果を対応する類型のアドレスに記憶させる。
制御装置モジュールが演算装置モジュールにＩＯ命令を送信し、演算装置モジュールは演算結果を記憶モジュールあるいは入出力モジュールに伝送する。
【０１１８】
以上の実施例から分かるように、本発明で提供する複合スカラ命令の実行方法によれば、複合スカラ命令を正確で高い効率で実行できる。ここで、提供する複合スカラ命令を支援する装置は複合スカラ命令に高い効率の実行環境を提供する。提供する複合スカラ命令の実行方法は複合スカラ命令を正確で高い効率で実行できる。
【０１１９】
また、本発明では技術命令を支援する技術装置と計数方法を提供する。入力データ（計数予定データ）の中で与えられた条件を満たす元素の個数を統計するアルゴリズムを命令に作成する形式を通じて計算効率を高めることができる。以下、具体的な実施例とあわせて詳細に説明する。
【０１２０】
この実例的な実施例で計数命令を支援する計数装置を提示する。図３２は本実施例にある計数装置のフレームワーク構造原理図である。図３２に示したように本発明で提供する計数命令を支援する計数装置は、記憶部、計数部、レジスタ部などを含む。記憶部は計数部と連結されて計数予定入力データを記憶させることに利用され、統計する入力データの中で与えられた条件を満たす元素の個数を記憶させることに用いられる。この記憶部はメインメモリでもいいし、一時記憶型メモリでもいい、更には、スクラッチパッドメモリであってもいい。統計しようとする入力データを一時的にスクラッチパッドメモリに記憶させ、計数命令をすばやく効果的に幅の違うデータを支援するようにして実行性能を高められるようにする。
【０１２１】
ある実現例において、この記憶部はスクラッチパッドメモリであり、ビット幅の違う入力データ及び／又は大きさが違うメモリスペースを占める入力データを支援し、計数予定入力データをスクラッチパッドメモリに一時的に記憶させ、計数過程が幅の違うデータをすばやく効果的に支援できるようにする。計数部はレジスタ部と接続されており、計数部は計数命令を得て計数命令に基づいてレジスタ部にある入力データのアドレスを読み取って後、入力データのアドレスにしたがって記憶部の中で計数予定当該の入力データを取得しながら入力データの中で与えられた条件を満たす元素個数を統計計数して最終計数結果を得ながらこの計数結果を記憶部に記憶させる。レジスタ部は記憶部に記憶された統計しようとする入力データのアドレスを記憶させることに用いられる。ある実現例において、レジスタ部に記憶されたアドレスはスクラッチパッドメモリにある統計しようとする入力データのアドレスである。
【０１２２】
ある実施例において、統計しようとする入力データのデータ類型は０／１ベクトルでもいいし、数値型のベクトル又はマトリックスでもいい。入力データの中で与えられた条件を満たす元素個数を統計するとき、統計する元素が満たすべき条件は一つの与えられた元素と同様であることもある。例えばベクトルＡの中にある元素ｘの個数を統計するとき、ｘは数字ｎ，ｎ＝０，１，２．．．であってもいいし、ｘはベクトルｍであってもいい、例えば、ｍ＝００，０１，１１．．．である。統計する元素が満たすべき条件として、与えられた表現式を満たすこともありうる、例えば、ベクトルＢの中で数値ｙより大きい元素個数を計数する場合、ここで、ｙは正の整数ｎ，  ｎ＝０，１，２．．であってもいいし、浮動小数点数ｆ，ｆ＝０．５，０．６．．．であってもいい。例えば、ベクトルＣの中でｚを完除する元素個数を統計する場合、ｚは整数ｎで，ｎ＝０，１，２．．．でありうる。
【０１２３】
図３３は本実施例に示した計数装置の中にある計数部の構造原理図である。図３３に示したように計数部には入出力モジュール、演算モジュール、アキュムレータモジュールがある。
【０１２４】
入出力モジュールは演算モジュールと接続されている。記憶部の中にある計数予定入力データの場合、毎回ここで、長さ（この長さは実際的な要求に基づいて配置できる）が設定された一つの区間のデータを読み取り、演算モジュールに入力させて演算を行い、演算モジュールが演算を終えた後、入出力モジュールは長さが固定された次の区間のデータを続けて読み取り、これは計数予定入力データのすべての元素を読み取るまで行う。入出力モジュールはアキュムレータモジュールが計算して得た計数結果を記憶部に出力する。
【０１２５】
演算モジュールはアキュムレータモジュールと接続され、長さが固定されたデータを入力し、演算モジュールの加法器を利用して与えられた条件を満たす入力データの各元素の個数を加算し、取得した結果をアキュムレータモジュールに出力する。演算モジュールは判断サブモジュールを更に含み、これは入力データが与えられた条件（与えられた条件は与えられた元素と同様でもいいし、数値が設定された区間の間にあるものでもいい）を満たすかそうでないかを判断するのに用いられる。もし満たしたら１を出力し、満たさないと０を出力した後、加法器に伝送して累積する。
【０１２６】
0006865847.tif 000009
【０１２７】
0006865847.tif 000010
【０１２８】
アキュムレータモジュールは、また入出力モジュールと連結されており、演算モジュールで出力する結果をアキュムレータを利用して新しい入力がなくなるまで累積する。
【０１２９】
計数部は多重パイプラインステージ構造であり、ここで、入出力モジュールでベクトルをとる操作は第１パイプランステージであり、演算モジュールは第２パイプランステージ、アキュムレータモジュールは第３パイプランステージである。これらの部品は相異なるパイプラインステージであり、計数命令が求める操作をより効果的に実現できる。
【０１３０】
図３５は本実施例に示した計数装置の中にある計数命令の命令セット様式原理図である。図３５に示したように計数命令には操作コードと一つあるいは複数の操作ドメインがある。ここで、操作コードはこの命令が計数命令であることを指示することに利用され、計数部はこの操作コードの識別を通じて計数演算を行える。操作ドメインは、この計数命令の中にある計数予定入力データを指示することに利用するアドレス情報と判断条件を含めるアドレス情報を含む。例えば一つのベクトルを取得しなければならないときにはレジスタ番号に基づいて相応のレジスタの中でベクトルの初期アドレスとベクトルの長さを取得して再びベクトルの初期アドレスとベクトルの長さに基づいて記憶部で相応のアドレスに記憶されているベクトルを取得することができる。本実施例で利用した命令は簡素化された様式を持つから命令セットを使用しやすく、支援するデータの長さを敏活にすることができる。
【０１３１】
図３６は本実施例に示した計数装置の中にある計数部の実行過程に関するフローチャートである。図２６に示したように、動作するとき、計数部は計数命令の操作ドメインにあるアドレス情報に基づいてレジスタ部で計数予定入力データのアドレスを読み取った後、このアドレスに基づいて記憶部で計数予定入力データを読み取る。計数予定入力データはスクラッチパッドメモリに記憶され、毎回計数部はスクラッチパッドメモリから長さが固定されたある区間の入力データを得て、判断サブモジュール、元素が与えられた条件を満たすかどうかを判断した後で加法器を利用してこの部分の入力データの中で与えられた条件を満たせる元素の個数を統計し、各区間で与えられた条件を満たす元素の個数をアキュムレータモジュールを利用して累積し、最終計数結果を得ながら計数結果を記憶部に記憶される。
【０１３２】
図３７は本実施例に示した計数装置の細かい構造原理図である。図３７に示したように、本発明に示した計数命令を支援する装置は、命令メモリ、命令処理ユニット、命令キャッシュ記憶ユニット、従属関係処理ユニットを含む。
【０１３３】
命令処理ユニットの場合、これは命令メモリから計数命令を取得しながら計数命令を処理した後、記述した命令キャッシュ記憶ユニットと従属関係処理ユニットへの提供に用いられる。ここで、命令処理ユニットは、命令フェッチモジュールと解読モジュールを含む。命令フェッチモジュールは命令メモリと連結され、命令メモリから計数命令の受信に用いられる。解読モジュールは命令フェッチモジュールと連結されており、取得した計数命令の解読に用いられる。このほかに、命令処理ユニットは命令キューメモリも含む。命令キューメモリは解読モジュールと接続されており、解読した計数命令を順序に記憶しながら順序に命令を命令キャッシュ記憶ユニットと従属関係処理ユニットに送信することに用いられる。命令キャッシュ記憶ユニットと従属関係処理ユニットが受けられる命令の数量が限界されていることを考慮して、命令キューメモリの中にある命令は命令キャッシュ記憶ユニットと従属関係処理ユニットにスペースがあることを待って続いて順番に送信できる。
【０１３４】
命令キャッシュ記憶ユニットは命令処理ユニットと連結でき、実行しようとする計数命令を順番に記憶させることに用いられる。計数命令が実行される過程で同時に命令キャッシュ記憶ユニットにもキャッシュ記憶される。一つの命令が完全に実行された後、命令実行結果（計数結果）を命令キャッシュ記憶ユニットに伝送する。もし、この命令が同時に命令キャッシュ記憶ユニットにありながらまだマッピングされなかった命令の中で最初の命令であればこの命令がマッピングされると同時に命令実行結果（計数結果）をスクラッチパッドメモリに記録する。一つの実現方式で命令キャッシュ記憶ユニットは再び順番を配列してキャッシュ記憶できる。
【０１３５】
従属関係処理ユニットは命令キューメモリ及び計数部と連結され、計数部が計数命令を得る前にこの計数命令が求めるベクトル（つまり計数されるべきベクトル）が最新のものかそうでないかを判断することに用いられる。もし、最新のものであれば直接計数命令を記述した計数部に提供し、そうでなければこの計数命令を従属関係より部品の一つの記憶キューに記憶させ、求めるベクトルが最新のものになった後、記憶キューにあるこの計数命令を記述した計数部に提供する。具体的には、計数命令がスクラッチパッドメモリを呼び出すときメモリスペースは前の命令に従う結果が入力されるのを待つ。命令が実行した結果の正確性を保証するため、もし、現在の命令を待つ命令のデータと従属関係にあるということが検査されれば、この命令は記憶キューで従属関係が解除されるまで待たなければならない。従属関係処理ユニットは命令が乱雑に実行され、順番にマッピングされるようにしてパイプラインの障害を効果的に減らし、正確な例外を実現できるようにする。
【０１３６】
命令フェッチモジュールは命令メモリから次に実行すべき命令を読み取りながらこの命令を解読モジュールに伝送することを担う。解読モジュールは命令を解読しながら解読された命令を命令キューメモリに送ることを担う。命令キューメモリは可読された命令をキャッシュ記憶させることに用いられる。命令キャッシュ記憶ユニットと従属関係処理ユニットにスペースが生じた後、命令を命令キャッシュ記憶ユニットと従属関係処理ユニットへ伝送する。計数命令が命令キューメモリから従属関係処理ユニットに送信される過程で計数命令はレジスタ部から記憶部にある入力データのアドレスを読み取る。従属関係処理ユニットは現在の命令と前の命令の間に存在できるデータ従属関係を処理することに用いられる。  計数命令は記憶部を呼び出すことができ、前に実行されたほかの命令は同一の記憶スペースを呼び出せる。命令実行結果の正確性を保証するため現在の命令がもし前の命令データと従属関係があるということが検査されればこの命令は従属関係処理ユニットの記憶キューの中で従属関係がキャンセルできるまで待たなければならない。計数部は従属関係処理ユニットから計数命令を得て、計数命令がレジスタ部に読み取った入力データのアドレスに基づいて記憶部で当該の計数予定入力データを読み取りながら入力データの中で与えられた条件を満たす元素の個数を統計計数し、計数結果を命令キャッシュ記憶ユニットに送り、最後の計数結果とこの計数命令は記憶部に記録される。
【０１３７】
図３８は本実施例に示した計数装置の実行過程に関するフローチャートである。図３８に示したように、計数命令を実行する過程には次のようなものが含まれる。
Ｓ３８０１、命令フェッチモジュールは命令メモリから計数命令を読み取り、且つ、この計数命令を解読モジュールに伝送する。
Ｓ３８０２、解読モジュールは計数命令を解読し、且つ、計数命令を命令キューメモリに伝送する。
Ｓ３８０３、計数命令は命令キューメモリで待っていて命令キャッシュ記憶ユニットと従属関係処理ユニットにスペースがあれば、命令キャッシュ記憶ユニットと従属関係処理ユニットに送信される。
Ｓ３８０４、計数命令が計数キューメモリから従属関係処理ユニットに伝送される過程で、計数命令はレジスタ部から記憶部にある入力データの記憶アドレスを読み取り、従属関係処理ユニットはこの命令とまだ実行が終わってない前の命令とデータ上従属関係にあるかどうかを分析する。この計数命令は従属関係処理ユニットの記憶キューでそれとまだ実行が終わってない前の命令とデータ上従属関係がないときまで待たなければならない。
Ｓ３８０５、従属関係がないと、この計数命令は計数部に伝送される。計数部は記憶アドレスに基づいて記憶部から入力データを読み取り、入力データの中で与えられた条件を満たす元素の個数を統計する。
Ｓ３８０６、計数が終わった後、計数結果は命令キャッシュ記憶ユニットを通じて記憶部に記入され、命令キャッシュ記憶ユニットはこの計数命令を記憶部にマッピングする。
【０１３８】
以上、図面とともに本実施例を詳しく説明した。以上の記述に基づいて当業者は本実施例に示した計数命令を支援する計数装置及びその計数方法を明確に認識する。
【０１３９】
ある実施例では、チップを開示し、それは前述のニューラルネットワークプロセッサ、処理装置、計数装置又は演算装置を含む。
ある実施例では、チップパッケージ構造を開示し、それは前述のチップを含む。
ある実施例では、ボードカードを開示し、それは前述のチップパッケージ構造を含む。
ある実施例では、電子デバイスを開示し、それは前述のボードカードを含む。
【０１４０】
電子デバイスは、ロボット、コンピュータ、プリンター、スキャナー、タブレットＰＣ、スマートターミナル、スマートフォーン、タコグラフ、ナビゲーター、センサ、撮影ヘッド、クラウドサーバ、カメラ、ビデオカメラ、プロジェクター、時計、ヘッドセット、モバイル記憶、ウェアラブル端末、交通手段、家庭用電子機器あるいは医療機器に制限なく含まれる。
【０１４１】
前記の交通手段は、飛行機と汽船、あるいは車両を含み、前記の家庭用電子機器は、テレビ、エアコン、電子レンジ、冷蔵庫、炊飯器、加湿器、洗濯機、ランプ、ガスストーブ、フードを含む。前記の医療機器は核磁気共鳴器、超音波機器、心電図を含む。
【０１４２】
本発明で提供する実施例に示した当該の装置と方法は異なる方式で実現できるということを知るべきである。例えば前述の装置の実施例はただ原理的なものに過ぎない。例えば関連の部分あるいはモジュールの区分はただ論理的機能に従う区分であるから実際に実現するとき、ほかの区分方式があってもよい。例えば複数の部分あるいはモジュールを一つのシステムに組み合わせることができ、一連の特徴を無視するか、実行しなくてもいい。
【０１４３】
本発明に出る用語「及び／又は」は一方または他方あるいは両方を意味する（例えば、Ａ及び／又はＢというのは、ＡあるいはＢあるいはＡとＢの両方を意味する）。
【０１４４】
以上の説明では、説明の目的から出発して多くの具体的な細部を記述して公開された各実施例を全面的に理解できるようにした。しかし、当業者である場合、明確にこんな具体的な細部の中でいくつかがなくても一つあるいは複数のほかの実施例を実現できる。記述した具体的な実施例はこの発明の制限のためのものではなく説明するためのものである。本発明の範囲は、前の具体的な実例から確定するのではなく、特許請求の範囲から確定される。異なる状況では、記述に対する理解があいまいにならないようブロック図の形式でもって既に知っている回路、構造、設備と操作を詳しく示してない。違う方式で指定したり、明確なもの意外には複数の図面の中で適切だと見られる場所に図面標識あるいは図面標識の端の部分が繰り返されるようにして選択的に似た特性あるいは同様の特徴を持った対応したり、似た要素を示している。
【０１４５】
各種操作と方法を既に記述している。フローチャート方式、相対的に基礎的な方式で一連の方法を記述した。しかし、このような操作は選択的にこのような方法に加わったりあるいはこのような方法から提起する。そのほかに、例えフローチャートは実例に示した各実施例に従う操作の特定なステップを示そうともこの特定なステップが実例的であるということが理解できる。実施例を変えてほかの方式でこんな操作を選択的に実行し、ある操作を組み合わせ、ある操作を変えられる。ここで記述した設備の組み立て品と特徴、特定で選択可能な細部は前記した方法において任意に選択して応用できる。各実施例でこんな方法はこんな設備で実行でき、あるいはこのような設備の中で実行できる。
【０１４６】
本発明にある各機能部分／ユニット／サブユニット／モジュール／サブモジュール／部品はすべてハードウェアでありうる。例えば、このハードウェアはデジタル回路、アナログ回路などを含めた回路でありうる。ハードウェア構造の物理的実現は物理要素に限られず、物理要素はトランジスタ、レジスタンスは度に限られていない。前記計算装置の中にある計算モジュールは適当な任意のハードウェアプロセッサでありうる。例えばＣＰＵとＧＰＵ、ＦＰＧＡ、ＤＳＰおよびＡＳＩＣなどがあげられる。前記記憶部は適当な任意の磁気記憶媒体や光磁気記録媒体でありうる。例えばＲＲＡＭ（登録商標）、ＤＲＡＭ、ＳＲＡＭ、ＥＤＲＡＭ、ＨＢＭ、ＨＭＣなどがあげられる。
【０１４７】
記述を便利かつ簡潔にするため、ただ前述の各機能モジュールに分割し、実例をあげて説明したということを当業者は明確にわかる。実際応用では需要に応じて前述の機能分配を相異なる機能モジュールで行える。つまり、装置の内部構造を相異なる機能モジュールに分割して前述のすべてあるいは部分的な機能をする。
【０１４８】
前述の具体的な実施例に示した本発明の目的や技術的解決策、利益効果性をもっと詳しく説明した。理解すべきは、前述したのはただ本発明の具体的な実施例に過ぎず、本発明を局限させることに利用せず、一般的に本発明の精神と原則内で行った任意の改造、同等なものに対する交替、改善などはすべて本発明の保護範囲内に含まれなければならないということである。
【図１】
0006865847.tif 000013
【図２】
0006865847.tif 000014
【図３】
0006865847.tif 000015
【図４】
0006865847.tif 000016
【図５】
0006865847.tif 000017
【図６】
0006865847.tif 000018
【図７】
0006865847.tif 000019
【図８】
0006865847.tif 000020
【図９】
0006865847.tif 000021
【図１０】
0006865847.tif 000022
【図１１】
0006865847.tif 000023
【図１２】
0006865847.tif 000024
【図１３】
0006865847.tif 000025
【図１４】
0006865847.tif 000026
【図１５】
0006865847.tif 000027
【図１６】
0006865847.tif 000028
【図１７】
0006865847.tif 000029
【図１８】
0006865847.tif 000030
【図１９】
0006865847.tif 000031
【図２０】
0006865847.tif 000032
【図２１】
0006865847.tif 000033
【図２２】
0006865847.tif 000034
【図２３】
0006865847.tif 000035
【図２４】
0006865847.tif 000036
【図２５】
0006865847.tif 000037
【図２６】
0006865847.tif 000038
【図２７】
0006865847.tif 000039
【図２８】
0006865847.tif 000040
【図２９Ａ】
0006865847.tif 000041
【図２９Ｂ】
0006865847.tif 000042
【図３０Ａ】
0006865847.tif 000043
【図３０Ｂ】
0006865847.tif 000044
【図３０Ｃ】
0006865847.tif 000045
【図３０Ｄ】
0006865847.tif 000046
【図３０Ｅ】
0006865847.tif 000047
【図３１】
0006865847.tif 000048
【図３２】
0006865847.tif 000049
【図３３】
0006865847.tif 000050
【図３４】
0006865847.tif 000051
【図３５】
0006865847.tif 000052
【図３６】
0006865847.tif 000053
【図３７】
0006865847.tif 000054
【図３８】
0006865847.tif 000055