IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ▲騰▼▲訊▼科技(深▲セン▼)有限公司の特許一覧

特表2024-530974多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム
<>
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図1
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図2
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図3
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図4
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図5
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図6
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図7
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図8
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図9
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図10
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図11
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図12
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図13
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図14
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図15
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図16
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図17
  • 特表-多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム 図18
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-27
(54)【発明の名称】多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及びコンピュータプログラム
(51)【国際特許分類】
   G06F 7/483 20060101AFI20240820BHJP
   G06F 17/16 20060101ALI20240820BHJP
   G06F 7/499 20060101ALI20240820BHJP
   G06F 7/485 20060101ALI20240820BHJP
   G06F 7/487 20060101ALI20240820BHJP
   G06F 7/24 20060101ALI20240820BHJP
【FI】
G06F7/483
G06F17/16 M
G06F7/499 101
G06F7/485
G06F7/487
G06F7/24 A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024510625
(86)(22)【出願日】2022-09-13
(85)【翻訳文提出日】2024-02-21
(86)【国際出願番号】 CN2022118519
(87)【国際公開番号】W WO2023124235
(87)【国際公開日】2023-07-06
(31)【優先権主張番号】202111634856.0
(32)【優先日】2021-12-29
(33)【優先権主張国・地域又は機関】CN
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.FRAM
(71)【出願人】
【識別番号】517392436
【氏名又は名称】▲騰▼▲訊▼科技(深▲セン▼)有限公司
【氏名又は名称原語表記】TENCENT TECHNOLOGY (SHENZHEN) COMPANY LIMITED
【住所又は居所原語表記】35/F,Tencent Building,Kejizhongyi Road,Midwest District of Hi-tech Park,Nanshan District, Shenzhen,Guangdong 518057,CHINA
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100229448
【弁理士】
【氏名又は名称】中槇 利明
(72)【発明者】
【氏名】任 子木
(72)【発明者】
【氏名】李 ▲東▼声
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA01
5B056AA04
5B056BB26
5B056BB81
5B056CC01
(57)【要約】
コンピュータ機器が実行する、多入力の浮動小数点数の処理方法であって、目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出するステップ(S102)と、各浮動小数点数の指数値の大きさに従って、複数の浮動小数点数を並び替え、並び替え結果を取得し、並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てるステップ(S104)と、各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップ(S106)と、各シフト結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定するステップ(S108)と、を含む。
【選択図】図1
【特許請求の範囲】
【請求項1】
コンピュータ機器が実行する、多入力の浮動小数点数の処理方法であって、
目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出するステップと、
各浮動小数点数の指数値の大きさに従って、前記複数の浮動小数点数を並び替え、並び替え結果を取得し、前記並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てるステップと、
各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップと、
各前記シフト結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップと、を含む、方法。
【請求項2】
前記複数のシフト部が有する異なる所定のビット数は第1の所定の範囲内にあり、各シフト部の所定のビット数は前記第1の所定の範囲内に均等に分布している、請求項1に記載の方法。
【請求項3】
前記複数のシフト部の数は、前記複数の浮動小数点数の数と同一であり、
前記並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てるステップは、
前記並び替え結果における各浮動小数点数の並び替え番号を決定するステップと、
各前記並び替え番号にそれぞれ対応する所定のビット数を決定し、複数のシフト部を、それぞれ有する所定のビット数に従って、対応する所定のビット数に対応する並び替え番号により指定される浮動小数点数に割り当てるステップと、を含む、請求項1に記載の方法。
【請求項4】
前記各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップは、
各浮動小数点数の指数値と最大指数値とのそれぞれの差に基づいて、各浮動小数点数のそれぞれの仮数値に対応するシフトビット数をそれぞれ決定するステップであって、前記最大指数値は、複数の浮動小数点数の指数値のうちの最大値である、ステップと、
各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対応するシフトビット数に基づいて、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップと、を含む、請求項1に記載の方法。
【請求項5】
前記各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対応するシフトビット数に基づいて、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップは、
各浮動小数点数について、前記浮動小数点数の仮数値に対応するシフトビット数がシフト範囲内にあるか否かを決定するステップであって、前記シフト範囲は、浮動小数点数に割り当てられたシフト部の所定のビット数に一致する、ステップと、
前記シフトビット数が前記シフト範囲内にある場合、前記浮動小数点数に対応して割り当てられたシフト部により、対応するシフト範囲内で、前記浮動小数点数における仮数値を構成する各仮数要素を、同一のシフト方向に前記シフトビット数だけ移動させるステップであって、前記シフト方向は左シフト又は右シフトを含む、ステップと、
前記シフトビット数が前記シフト範囲外にある場合、前記浮動小数点数に対応して割り当てられたシフト部により、前記浮動小数点数における仮数値を構成する各仮数要素を、同一のシフト方向に前記所定のビット数だけ移動させるステップと、
各浮動小数点数に対してシフト処理を行って得られた仮数値を各浮動小数点数のそれぞれのシフト結果とするステップと、を含む、請求項4に記載の方法。
【請求項6】
前記各前記シフト結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップは、
前記異なる所定のビット数のシフト部が所在する第1の所定の範囲に基づいて、前記第1の所定の範囲を分割して複数の領域セグメントを取得し、複数の領域セグメントにそれぞれ対応する複数の圧縮部を決定するステップであって、異なる圧縮部は、異なる所定の圧縮比を有する、ステップと、
各領域セグメントについて、それぞれの領域セグメント内にある複数の領域内シフト結果をそれぞれ決定するステップであって、単一の領域内シフト結果は、単一の浮動小数点数に対応するシフト結果における領域内部分である、ステップと、
各前記圧縮部により、対応する圧縮部に対応する領域セグメント内の複数の領域内シフト結果に対してセグメント圧縮処理をそれぞれ行い、複数のセグメント圧縮結果を取得するステップと、
前記複数のセグメント圧縮結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップと、を含む、請求項1に記載の方法。
【請求項7】
前記複数の圧縮部が有する異なる所定の圧縮比の値は第2の所定の範囲内にあり、各圧縮部の所定の圧縮比の値は前記第2の所定の範囲内に均等に分布している、請求項6に記載の方法。
【請求項8】
前記各前記圧縮部により、対応する圧縮部に対応する領域セグメント内の複数の領域内シフト結果に対してセグメント圧縮処理をそれぞれ行い、複数のセグメント圧縮結果を取得するステップは、
各圧縮部について、それぞれの対応する領域セグメント内の複数の領域内シフト結果を、対応する圧縮部の入力とするステップと、
各圧縮部により、それぞれの対応する所定の圧縮比に従って、それぞれの入力に対してセグメント圧縮処理を行い、加算結果及び桁上げ結果を取得するステップであって、前記加算結果及び前記桁上げ結果は、対応する圧縮部に対応するセグメント圧縮結果を構成する、ステップと、を含む、請求項6に記載の方法。
【請求項9】
前記複数のセグメント圧縮結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップは、
分割された複数の領域セグメントのうち、圧縮処理が行われておらず、且つ単一の領域内シフト結果のみに対応する第1の領域セグメントについて、前記単一の領域内シフト結果を前記第1の領域セグメントの選択結果とするステップと、
分割された複数の領域セグメントのうち、圧縮処理が行われておらず、且つ2つ以上の領域内シフト結果に対応する第2の領域セグメントについて、前記第2の領域セグメント内にある2つ以上の領域内シフト結果に基づいて、前記第2の領域セグメントの真値結果及びシミュレーション値結果を生成するステップと、
分割された複数の領域セグメントのうち、圧縮処理が行われた第3の領域セグメントについて、各第3の領域セグメントにそれぞれ対応するセグメント圧縮結果に基づいて、対応する第3の領域セグメントの真値結果及びシミュレーション値結果を生成するステップと、
領域セグメントの順位に従って、最下位の領域セグメントから、最上位の領域セグメントの選択結果を取得するまで、各領域セグメントに対応する選択結果を順次決定するステップであって、前記領域セグメントのうちの前記第1の領域セグメント以外の他の領域セグメントの選択結果は、対応する領域セグメントの真値結果及びシミュレーション値結果のうちの1つである、ステップと、
各領域セグメントの選択結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップと、を含む、請求項6に記載の方法。
【請求項10】
前記各領域セグメントの選択結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップは、
各領域セグメントの順位に従って、各領域セグメントの選択結果を順次連結し、前記目標タスクに対応する浮動小数点数処理結果を取得するステップ、を含む、請求項9に記載の方法。
【請求項11】
前記浮動小数点数処理結果を所定の浮動小数点標準に合致させるように、前記浮動小数点数処理結果に対して正規化処理を行う、請求項1に記載の方法。
【請求項12】
前記浮動小数点数処理結果に対して正規化処理を行うステップは、
前記浮動小数点数処理結果における第1の符号識別子及び第2の符号識別子を決定するステップと、
前記第1の符号識別子と前記第2の符号識別子とが同一である場合、前記浮動小数点数処理結果における仮数値を第1のシフト方向にシフトさせるステップと、
前記第1の符号識別子と前記第2の符号識別子とが異なる場合、前記浮動小数点数処理結果における仮数値を第2のシフト方向にシフトさせるステップであって、前記第2のシフト方向は、前記第1のシフト方向とは反対の方向である、ステップと、を含む、請求項11に記載の方法。
【請求項13】
前記目標タスクは、ニューラルネットワーク処理タスクにおける1つのサブタスクであり、
前記ニューラルネットワーク処理タスクは、畳み込み処理タスク又は類似度処理タスクのうちの少なくとも1つを含み、
前記方法は、
前記浮動小数点数処理結果に基づいて、前記ニューラルネットワーク処理タスクにおける後続の各サブタスクを実行し、ニューラルネットワーク処理結果を取得するステップ、をさらに含む、請求項1に記載の方法。
【請求項14】
多入力の浮動小数点数の処理装置であって、
目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出する取得モジュールと、
各浮動小数点数の指数値の大きさに従って、前記複数の浮動小数点数を並び替え、並び替え結果を取得し、前記並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てる割り当てモジュールと、
各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するシフトモジュールと、
各前記シフト結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定する決定モジュールと、を含む、装置。
【請求項15】
異なる所定のビット数を有する少なくとも1つのシフト部であって、各シフト部は、処理される複数の浮動小数点数のうちの1つの浮動小数点数の仮数部の仮数値に対してシフト処理を行うためにそれぞれ割り当てられ、各浮動小数点数に対応して割り当てられたシフト部は、各浮動小数点数の指数部の指数値を大きさに従って並び替えて得られた並び替え結果に基づいて決定される、シフト部と、
各前記シフト部がシフト処理を行って得られた複数のシフト結果に対して論理処理を行い、浮動小数点数処理結果を取得する論理処理部と、を含む、プロセッサ。
【請求項16】
前記少なくとも1つのシフト部が有する異なる所定のビット数は第1の所定の範囲内にあり、各シフト部の所定のビット数は前記第1の所定の範囲内に均等に分布している、請求項15に記載のプロセッサ。
【請求項17】
前記論理処理部は、
異なる所定の圧縮比を有し、前記シフト部にそれぞれ接続された少なくとも1つの圧縮部であって、各圧縮部は、シフト処理により得られた複数のシフト結果に対してセグメント圧縮処理を行い、セグメント圧縮結果を取得するために割り当てられる、圧縮部と、
前記圧縮部にそれぞれ接続された少なくとも1つの加算部であって、前記加算部は、前記セグメント圧縮結果に基づいて複数の領域セグメントの真値結果及びシミュレーション値結果を生成する、加算部と、
前記加算部にそれぞれ接続された少なくとも1つの選択部であって、前記選択部は、複数の領域セグメントの真値結果及びシミュレーション値結果に基づいて各領域セグメントの選択結果を決定し、前記選択結果は連結により浮動小数点数処理結果を生成するために用いられる、選択部と、を含む、請求項15に記載のプロセッサ。
【請求項18】
コンピュータ読み取り可能な命令が記憶されたメモリと、プロセッサとを含むコンピュータ機器であって、前記プロセッサは、前記コンピュータ読み取り可能な命令を実行する際に、請求項1乃至13の何れかに記載の方法のステップを実現する、コンピュータ機器。
【請求項19】
プロセッサにより実行される際に、請求項1乃至13の何れかに記載の方法のステップを実現する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2021年12月29日に出願した出願番号が2021116348560であり、発明の名称が「多入力の浮動小数点数の処理方法、装置、プロセッサ及びコンピュータ機器」である中国特許出願に基づく優先権を主張し、その全ての内容を参照により本発明に援用する。
【0002】
本発明は、データ処理の技術分野に関し、具体的には、多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及び記憶媒体に関する。
【背景技術】
【0003】
コンピュータ技術の発展に伴い、AI(Artificial Intelligence:人工知能)技術も急速に発展している。AI技術の分野では、通常、AIプロセッサによりAIアルゴリズムを実現する。AIプロセッサでは、マトリックス演算ユニットがコアのデータ処理デバイスであり、マトリックス演算ユニットの性能及び計算力が直接AIプロセッサの性能の優劣を決定する。一方、マトリックス演算ユニットでは、多入力の浮動小数点数の演算ユニットが性能の優劣を決定する鍵となる。
【0004】
従来方式の多入力の浮動小数点数の演算方式では、中間の精度の損失がないようにする目的を実現すると、シフト後のデータのビット幅が非常に広いため、通常、中間精度の損失を低減させるために複数の高ビット数(桁数)のシフト部が必要である。シフト範囲が大きすぎると、ハードウェアのオーバーヘッドが大きくなり、プロセッサはより多くのハードウェアリソースを占有する必要がある。
【発明の概要】
【0005】
本発明の各実施例は、多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器及び記憶媒体を提供する。
【0006】
本発明の1つの実施例では、コンピュータ機器が実行する、多入力の浮動小数点数の処理方法であって、目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出するステップと、各浮動小数点数の指数値の大きさに従って、前記複数の浮動小数点数を並び替え、並び替え結果を取得し、前記並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てるステップと、各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップと、各前記シフト結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定するステップと、を含む、方法を提供する。
【0007】
本発明の1つの実施例では、多入力の浮動小数点数の処理装置であって、目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出する取得モジュールと、各浮動小数点数の指数値の大きさに従って、前記複数の浮動小数点数を並び替え、並び替え結果を取得し、前記並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てる割り当てモジュールと、各浮動小数点数について、前記浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するシフトモジュールと、各前記シフト結果に基づいて、前記目標タスクに対応する浮動小数点数処理結果を決定する決定モジュールと、を含む、装置を提供する。
【0008】
本発明の1つの実施例では、異なる所定のビット数を有する少なくとも1つのシフト部であって、各シフト部は、処理される複数の浮動小数点数のうちの1つの浮動小数点数の仮数部の仮数値に対してシフト処理を行うためにそれぞれ割り当てられ、各浮動小数点数に対応して割り当てられたシフト部は、各浮動小数点数の指数部の指数値を大きさに従って並び替えて得られた並び替え結果に基づいて決定される、シフト部と、各前記シフト部がシフト処理を行って得られた複数のシフト結果に対して論理処理を行い、浮動小数点数処理結果を取得する論理処理部と、を含む、プロセッサを提供する。
【0009】
本発明の1つの実施例では、コンピュータ読み取り可能な命令が記憶されたメモリと、プロセッサとを含むコンピュータ機器であって、前記プロセッサは、前記コンピュータ読み取り可能な命令を実行する際に、上記の方法のステップを実現する、コンピュータ機器を提供する。
【0010】
本発明の1つの実施例では、コンピュータプログラムが記憶されたコンピュータ読み取り可能な記憶媒体であって、前記コンピュータプログラムは、プロセッサにより実行される際に、上記の方法のステップを実現する、記憶媒体を提供する。
【0011】
本発明の1つの実施例では、コンピュータプログラムを含むコンピュータプログラム製品であって、該コンピュータプログラムは、プロセッサにより実行される際に、上記の方法のステップを実現する、コンピュータプログラム製品を提供する。
【0012】
本発明の1つ又は複数の実施例の詳細は、以下の図面及び説明において提示される。本発明の他の特徴、目的及び利点は、明細書、図面及び特許請求の範囲から明らかになる。
【図面の簡単な説明】
【0013】
図1】1つ又は複数の実施例に係る多入力の浮動小数点数の処理方法を示す概略的なフローチャートである。
図2】1つ又は複数の実施例に係る浮動小数点数のフォーマットの概略図である。
図3】1つ又は複数の実施例に係るシフト部を割り当てるステップを示す概略的なフローチャートである。
図4】1つ又は複数の実施例に係るシフト処理のステップを示す概略的なフローチャートである。
図5】他の1つ又は複数の実施例に係るシフト処理のステップを示す概略的なフローチャートである。
図6】1つ又は複数の実施例に係る各シフト結果に基づいて目標タスクに対応する浮動小数点数処理結果を決定するステップを示す概略的なフローチャートである。
図7】1つ又は複数の実施例に係るセグメント圧縮処理のステップを示す概略的なフローチャートである。
図8】1つ又は複数の実施例に係るセグメント圧縮処理の原理を示す概略図である。
図9】1つ又は複数の実施例に係る複数のセグメント圧縮結果に基づいて目標タスクに対応する浮動小数点数処理結果を決定するステップを示す概略的なフローチャートである。
図10】1つ又は複数の実施例に係る選択部が選択結果を出力するステップを示す概略的なフローチャートである。
図11】1つ又は複数の実施例に係る浮動小数点数処理結果に対して正規化処理を行うステップを示す概略的なフローチャートである。
図12】1つ又は複数の実施例に係る従来の複数の浮動小数点数の加算を示す概略的なフローチャートである。
図13】1つ又は複数の実施例に係るデータのビット幅の構成を示す概略図である。
図14】1つ又は複数の実施例に係る複数の浮動小数点数の加算に適用される本発明を示す概略的なフローチャートである。
図15】1つ又は複数の実施例に係る多入力の浮動小数点数の処理装置の構成を示すブロック図である。
図16】1つ又は複数の実施例に係るプロセッサの構成を示すブロック図である。
図17】1つ又は複数の実施例に係る論理処理部の構成を示すブロック図である。
図18】1つ又は複数の実施例に係るコンピュータ機器の内部構成を示す図である。 本明細書に開示された発明の実施例及び/又は態様をよりよく説明するために、1つ又は複数の図面を参照することができる。図面を説明するために使用される追加の詳細又は態様は、開示された発明、現在説明されている実施例及び/又は態様、並びに現在理解されているこれらの発明の最良の形態の何れかの範囲を限定するものとみなされるべきではない。
【発明を実施するための形態】
【0014】
本発明の目的、技術的手段及び利点をより明確に理解させるために、以下は、図面及び実施例を参照しながら、本発明をさらに詳細に説明する。なお、本明細書に記載されている具体的な実施例は、単に本発明を説明するためのものであり、本発明を限定するものではない。
【0015】
本発明は、浮動小数点数の演算方式及び対応する処理論理を最適化することによって、複数の浮動小数点数の演算を高効率に処理できるだけでなく、シフト部の面積を低減させ、AIプロセッサの面積を効率的に低減させ、時系列上のクリティカルパスを低減させ、AIプロセッサの主周波数を向上させ、AIプロセッサを適用した単一のチップのためにより高い計算力を提供できる、多入力の浮動小数点数の処理方法、装置、プロセッサ、コンピュータ機器、記憶媒体及びコンピュータプログラム製品を提供する。
【0016】
幾つかの実施例では、図1に示すように、多入力の浮動小数点数の処理方法を提供する。本実施例は、該方法をコンピュータ機器に適用することを一例として説明する。なお、コンピュータ機器は、端末であってもよいし、サーバであってもよい。ここで、サーバは、独立した物理サーバであってもよいし、複数の物理サーバにより構成されたサーバクラスタ又は分散型システムであってもよいし、クラウドコンピューティングサービスを提供するクラウドサーバであってもよい。端末は、様々なパーソナルコンピュータ、ラップトップコンピュータ、スマートフォン、タブレット、IoT(モノのインターネット)デバイス、又は携帯型ウェアラブルデバイスなどの1つ又は複数であってもよいが、これらに限定されない。IoTデバイスは、スマートスピーカー、スマートテレビ、スマートエアコン、又はスマート車載デバイスなどの1つ又は複数であってもよい。携帯型ウェアラブルデバイスは、スマートウォッチ、スマートリストバンド、又はヘッドセットなどの1つ又は複数であってもよい。例えば、本発明の実施例に係る多入力の浮動小数点数の処理方法は、例えば、プロセッサやセンサなどのコンピュータ機器におけるデータ処理デバイスに適用されてもよい。
【0017】
本実施例では、該方法は、以下のステップを含む。
【0018】
ステップS102:目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出する。
【0019】
ここで、目標タスクとは、コンピュータ機器がある目標を達成するために実行する計算処理タスクであり、計算処理は、加算、減算、乗算、又は除算などの数学演算を含むが、これらに限定されない。例えば、目標タスクは、ニューラルネットワークの訓練のプロセスにおける計算処理タスクであってもよく、畳み込み加算タスク又は類似度計算タスクなどを含むが、これらに限定されない。別の例として、目標タスクは、複数のデータを計算するためのクラウドコンピューティング又は分散型コンピューティングタスクであってもよい。
【0020】
浮動小数点数は、有理数のある特定の部分集合に属する数の数字表現であり、コンピュータでは任意のある実数を近似的に表す。現在一般的な浮動小数点数のフォーマット(形式)を一例とすると、浮動小数点数のフォーマットは、一般に、マイクロプロセサ標準委員会(MSC:Microprocessor Standards Committee)が策定したIEEEの二進浮動小数点数算術標準(ANSI/IEEE Std 754-1985、通常はIEEE 754と略称される)に準拠している。
【0021】
IEEE 754標準は、コンピュータのメモリに十進浮動小数点数を二進数で記憶するための具体的な標準を規定しており、浮動小数点数の値を表現する方式として、単精度浮動小数点数、倍精度浮動小数点数、拡張単精度浮動小数点数及び拡張倍精度浮動小数点数の4つの方法を規定している。
【0022】
図2に示すように、IEEE 754は、浮動小数点数を符号、指数部及び仮数部の3つの部分として表す。ここで、符号Sは、浮動小数点数が正の数又は負の数であることを示すために使用される。「0」は浮動小数点数が正の数であることを示し、「1」は浮動小数点数が負の数であることを示す。指数部における指数値E(通常は指数(exponent)とも称される)はシフトコード(加算コード又はバイアスコードとも称される)で表される。32ビットの単精度浮動小数点数を一例とすると、指数値Eの範囲は8bit(ビット)であり、0~255個の指数値を表す。指数値は、小数点の位置を示す。浮動小数点数の仮数部の仮数値Mは、符号絶対値(sign magnitude)で表される。同様に、32ビットの単精度浮動小数点数を一例とすると、仮数値Mの範囲は24bitであり、浮動小数点数が表すことができる実数の精度を決定する。なお、符号絶対値の最上位ビットは必ず有効ビットである(即ち、1でなければならない)ため、コンピュータのメモリでは通常、該仮数部の最上位ビットを省略(又は非表示)してメモリを節約する。これによって、24bitの情報を図示の23bitの仮数部で表すことができる。
【0023】
説明を簡単にし、理解を容易にするために、以下の実施例に記載された例示は、IEEE 754の基準を満たすが、本発明の実施例の適用範囲を限定するものと解釈すべきではない。
【0024】
幾つかの実施例では、処理される複数の浮動小数点数はメモリに記憶され、メモリは、コンピュータ機器に設けられた内部メモリであってもよいし、コンピュータ機器から独立し、且つコンピュータ機器と通信接続された外部メモリであってもよい。
【0025】
具体的には、コンピュータ機器は、処理される2つ以上の浮動小数点数をメモリから取得し、浮動小数点数の形式に従って、各浮動小数点数の指数部の指数値及び仮数部の仮数値を抽出する。ここで、指数値は、各浮動小数点数に割り当てられたシフト部のサイズを決定するために、後続の浮動小数点数の並び替えに使用される。仮数値は、具体的にシフト処理を行うための部分である。
【0026】
依然として32ビットの単精度浮動小数点数を一例とすると、コンピュータ機器は、31番目のビット(最上位ビット)に対応する数値を符号ビットの値として抽出し、30番目のビットから23番目のビットに対応する数値を指数部の指数値として抽出し、22番目のビットから0番目のビット(最下位ビット)に対応する数値を仮数部の仮数値として抽出する。上述したように、コンピュータ機器は、仮数部の最上位ビット1を非表示して仮数値を表すため、コンピュータ機器により抽出されたビット数は、22番目のビットから0番目のビットである。
【0027】
ステップS104:各浮動小数点数の指数値の大きさに従って、複数の浮動小数点数を並び替え、並び替え結果を取得し、並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てる。
【0028】
各浮動小数点数の指数値が異なるため、各浮動小数点数の次元が一致しない可能性がある。浮動小数点数の計算を実現するために、まず、異なる浮動小数点数を同一の次元に統一する必要がある。ここで、各浮動小数点数が同一の次元となるように、複数のシフト部(シフタ)を設けて各浮動小数点数に対するシフト処理を実現する。シフト部の数は、浮動小数点数の数に基づいて決定される。例えば、シフト部の数は、浮動小数点数の数と同一であってもよい。別の例として、指数値の最大値に対応する浮動小数点数はシフト処理を必要としないため、シフト部の数は、必要なハードウェアリソースのオーバーヘッドを低減させるために、浮動小数点数の数から1を減算した数であってもよい。
【0029】
各シフト部は、異なるビット数が予め設定されており、各シフト部の所定のビット数は、仮数値の最大範囲と、該シフト部がシフト処理を行う際の最大シフト可能範囲とを含む。例えば、50ビットのシフト部のビット数は50ビットであり、仮数値は最大24ビットであるため、仮数値が占める空間を除くと、該シフト部の最大シフト可能範囲wは26ビットとなる。後続のシフトプロセスにおいて、シフト部は、その最大シフト可能範囲内で仮数値をシフトする。
【0030】
ハードウェアのオーバーヘッドを可能な限り低減するために、幾つかの実施例では、複数のシフト部が有する異なる所定のビット数は第1の所定の範囲内にあり、各シフト部の所定のビット数は第1の所定の範囲内に均等に分布している。具体的には、複数のシフト部の所定のビット数の最大値を第1の所定の範囲とし、残りの各シフト部のシフト範囲が何れも該第1の所定の範囲内にある。各シフト部の所定のビット数何れも均等に分布し、一定の倍数で増加又は減少してもよいし、等差数列又は等比数列となるように分布してもよい。例えば、a個のq(例えば、q=24bit+wbit、w=26)ビットのシフト部、b個の2*wビットのシフト部、c個の3*wビットのシフト部、…x個のn*wビットのシフト部を予め設け、ここで、nの値は、浮動小数点数の個数から1を減算した数である。
【0031】
区別するために、本発明の実施例では、シフト部の所定のビット数が位置する範囲を第1の所定の範囲と称し、圧縮部が有する圧縮比の値が位置する範囲を第2の所定の範囲と称する。なお、上記の「第1」及び「第2」という用語は、本明細書において異なる数値範囲を説明するために使用されるものであるが、これらの数値範囲はこれらの用語により限定されるべきではない。これらの用語は、1つの数値範囲と他の数値範囲とを区別するためだけに使用される。例えば、様々な説明される実施例の範囲から逸脱することなく、第1の所定の範囲は第2の所定の範囲と称されてもよく、同様に、第2の所定の範囲は第1の所定の範囲と称されてもよく、文脈により明示的に示されない限り、両者は異なる範囲を意味する。以下の第1の領域セグメント、第2の領域セグメント及び第3の領域セグメント、第1の符号識別子及び第2の符号識別子、第1のシフト方向及び第2のシフト方向なども同様である。
【0032】
具体的には、コンピュータ機器は、各浮動小数点数の指数値を取得した後、各浮動小数点数の指数値の大きさに従って、各浮動小数点数を並び替え、並び替え結果を取得する。例えば、コンピュータ機器は、指数値の小さい順に各浮動小数点数を並び替え、並び替え結果を取得する。また、例えば、コンピュータ機器は、指数値の大きい順に各浮動小数点数を並び替え、並び替え結果を取得する。指数値が最大の浮動小数点数はシフト処理を必要としないため、コンピュータ機器は、この指数値が最大の浮動小数点数を除いて、得られた浮動小数点数の並び替え結果に基づいて、残りの各浮動小数点数に順次それぞれ1つのシフト部を割り当てる。
【0033】
上記の実施例では、異なる浮動小数点数に異なるシフト部を割り当てることによって、従来技術における各浮動小数点数の大きさに関わらず同一のビット数の複数のシフト部を用いてシフト処理を行うことに比べて、ハードウェアのオーバーヘッドを著しく低減させ、タイミング特性が良く、効率が高い。
【0034】
他の幾つかの実施例では、複数のシフト部が有する異なる所定のビット数は、第1の所定の範囲に不均等に分布してもよい。例えば、第1の所定の範囲において、1つのシフト部の所定のビット数をqビットとし、残りの各シフト部の所定のビット数をn*wビットとする。別の例として、第1の所定の範囲内において、各シフト部の所定のビット数は、指数関数的に増加又は減少する。また、例えば、第1の所定の範囲内において、各x個のシフト部の所定のビット数は同一であり、且つ全体的に増加又は減少する傾向がある。
【0035】
ステップS106:各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得する。
【0036】
具体的には、コンピュータ機器は、1つの浮動小数点数について、該浮動小数点数に割り当てられたシフト部を用いて、該浮動小数点数の仮数値に対してシフト部の所定のビット数内でシフト処理を行うことによって、該浮動小数点数のシフト結果を取得する。指数値が最大の浮動小数点数はシフト処理を必要としないため、コンピュータ機器は、残りの各浮動小数点数に対してそれぞれ割り当てられたシフト部を用いてシフト処理を行い、複数のシフト結果を取得する。
【0037】
ここで、シフト処理とは、仮数値をあるシフト方向に一定の距離だけ移動させることを意味する。シフト方向は、左シフト又は右シフトを含む。シフト処理において移動するビット数は、該浮動小数点数と浮動小数点数の最大値との差である。例えば、浮動小数点数Aについて、その指数値と最大指数値との差がbである場合、コンピュータ機器は、浮動小数点数Aの仮数値を左又は右にbビットだけシフトする。ここで、最大指数値は、複数の浮動小数点数の指数値の最大値である。
【0038】
ステップS108:各シフト結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定する。
【0039】
具体的には、シフト完了後、コンピュータ機器は、具体的な目標タスクに基づいて後続の処理を行ってもよい。具体的には、各浮動小数点数のそれぞれに対応するシフト結果に基づいて、順次に各シフト結果に対して圧縮処理を行い、圧縮結果を取得してもよい。そして、コンピュータ機器は、圧縮結果に対して後処理を行い、目標タスクに対応する浮動小数点数処理結果を取得する。ここで、後処理は、正規化処理及び丸め処理などを含む。例えば、後処理では、圧縮結果がIEEE 754で規定されたフォーマットに適合するように圧縮結果に対して正規化処理を行い、丸め処理により最終的な浮動小数点数処理結果を取得する。
【0040】
上記の多入力の浮動小数点数の処理方法では、異なる所定のビット数を有する複数のシフト部を予め設計し、処理される複数の浮動小数点数を処理する際に、各浮動小数点数の指数値の大きさに従って複数の浮動小数点数を並び替え、並び替え結果に基づいて異なる所定のビット数を有する複数のシフト部から各浮動小数点数にそれぞれ対応するシフト部を割り当て、割り当てられたシフト部を利用して複数の浮動小数点数に対してシフト処理を行い、シフト処理結果に基づいて目標タスクに対応する浮動小数点数処理結果を取得する。これによって、有効なシフトの思想を導入し、並び替え後の下位の仮数値に対して有効なシフトを行い、上位の仮数値のシフト範囲が小さく(移動する必要がない場合もある)、中間精度損失がないことを確保した上で、シフト部の面積のオーバーヘッドを大幅に低減させ、プロセッサのハードウェアのオーバーヘッドを節約し、ハードウェアリソースが限られている場合、浮動小数点数の処理効率と正確性を良好に両立することができる。
【0041】
上述したように、幾つかの実施例では、複数のシフト部の数は、複数の浮動小数点数の数と同一である。図3に示すように、並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てるステップは、以下のステップを含む。
【0042】
ステップS302:並び替え結果における各浮動小数点数の並び替え番号を決定する。
【0043】
ステップS304:各並び替え番号にそれぞれ対応する所定のビット数を決定し、複数のシフト部を、それぞれ有する所定のビット数に従って、対応する所定のビット数に対応する並び替え番号により指定される浮動小数点数に割り当てる。
【0044】
具体的には、コンピュータ機器は、各浮動小数点数の並び替え結果に基づいて、各浮動小数点数が属する並び替え番号を決定する。並び替え番号は、浮動小数点数が並び替え結果の何番目にあるかを示す。各並び替え番号は、例えば、1番目がxビットのシフト部に対応し、2番目がyビットのシフト部に対応するように、対応する所定のビット数が予め設定されている。1つの浮動小数点数について、コンピュータ機器は、該浮動小数点数が属する並び替え番号に対応する所定のビット数に基づいて、該所定のビット数を有するシフト部を決定する。これによって、コンピュータ機器は、該浮動小数点数と該シフト部との相関関係を決定し、該シフト部を該浮動小数点数を処理するために割り当てることができる。
【0045】
例えば、並び替え結果における1番目の浮動小数点数について、シフトされる必要がない。2番目の浮動小数点数について、コンピュータ機器は、qビットのシフト部を割り当てる。3番目の浮動小数点数について、コンピュータ機器は、2qビットのシフト部を割り当て、同様に、1番目の浮動小数点数以外の浮動小数点数について割り当てを行う。
【0046】
本実施例では、異なる浮動小数点数に異なるシフト部を割り当てることによって、ハードウェアのオーバーヘッドを著しく低減させ、タイミング特性が良く、効率が高い。
【0047】
各浮動小数点数に対応するシフト部を割り当てた後、コンピュータ機器は、シフト部を用いて浮動小数点数に対してシフト処理を行う。ここで、シフト処理のプロセスにおいて、シフト部が浮動小数点数の仮数値をシフトするビット数は、その指数値と最大指数値との差に基づいて決定されてもよい。そのために、幾つかの実施例では、図4に示すように、各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップは、以下のステップを含む。
【0048】
ステップS402:各浮動小数点数の指数値と最大指数値とのそれぞれの差に基づいて、各浮動小数点数のそれぞれの仮数値に対応するシフトビット数をそれぞれ決定し、最大指数値は、複数の浮動小数点数の指数値のうちの最大値である。
【0049】
ステップS404:各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対応するシフトビット数に基づいて、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得する。
【0050】
具体的には、コンピュータ機器は、1つの浮動小数点数について、該浮動小数点数の指数値と最大指数値との差に基づいて、各浮動小数点数のそれぞれの仮数値に対応するシフトビット数を決定し、該浮動小数点数に割り当てられたシフト部を用いて、決定されたシフトビット数に従ってシフト処理を行う。ここで、差は、指数値と最大指数値との差分であってもよいし、指数値と最大指数値との比であってもよいし、指数値と最大指数値との差分の倍数であってもよい。
【0051】
例えば、浮動小数点数Aの指数値Eと最大指数値Emaxとの差分がxである場合、コンピュータ機器は、浮動小数点数Aの仮数値Mに対応するシフトビット数がxビットであると決定する。シフトビット数を決定した後、コンピュータ機器は、浮動小数点数に割り当てられたシフト部を用いて、浮動小数点数の仮数値をxビットだけシフトし、該浮動小数点数のシフト結果を得る。コンピュータ機器は、最大指数値Emaxに対応する浮動小数点数(この浮動小数点数をシフトする必要がない)を除いて、残りの各浮動小数点数に対してシフト処理を行い、複数のシフト結果を取得する。
【0052】
本実施例では、異なる浮動小数点数に異なるシフト部を割り当てることによって、ハードウェアのオーバーヘッドを著しく低減させ、シフト処理に必要なシフト部のリソースを節約することができる。
【0053】
シフトプロセスでは、決定されたシフトビット数がシフト部の所定のビット数よりも大きい場合がある。ここで、幾つかの実施例では、図5に示すように、各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対応するシフトビット数に基づいて、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップは、以下のステップを含む。
【0054】
ステップS502:各浮動小数点数について、浮動小数点数の仮数値に対応するシフトビット数がシフト範囲内にあるか否かを決定し、シフト範囲は、浮動小数点数に割り当てられたシフト部の所定のビット数に一致する。
【0055】
ステップS504:シフトビット数がシフト範囲内にある場合、浮動小数点数に対応して割り当てられたシフト部により、対応するシフト範囲内で、浮動小数点数における仮数値を構成する各仮数要素を、同一のシフト方向にシフトビット数だけ移動させる。ここで、シフト方向は左シフト又は右シフトを含む。
【0056】
ステップS506:シフトビット数がシフト範囲外にある場合、浮動小数点数に対応して割り当てられたシフト部により、浮動小数点数における仮数値を構成する各仮数要素を、同一のシフト方向に所定のビット数だけ移動させる。
【0057】
ステップS508:各浮動小数点数に対してシフト処理を行って得られた仮数値を各浮動小数点数のそれぞれのシフト結果とする。
【0058】
具体的には、コンピュータ機器は、上記のステップS502を実行することによって、1つの浮動小数点数について、浮動小数点数の仮数値に対応するシフトビット数を取得する。同時に、コンピュータ機器は、浮動小数点数に割り当てられたシフト部を決定し、該シフト部の所定のビット数を取得する。コンピュータ機器は、シフトビット数と所定のビット数とを比較し、該シフトビット数が該所定のビット数に対応するシフト範囲内にあるか否かを判断する。シフトビット数がシフト範囲内にある場合、コンピュータ機器は、該シフト部を用いて、仮数値をシフト方向にシフトビット数だけシフトする。シフトビット数がシフト範囲外にある場合、コンピュータ機器は、該シフト部を用いて、仮数値をシフト方向に所定のビット数だけシフトする。コンピュータ機器は、該浮動小数点数の仮数値に対してシフト処理を行った後、得られた仮数値を該浮動小数点数のシフト結果とする。コンピュータ機器は、最大指数値に対応する浮動小数点数(シフトを行う必要がない)を除いて、残りの各浮動小数点数に対して上記のシフト処理を行い、複数のシフト結果を取得する。
【0059】
例えば、浮動小数点数Aについて、コンピュータ機器は、仮数値Mに対応するシフトビット数が22ビットであり、浮動小数点数Aに割り当てられたシフト部Sの所定のビット数が50ビットであり、即ち、シフト範囲が26ビットであると決定する。この場合、コンピュータ機器は、浮動小数点数Aのシフトビット数がシフト部Sのシフト範囲内にあると判断するため、コンピュータ機器は、該シフト部Sを利用して、浮動小数点数Aの仮数値の各仮数要素を同一のシフト方向に22ビットだけ移動させ、例えば、右に22ビットだけ移動させる。
【0060】
また、例えば、浮動小数点数Bについて、コンピュータ機器は、仮数値Mに対応するシフトビット数が56ビットであり、浮動小数点数Bに割り当てられたシフト部Sの所定のビット数が76ビットであり、即ち、シフト範囲を52ビットであると決定する。この場合、コンピュータ機器は、浮動小数点数Bのシフトビット数がシフト部Sのシフト範囲外であり、言い換えれば、浮動小数点数Bのシフトビット数がシフト部Sのシフト可能な最大シフト範囲を超えていると判断する。従って、コンピュータ機器は、該シフト部Sを利用して、浮動小数点数Bの仮数値の各仮数要素を同一のシフト方向に52ビットだけ移動させる。
【0061】
本実施例では、浮動小数点数に異なる所定のビット数をそれぞれ割り当てるシフト部によりシフト処理を行うことによって、中間精度の無損失を保障するために比較的に大きいビット幅のシフト部を使用する必要がなく、シフト部のハードウェアリソースを節約し、シフト部の面積のオーバーヘッドを低減させることができる。
【0062】
上述したように、複数の浮動小数点数のシフト結果を決定した後、コンピュータ機器は、浮動小数点数に対して圧縮処理を行う。使用される圧縮部の面積を低減させ、タイミング経路を低減させるために、幾つかの実施例では、図6に示すように、各シフト結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定するステップは、以下のステップを含む。
【0063】
ステップS602:異なる所定のビット数のシフト部が所在する第1の所定の範囲に基づいて、第1の所定の範囲を分割して複数の領域セグメントを取得し、複数の領域セグメントにそれぞれ対応する複数の圧縮部を決定する。ここで、異なる圧縮部は、異なる所定の圧縮比を有する。
【0064】
圧縮比とは、圧縮部の入力の数と出力の数との比を意味する。例えば、圧縮比が(n:2)に予め設定された圧縮部は、その入力の数がn個であり、出力の数が2個である。別の例として、圧縮比が(n:3)に予め設定された圧縮部は、入力の数がn個であり、出力の数が3個である。
【0065】
幾つかの実施例では、複数の圧縮部が有する異なる所定の圧縮比の値は第2の所定の範囲内にあり、各圧縮部の所定の圧縮比の値は、第2の所定の範囲内に均等に分布している。第2の所定の範囲は、浮動小数点数の数に基づいて得られる。具体的には、予め設定された圧縮部の圧縮比は、(n:2)が範囲の最大値として決定された第2の所定の範囲内にある。該第2の所定の範囲は、例えば(n-1):2、(n-2):2などを含む。ここで、nは浮動小数点数の数である。
【0066】
具体的には、コンピュータ機器は、異なる所定のビット数を有する各シフト部が位置する第1の所定の範囲を分割して、複数の領域セグメントを取得する。例えば、各シフト部間の最大の所定のビット数に応じて、最上位から最大の所定のビット数までの範囲を決定し、該範囲を複数の領域セグメントに均等に分割する。ここで、各領域セグメントの範囲は等しい。
【0067】
例えば、4つの浮動小数点数を有する圧縮プロセスでは、コンピュータ機器は、最上位の領域セグメントについて、該領域セグメントに対応する圧縮部の圧縮比が4:2であると決定し、最上位の次の上位の領域セグメントについて、コンピュータ機器は、領域セグメントに対応する圧縮部の圧縮比が3:2であると決定し、最下位のビット及び最下位の次の下位の領域セグメントについて、圧縮を行う必要がないため、圧縮部を割り当てる必要がない。最下位のビット及び最下位の次の下位の領域セグメント内の仮数値は圧縮する必要がないため、圧縮部の数は浮動小数点数の数から2を減算した数である。
【0068】
ステップS604:各領域セグメントについて、それぞれの領域セグメント内にある複数の領域内シフト結果をそれぞれ決定する。ここで、単一の領域内シフト結果は、単一の浮動小数点数に対応するシフト結果における領域内部分である。
【0069】
具体的には、1つの領域セグメントについて、コンピュータ機器は、該領域セグメント内に位置し、全ての浮動小数点数のシフト結果が領域セグメント内にある部分を決定し、この部分を領域内部分と称する。例えば、最上位の領域セグメントが例えば最上位のwビットである場合、該領域セグメント内で、コンピュータ機器は、各浮動小数点数のシフト結果の最上位のwビットの値を取得し、取得された全ての浮動小数点数の領域内シフト結果は、該領域セグメント内の複数の領域内シフト結果である。
【0070】
ステップS606:各圧縮部により、対応する圧縮部に対応する領域セグメント内の複数の領域内シフト結果に対してセグメント圧縮処理をそれぞれ行い、複数のセグメント圧縮結果を取得する。
【0071】
具体的には、コンピュータ機器は、各領域セグメントに割り当てられた圧縮部を用いて、分割された各領域セグメント内の複数の領域内シフト結果のそれぞれに対してセグメント圧縮処理を行い、複数のセグメント圧縮結果を取得する。
【0072】
例えば、n個の浮動小数点数を有する圧縮プロセスでは、最上位の領域セグメントについて、コンピュータ機器は、圧縮比(n:2)の圧縮部を用いてセグメント圧縮処理を行う。最上位の次の上位の領域セグメントについて、コンピュータ機器は、圧縮比(n-1):2の圧縮部を用いてセグメント圧縮処理を行う。他の場合も同様である。一方、最下位のビット及び最下位の次の下位の領域セグメントについて、圧縮処理を行う必要がない。
【0073】
ステップS608:複数のセグメント圧縮結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定する。
【0074】
具体的には、コンピュータ機器は、各領域セグメントに対応するセグメント圧縮結果に基づいて、各セグメント圧縮結果をさらに処理して、目標タスクに対応する浮動小数点数処理結果を決定する。例えば、コンピュータ機器は、セグメント圧縮処理後の複数のセグメント圧縮結果について、各セグメント圧縮結果をビット数の高い順につなぎ合わせて完全な圧縮結果を形成し、該圧縮結果を加算部に入力して処理し、最終的に目標タスクに対応する浮動小数点数処理結果を取得する。
【0075】
本実施例では、複数の領域セグメントに分割してセグメント圧縮を行うことによって、下位の領域セグメント圧縮部の入力が少なく(圧縮する必要がない場合もある)、圧縮部の面積を大幅に低減させ、タイミングパスを小さくすることができる。
【0076】
図7に示すように、幾つかの実施例では、各圧縮部により、対応する圧縮部に対応する領域セグメント内の複数の領域内シフト結果に対してセグメント圧縮処理をそれぞれ行い、複数のセグメント圧縮結果を取得するステップは、以下のステップを含む。
【0077】
ステップS702:各圧縮部について、それぞれの対応する領域セグメント内の複数の領域内シフト結果を、対応する圧縮部の入力とする。
【0078】
ステップS704:各圧縮部により、それぞれの対応する所定の圧縮比に従って、それぞれの入力に対してセグメント圧縮処理を行い、加算結果及び桁上げ結果を取得し、加算結果及び桁上げ結果は、対応する圧縮部に対応するセグメント圧縮結果を構成する。
【0079】
具体的には、1つの圧縮部について、コンピュータ機器は、該圧縮部に対応する領域セグメント内の複数の領域内シフト結果を該圧縮部の入力とし、その後、該圧縮部の予め設定された圧縮比に従って、該領域セグメント内の複数の領域内シフト結果に対してセグメント圧縮処理を行い、加算結果及び桁上げ結果を取得する。ここで、加算結果は各領域内シフト結果を圧縮した和の値であり、桁上げ結果は該和の値の桁上げ値である。
【0080】
例えば、図8に示すように、4つの浮動小数点数(浮動小数点数A、浮動小数点数B、浮動小数点数C、及び浮動小数点数D)の圧縮プロセスを一例とすると、最上位のwビットの領域セグメントについて、コンピュータ機器は、4:2の圧縮部を用いて、該領域セグメント内の4つの領域内シフト結果に対してセグメント圧縮処理を行い、加算結果及び桁上げ結果を取得する。加算結果に桁上げがある場合、対応する桁上げ結果は1になり、逆は0になる。最上位の次の上位のwビットの領域セグメントについて、コンピュータ機器は、3:2の圧縮部を用いて、該領域セグメント内の3つの領域内シフト結果に対してセグメント圧縮処理を行う。一方、最下位のビット及び最下位の次の下位の領域セグメントについて、圧縮処理を行う必要がない。
【0081】
本実施例では、領域セグメントの区分によりそれぞれ異なる圧縮部を設定して圧縮することによって、圧縮部の面積を大幅に低減させ、ハードウェアリソースのオーバーヘッドを低減させることができる。
【0082】
上述したように、コンピュータ機器は、各領域セグメントに対応するセグメント圧縮結果を取得した後、各セグメント圧縮結果をさらに処理して、最終的な浮動小数点数処理結果を決定する。従来技術では、圧縮してcarry(本発明の実施例に係る桁上げ結果に対応する)とsum(本発明の実施例に係る加算結果に対応する)を取得した後、コンピュータ機器は、1つのCPA(Carry Propagate Adder:桁上げ伝播加算器)を利用してcarryとsumに対して桁上げ伝播の加算を行い、浮動小数点数処理結果を取得する。
【0083】
一方、従来技術で採用されている方式は、全ビット幅の2つの入力(carryとsum)に対して桁上げ伝播の加算を行う必要があるため、少なくとも1つの128ビットの加算器が必要であり、占有するハードウェアリソースが多く、タイミング特性が悪い。このため、コンピュータ機器は、異なる領域セグメントに異なる加算器をそれぞれ割り当てて加算処理を行う。セグメントごとに加算処理を行うため、各領域セグメントの桁上げも考慮する必要がある。従って、占有するハードウェアリソースを低減させるために、幾つかの実施例では、図9に示すように、複数のセグメント圧縮結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定するステップは、以下のステップを含む。
【0084】
ステップS902:分割された複数の領域セグメントのうち、圧縮処理が行われておらず、且つ単一の領域内シフト結果のみに対応する第1の領域セグメントについて、単一の領域内シフト結果を第1の領域セグメントの選択結果とする。
【0085】
ステップS904:分割された複数の領域セグメントのうち、圧縮処理が行われておらず、且つ2つ以上の領域内シフト結果に対応する第2の領域セグメントについて、第2の領域セグメント内にある2つ以上の領域内シフト結果に基づいて、第2の領域セグメントの真値結果及びシミュレーション値結果を生成する。
【0086】
ステップS906:分割された複数の領域セグメントのうち、圧縮処理が行われた第3の領域セグメントについて、各第3の領域セグメントにそれぞれ対応するセグメント圧縮結果に基づいて、対応する第3の領域セグメントの真値結果及びシミュレーション値結果を生成する。
【0087】
ステップS908:領域セグメントの順位に従って、最下位の領域セグメントから、最上位の領域セグメントの選択結果を取得するまで、各領域セグメントに対応する選択結果を順次決定する。ここで、領域セグメントのうちの第1の領域セグメント以外の他の領域セグメントの選択結果は、対応する領域セグメントの真値結果及びシミュレーション値結果のうちの1つである。
【0088】
ステップS910:各領域セグメントの選択結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定する。
【0089】
各領域セグメントについて、コンピュータ機器は、まず、該領域セグメント内のセグメント圧縮結果に対してそれぞれ加算処理を行い、真値結果及びシミュレーション値結果を取得する。ここで、真値結果は、領域内シフト結果に対して加算処理を行って得られた実際の合計結果であり、シミュレーション値結果は、領域内シフト結果に対して加算処理を行った際に桁上げがあると仮定して算出したシミュレーションの合計結果である。そして、コンピュータ機器は、各領域セグメント内の真値結果及びシミュレーション値結果を選択部に入力して選択し、最終的にどの結果を出力するかを選択部で決定する。
【0090】
具体的には、コンピュータ機器は、分割された複数の領域セグメントのうち、最下位の領域セグメント(第1の領域セグメントと称する)に対して圧縮処理を行う必要がなく、該領域セグメント内に1つの領域内シフト結果しか存在しない場合、加算部及び選択部を割り当てることなく、領域内シフト結果を第1の領域セグメントの選択結果として直接取得することができるため、コンピュータ機器は、領域セグメントに対して加算処理を行う必要がなく、選択を行う必要もない。
【0091】
また、最下位の次の下位の領域セグメント(第2の領域セグメントと称する)に対しても圧縮処理を行う必要がない。該第2の領域セグメント内には、複数の領域内シフト結果が存在し、加算処理が必要である。コンピュータ機器は、第2の領域セグメント内の全領域内シフト結果を加算し、第2の領域段の真値結果及びシミュレーション値結果を計算する。
【0092】
最下位の領域セグメント及び最下位の次の下位の領域セグメントを除いて、残りの各領域セグメント(第3の領域セグメントと称する)内の領域内シフト結果は圧縮され、第3の領域セグメント内に複数の領域内シフト結果が存在する。従って、各第3の領域セグメントについて、コンピュータ機器は、第3の領域セグメント内のセグメント圧縮結果を加算し、第3の領域セグメントの真値結果及びシミュレーション値結果を生成する。
【0093】
第1の領域セグメント以外の各領域セグメントの真値結果及びシミュレーション値結果を決定した後、コンピュータ機器は、各領域セグメントの真値結果及びシミュレーション値結果をそれぞれ1つの選択部に入力し、セレクタにより、出力結果が真値結果であるか、それともシミュレーション値結果であるかを決定する。効率を向上させるために、コンピュータ機器は、領域セグメントの順位の高低に応じて、最下位の領域セグメントから、最下位の領域セグメント、下位の領域セグメント…最上位の領域セグメントの選択結果を順次決定する。ここで、最下位の領域セグメントに対応する選択結果は、該領域セグメント内の元の領域内シフト結果である。最下位の領域セグメントは圧縮及び加算処理が行われていないため、桁上げが存在しないが、最下位の次の下位の領域セグメントの選択結果は真値結果である。各第3の領域セグメントについて、比較的に上位の領域セグメントの選択結果は、隣接する領域セグメントのうちの比較的に下位の領域セグメントに桁上げがあるか否かを考慮する必要がある。下位の領域セグメントに桁上げがある場合、選択部は、上位の領域セグメントの選択結果をシミュレーション値結果として出力する。逆の場合、選択部は、上位の領域セグメントの選択結果を真値結果として出力する。
【0094】
一例として、図10に示すように、最上位の領域セグメントについて、コンピュータ機器は、最上位の次の上位の領域セグメントの選択部を介して入力された桁上げの状況に応じて、該最上位の領域セグメントの選択部は真値又はシミュレーション値結果を出力する。同様に、最上位の次の上位の領域セグメントについても、コンピュータ機器は同様な処理を行う。最下位の次の下位の領域セグメントについて、最下位の領域セグメントに桁上げが存在しないため、最下位の次の下位の領域セグメントの選択部は真値結果を出力する。最下位の領域セグメントについて、圧縮や加算処理を行う必要がないため、そのまま元の領域内シフト結果となる。
【0095】
これによって、コンピュータ機器は、選択部により全ての領域セグメントに対応する選択結果を出力する。
【0096】
本実施例では、セグメントごとに加算するという手段を採用し、異なる領域セグメントに異なる加算部をそれぞれ割り当ててセグメント加算処理を行い、それぞれ複数の選択部を利用して各領域セグメントの桁上げ状況に応じて桁上げの伝播を行うことによって、従来技術の全ビット幅を使用して桁上げの伝播を行う加算に比べて、必要なハードウェアリソースを低減させ、クリティカルパスの長さを効果的に短縮させ、タイミング特性が良い。
【0097】
その後、コンピュータ機器は、各領域セグメントの選択結果を連結して、完全な第1の所定の範囲における浮動小数点数処理結果を取得する。そのため、幾つかの実施例では、各領域セグメントの選択結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定するステップは、各領域セグメントの順位に従って、各領域セグメントの選択結果を順次連結し、目標タスクに対応する浮動小数点数処理結果を取得するステップを含む。具体的には、コンピュータ機器は、各領域セグメントの順位の高さに応じて、隣接する2つの領域セグメントの選択結果を高いものから低いものまで(低いものから高いものまで)順次連結することによって、第1の所定の範囲における全体の浮動小数点数処理結果を取得する。
【0098】
本実施例では、セグメント圧縮とセグメント加算の手段を採用しているため、得られた各領域セグメントの結果をさらに連結することで、完全な浮動小数点数処理結果を取得することができる。この方式では、全ビット幅の圧縮部及び加算部を使用する必要がなく、クリティカルパスの長さを低減させ、タイミング特性が良い。
【0099】
浮動小数点数の有効精度は高く、科学計算と工学計算により適している。科学的計数法では、浮動小数点数の表示を明示的に規定しないと、1つの浮動小数点数の符号化表示がコンピュータで一意にならず、コンピュータの認識や処理に不利になる。例えば、十進数は、1.11×10、0.111×10、0.0111×10などの複数の表現で表すことができる。正規化された浮動小数点数は一意の表現を持つため、浮動小数点数の演算では、浮動小数点数を正規化する必要がある。
【0100】
得られた浮動小数点数処理結果が正規化された浮動小数点数の基準を満たすことを保証するために、幾つかの実施例では、コンピュータ機器は、浮動小数点数処理結果を所定の浮動小数点標準に合致させるように、浮動小数点数処理結果に対して正規化処理を行う。浮動小数点数処理結果に対して正規化処理を行うことによって、得られた浮動小数点数処理結果が正規化された浮動小数点数の標準に合致することを保証し、コンピュータ処理時に各浮動小数点数処理結果に対して識別と変換を行う必要がなく、処理効率がより高く、浮動小数点数の符号化表示が一意でないことによる計算不正確の問題を回避することができる。
【0101】
ここで、正規化処理は、フォーマット化出力とも称され、浮動小数点数を指定されたフォーマットに変換することを意味する。正規化処理後の浮動小数点数処理結果の仮数Mの絶対値は、1/r≦|M|<1を満たす必要があり、ここで、rは基数であり、通常、rは2又は8又は16である。
【0102】
正規化処理とは、正規化されていない浮動小数点数の仮数値及び指数値の大きさを調整することによって、非ゼロの浮動小数点数が仮数値の最上位の桁で有効な値であることを保証する処理である。幾つかの実施例では、図11に示すように、浮動小数点数処理結果に対して正規化処理を行うステップは、以下のステップを含む。
【0103】
ステップS1102:浮動小数点数処理結果における第1の符号識別子及び第2の符号識別子を決定する。
【0104】
ステップS1104:第1の符号識別子と第2の符号識別子とが同一である場合、浮動小数点数処理結果における仮数値を第1のシフト方向にシフトさせる。
【0105】
ステップS1106:第1の符号識別子と第2の符号識別子とが異なる場合、浮動小数点数処理結果における仮数値を第2のシフト方向にシフトさせる。ここで、第2のシフト方向は、第1のシフト方向とは反対の方向である。
【0106】
浮動小数点数の正規化処理は、左正規化と右正規化の2つの方式がある。ここで、左正規化とは、浮動小数点数演算の結果が非正規化である場合、正規化処理を行うことであり、仮数値を左に1桁だけシフトして、指数から1を減算する(基数r=2の場合)ことである。左正規化は複数回実行する場合がある。右正規化とは、浮動小数点数演算の結果における仮数値がオーバーフローした場合、仮数値を右に1桁だけシフトして、指数に1を加算することである(基数r=2の場合)。右正規化は1回だけ実行する。
【0107】
具体的には、コンピュータ機器は、浮動小数点数処理結果における第1の符号識別子及び第2の符号識別子を取得する。第1の符号識別子と第2の符号識別子とが同一である(即ち、第1の符号識別子及び第2の符号識別子が00又は11を構成する)場合、浮動小数点数処理結果における仮数値を第1のシフト方向にシフトさせる。第1の符号識別子と第2の符号識別子とが異なる(即ち、第1の符号識別子及び第2の符号識別子が01又は10を構成する)場合、浮動小数点数処理結果における仮数値を第2のシフト方向にシフトさせる。ここで、第2のシフト方向は第1のシフト方向とは反対の方向である。IEEE 754標準における浮動小数点正規化方式を一例とすると、第1のシフト方向は左シフトであり、第2のシフト方向は右シフトである。
【0108】
例えば、コンピュータ機器が2つの符号識別子が同一であると判断した場合、オーバーフローがないことを表す。ただし、浮動小数点数の処理結果の最上位の数値のビットが符号と統一である場合、最上位の数値のビットが符号の数値と異なるまで、左正規化処理を行い、即ち、仮数値を左にシフトする必要がある。例えば、111×××及び000×××の2種類の場合の浮動小数点数処理結果について説明する。111×××を左に1桁だけシフトした結果は11×××0であり、000×××を左に1桁だけシフトした結果は00×××0であり、最後に指数値からシフト回数を減算する。
【0109】
コンピュータ機器が2つの符号識別子が異なると判断した場合、演算結果がオーバーフローしていることを表す。この場合、右正規化処理を行い、浮動小数点数処理結果の仮数を右にシフトする必要があり、オーバーフローがなくなるまで停止する。そして、指数値にシフト回数を加算する。具体的には、01××××及び10××××の2種類の場合の浮動小数点数処理結果について説明する。01×××右に1桁だけシフトした結果は001×××であり、10××××右に1桁だけシフトした結果は110×××であり、最後に指数値に1を加算する。
【0110】
本実施例では、浮動小数点数処理結果を正規化処理することで、仮数値の有効なビット数を十分に利用し、浮動小数点数演算の精度を向上させることができる。
【0111】
幾つかの実施例では、浮動小数点数に対して正規化処理を行った後に、仮数部の下位の桁に幾つかの値を加算し、加算された値に対して、例えば、1.2349999を1.23に切り下げ、或いは1.2350001を1.24に切り上げるなどの丸め処理を行う必要がある。IEEE 754標準では、近くで偶数に丸め、上に丸め、下に丸め、0への方向に丸めるなどの方法が規定されている。なお、これらに限定されず、異なる浮動小数点数基準は異なる丸め方式を採用してもよく、実際の応用において必要に応じて適当な丸め方式を選択して丸めてもよい。
【0112】
本発明は、上記の多入力の浮動小数点数の処理方法を適用する応用シナリオをさらに提供する。幾つかの実施例では、多入力の浮動小数点数の処理方法は、例えば、目標タスクを処理するために、該応用シナリオに適用される。ここで、該目標タスクは、ニューラルネットワーク処理タスクにおける1つのサブタスクであり、ニューラルネットワーク処理タスクは、畳み込み処理タスク又は類似度処理タスクのうちの少なくとも1つを含む。該応用シナリオでは、上記の多入力の浮動小数点数の処理方法は、浮動小数点数処理結果に基づいて、ニューラルネットワーク処理タスクにおける後続の各サブタスクを実行し、ニューラルネットワーク処理結果を取得するステップをさらに含む。
【0113】
具体的には、ニューラルネットワークの訓練及び応用のプロセスにおいて、例えば、画像データ、音声データ、及びテキストデータなど対して計算処理を行う必要がある。ニューラルネットワークにより処理される画像データ、音声データ、及びテキストデータなどは、コンピュータにおいて、通常、浮動小数点数で表され、例えば、1枚の画像における各画素は、0~255の32ビット単精度浮動小数点数で表され、ここで、255は白を表し、0は黒を表す。また、例えば、読み取られた音声データは、サンプリング範囲内の浮動小数点数である。
【0114】
ニューラルネットワーク処理タスクには、浮動小数点数の処理に関するサブタスクが複数ある。例えば、入力された画像データに対して畳み込み又は逆畳み込みの操作などを行う。例えば、畳み込み操作を一例とすると、畳み込みは、2つのデータをある範囲内で乗算して合計することである。畳み込みのプロセスにおいて、コンピュータ機器は、プロセッサを利用して上記の多入力の浮動小数点数の処理方法を実行し、複数の浮動小数点数に対する合計を実現し、浮動小数点数処理結果を取得し、その後、浮動小数点数処理結果に基づいて、後続の畳み込み操作を実行してもよい。これによって、ニューラルネットワーク処理タスクにおいて、コンピュータ機器は、浮動小数点数処理結果に基づいて、ニューラルネットワーク処理タスクにおける後続の各サブタスクを実行し、ニューラルネットワーク処理結果を取得し、例えば、処理後の画像データを出力することができる。
【0115】
また、上記の多入力の浮動小数点数の処理方法は、ニューラルネットワーク処理タスクにおける類似度処理タスクに適用されてもよい。画像データを一例とすると、類似度処理タスクでは、処理された画像データと予め設定された標準画像データとを比較し、両者の類似度を算出する必要がある。類似度の計算プロセスにおいて、コンピュータ機器は、上記の多入力の浮動小数点数の処理方法を用いて、画像データに対応する浮動小数点数の差分を求める計算を行い、浮動小数点数処理結果を取得してもよい。得られた浮動小数点数処理結果に基づいて、コンピュータ機器は、ニューラルネットワーク処理タスクにおける後続の各サブタスクを実行し続け、例えば、浮動小数点数処理結果が示す差分に基づいて、画像データの分類などを行い、最終的にニューラルネットワーク処理結果(例えば画像の分類結果)などを出力してもよい。
【0116】
なお、これらに限定されず、当業者には明らかなように、本明細書に開示される発明の概念及び思想から逸脱することなく、複数の浮動小数点数に適用可能な如何なる計算処理タスク、例えばクラウドコンピューティングのシナリオにおけるデータ計算タスク、又はスマートセンサ(例えばエッジセンサー)により実行されるデータ処理プロセスにおける計算タスクなどは何れも上記の目標タスクとしてもよい。
【0117】
本実施例では、上記の多入力の浮動小数点数の処理方法をニューラルネットワーク処理などのタスクに適用することによって、ニューラルネットワークの高精度の浮動小数点数処理を実現し、ニューラルネットワークの計算性能を向上させることができる。
【0118】
本発明の思想をできるだけ明確に説明するために、ここでは、複数の浮動小数点数の加算を具体的に実行することを一例として説明し、従来方式との相違点及び利点を詳細に説明する。
【0119】
具体的な例では、従来の浮動小数点処理方式の流れは、図12に示している。コンピュータ機器は、まず、n個の浮動小数点数の指数(exponent)を取得し、比較部で比較して最大指数値を取得する。同時に、コンピュータ機器は、n個の浮動小数点数の仮数値(mantissa)を取得する。そして、コンピュータ機器は、1つの浮動小数点数について、該浮動小数点数の指数と最大指数値との差、及び該浮動小数点数の仮数値を、固定サイズのシフト部に入力し、該シフト部を用いて該浮動小数点数に対してシフト処理を行う。他の浮動小数点数についても、コンピュータ機器は、同様な処理を行う。各浮動小数点数の仮数値は大きさのばらつきがあるため、中間精度の損失がないようにするためには、利用されるシフト部の範囲を最大値m*wビットとする必要があり、mは浮動小数点数の数から1を減算したものである。
【0120】
シフトプロセスにおいて、中間精度の損失がないように、シフト後のデータのビット幅は非常に広い。例えば、32ビットの単精度浮動小数点数が5個ある場合、中間精度の損失がないことを確保するために、シフト後のデータのビット幅を128bitとする必要がある(128bitの具体的な構成は、図13に示すように、各浮動小数点数の拡張後の仮数は24bitであり、桁上げビットとして2bitを予約する)。シフト範囲が大きすぎると、ハードウェアのオーバーヘッドが大きくなり、タイミング特性が悪くなるため、コンピュータのプロセッサでは高い動作周波数を実現することは困難である。
【0121】
同様に、シフトが完成した後、コンピュータ機器は、得られたシフト結果を1つのn:2の圧縮部に入力して圧縮を行い(ここで、nは多入力の浮動小数点数の加算器の入力個数である)、2つの出力、即ちcarryとsumを取得する。その後、carryとsumに対して桁上げ伝播の加算を行い、最終的な加算結果をnormalizeユニットに入力して浮動小数点数の標準化操作を行い、標準化されたデータを丸め操作を行い、最終に浮動小数点数の加算結果を取得する。ここで、圧縮部は全ビット幅についてn:2の圧縮を用いており、32ビットの単精度浮動小数点数が5個あることを一例とすると、圧縮部は128bitの5:2圧縮部を用いており、圧縮部の面積のオーバーヘッドが大きい。後続の加算段階でも、全ビット幅の2つの入力(carryとsum)に対して桁上げ伝播の加算を行い、同様に32ビットの単精度浮動小数点数が5個あることを一例とすると、128bitの加算器が必要となり、タイミング特性が悪い。
【0122】
従来方式と比較して、図14に示すように、本発明の実施例に係る多入力の浮動小数点数の処理方法は、以下の処理の流れを有する。コンピュータ機器は、n個の浮動小数点数の指数(exponent)を取得し、比較器で比較して最大指数値を取得する。同時に、コンピュータ機器は、n個の浮動小数点数の仮数値(mantissa)を取得する。コンピュータ機器は、シフト部に入力してシフト処理を行う前に、各浮動小数点数の指数値の大きさに従って、各浮動小数点数に対して並び替え処理を行う。即ち、指数が最大の浮動小数点数について、シフト操作を行う必要がない。2番目の浮動小数点数について、wビットだけシフトする。3番目の浮動小数点数ついて、2*wビットだけシフトする。…、他の場合も同様であり、指数が最小(最下位)の浮動小数点数ついて、そのシフトの範囲はm*wである。32ビットの単精度浮動小数点数が5個あることを一例とすると、m=4、w=26となる。コンピュータ機器は、各浮動小数点数について同様な固定サイズのシフト部を使用せずに、並び替え結果に従って各浮動小数点数のシフト部を動的に割り当てる。従来技術と比べて、シフト部の面積のオーバーヘッドを大幅に低減させることができる。
【0123】
そして、コンピュータ機器は、各浮動小数点数の仮数値を対応するシフト部に入力してシフト処理を行う。得られたシフト結果は、対応する圧縮部にそれぞれ入力される。具体的には、コンピュータ機器は、各領域セグメントについて異なる圧縮比の圧縮部をそれぞれ設定する。即ち、最上位のw bitについて、n:2の圧縮部を使用する。次に高いw bitについて、(n-1):2の圧縮部を使用する。他の場合も同様である。最下位のw bit及び次の低いw bitについて、圧縮部を使用して圧縮する必要がない。従って、圧縮部を割り当てる必要もない。従来技術と比べて、圧縮部の面積のオーバーヘッドを大幅に低減させることができる。
【0124】
その後、各領域セグメントについて、コンピュータ機器は、それぞれ1つのCPAを用いて加算を行う。最下位のw bitについて、加算操作を行わずに、該wビットのシフト結果を直接取得する。次に低いw bitついて、領域セグメント内に2つの浮動小数点数のシフト結果(上記の実施例における領域内シフト結果に対応する)が存在するため、コンピュータ機器は、1つのCPAを用いて加算を行う。該wビット(最下位の次の下位)の下位のwビット(最下位)は桁上げがないため、該wビットは実際の加算結果を出力する。他の領域セグメントについて、該領域セグメントの次の領域セグメント(隣接する下位の領域セグメント)に桁上げがあるか否かに応じて、実際の加算結果(上記の実施例における真値結果に対応する)を出力するか、それとも桁上げを含む加算結果(即ち、上記の実施例におけるシミュレーション値結果)を出力するかをMUX(選択部)で選択することによって、複数の選択結果を取得する。
【0125】
最後に、コンピュータ機器は、各選択結果を連結し、最終的な加算結果を取得する。そして、後処理を行い、加算結果がIEEE 754で規定されたフォーマットを満たすように、加算結果に対して正規化を行い、丸め操作を行い、最終結果を取得する。
【0126】
従来方式と比べて、有効なシフトの思想を導入し、並び替え後の仮数に対して有効なシフトを行い、上位の仮数のシフト範囲が小さくなる(シフトを行う必要がない場合もある)ため、シフト部の面積のオーバーヘッドを大幅に低減させることができる。また、導入された効率的なシフトの考え方に基づいて、全ビット幅を領域セグメントに分割し、セグメント圧縮をそれぞれ行うことで、下位の領域セグメントの圧縮部の入力が少なくなり(圧縮する必要がない場合もある)、圧縮部の面積を大幅に低減させ、タイミング経路を小さくすることができる。最終的な加算段階では、セグメント加算の手段を採用し、クリティカルパスの長さを効果的に低減させることができる。これによって、最小のハードウェア面積で損失のない多入力の浮動小数点数処理を実現することができ、プロセッサ全体の面積を大幅に低減させ、プロセッサのコア周波数を効率的に向上させることができる。
【0127】
5つの32ビットの単精度浮動小数点数を一例とすると、Global Foundries(グローバルファウンドリーズ、GFと略称する)12nmプロセス技術を面積の推定標準とし、本発明に必要なシフト部リソースと従来技術との対比は、以下の表1に示す。
【0128】
【表1】
表1から分かるように、本発明で使用されるシフト部リソースは従来技術の55.6%だけであり、シフト部の面積コストを大幅に節約することができる。
【0129】
圧縮段階において、本発明で使用される圧縮部リソースと従来技術で使用される圧縮部リソースとの対比は、以下の表2に示す。
【0130】
【表2】
表2から分かるように、本発明で使用される圧縮部リソースは従来技術の39%であり、圧縮部の面積コストを大幅に節約することができる。
【0131】
また、タイミングについて、従来技術は、シフト処理から加算部の出力までのクリティカルパスは、128bit shift(シフト部)→>5:2 compressor(圧縮部)→128bit adder(加算部)であった。一方、本発明は、シフト処理から加算部の出力までのクリティカルパスは、128bit shift(シフト部)→5:2 compressor(圧縮部)→24bit adder(加算部)であり、クリティカルパスの長さを効果的に低減させ、比較的に高いプロセッサのクロック周波数を実現することができる。
【0132】
なお、上記の各実施例に係るフローチャートにおける各ステップは、矢印の指示に従って順次表示されるものであるが、これらのステップは必ずしも矢印の指示に従って順次実行されるものではない。本明細書に明示的に記載されていない限り、これらのステップの実行は、厳密な順序に限定されず、他の順序で実行されてもよい。また、上記の各実施例に係るフローチャートにおけるステップの少なくとも一部は、複数のステップ又は複数の段階を含んでもよく、これらのステップ又は段階は、必ずしも同一のタイミングで実行されるものではなく、異なるタイミングで実行されてもよい。これらのステップ又は段階の実行順序は、必ずしも順次に実行するものではなく、他のステップ又は他のステップにおけるステップ又は段階の少なくとも一部と交代に又は交互に実行されてもよい。
【0133】
同様な発明の思想に基づいて、本発明の実施例は、上記の多入力の浮動小数点数の処理方法を実現するための多入力の浮動小数点数の処理装置をさらに提供する。該装置により提供される問題解決のための実施形態は、上記の方法に記載された実施形態と同様である。従って、以下に提供される1つ又は複数の多入力の浮動小数点数の処理装置の実施例における具体的な限定は、上記の説明における多入力の浮動小数点数の処理方法の限定を参照してもよい。
【0134】
幾つかの実施例では、多入力の浮動小数点数の処理装置1500を提供する。図15に示すように、該装置は、ソフトウェアモジュール又はハードウェアモジュールを採用し、或いはこれらの組み合わせによりコンピュータ機器の一部を構成してもよい。該装置は、具体的には、取得モジュール1501、割り当てモジュール1502、シフトモジュール1503、及び決定モジュール1504を含む。
【0135】
取得モジュール1501は、目標タスクに対応する処理される複数の浮動小数点数を取得し、各浮動小数点数における指数部の指数値及び仮数部の仮数値をそれぞれ抽出する。
【0136】
割り当てモジュール1502は、各浮動小数点数の指数値の大きさに従って、複数の浮動小数点数を並び替え、並び替え結果を取得し、並び替え結果に基づいて、異なる所定のビット数を有する複数のシフト部から、各浮動小数点数にシフト部をそれぞれ割り当てる。
【0137】
シフトモジュール1503は、各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得する。
【0138】
決定モジュール1504は、各シフト結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定する。
【0139】
幾つかの実施例では、複数のシフト部が有する異なる所定のビット数は第1の所定の範囲内にあり、各シフト部の所定のビット数は第1の所定の範囲内に均等に分布している。
【0140】
幾つかの実施例では、複数のシフト部の数は、前記複数の浮動小数点数の数と同一である。割り当てモジュールは、並び替え結果における各浮動小数点数の並び替え番号を決定し、各並び替え番号にそれぞれ対応する所定のビット数を決定し、複数のシフト部を、それぞれ有する所定のビット数に従って、対応する所定のビット数に対応する並び替え番号により指定される浮動小数点数に割り当てる。
【0141】
幾つかの実施例では、シフトモジュールは、各浮動小数点数の指数値と最大指数値とのそれぞれの差に基づいて、各浮動小数点数のそれぞれの仮数値に対応するシフトビット数をそれぞれ決定し、最大指数値は、複数の浮動小数点数の指数値のうちの最大値であり、各浮動小数点数について、浮動小数点数に割り当てられたシフト部により、対応する浮動小数点数の仮数値に対応するシフトビット数に基づいて、対応する浮動小数点数の仮数値に対してシフト処理を行い、シフト結果を取得するステップと、を含む。
【0142】
幾つかの実施例では、シフトモジュールは、各浮動小数点数について、浮動小数点数の仮数値に対応するシフトビット数がシフト範囲内にあるか否かを決定し、シフト範囲は、浮動小数点数に割り当てられたシフト部の所定のビット数に一致し、シフトビット数がシフト範囲内にある場合、浮動小数点数に対応して割り当てられたシフト部により、対応するシフト範囲内で、浮動小数点数における仮数値を構成する各仮数要素を、同一のシフト方向にシフトビット数だけ移動させ、シフト方向は左シフト又は右シフトを含み、シフトビット数がシフト範囲外にある場合、浮動小数点数に対応して割り当てられたシフト部により、浮動小数点数における仮数値を構成する各仮数要素を、同一のシフト方向に所定のビット数だけ移動させ、各浮動小数点数に対してシフト処理を行って得られた仮数値を各浮動小数点数のそれぞれのシフト結果とする。
【0143】
幾つかの実施例では、決定モジュールは、圧縮ユニットをさらに含む。該圧縮ユニットは、異なる所定のビット数のシフト部が所在する第1の所定の範囲に基づいて、第1の所定の範囲を分割して複数の領域セグメントを取得し、複数の領域セグメントにそれぞれ対応する複数の圧縮部を決定し、異なる圧縮部は、異なる所定の圧縮比を有し、各領域セグメントについて、それぞれの領域セグメント内にある複数の領域内シフト結果をそれぞれ決定し、単一の領域内シフト結果は、単一の浮動小数点数に対応するシフト結果における領域内部分であり、各圧縮部により、対応する圧縮部に対応する領域セグメント内の複数の領域内シフト結果に対してセグメント圧縮処理をそれぞれ行い、複数のセグメント圧縮結果を取得し、複数のセグメント圧縮結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定する。
【0144】
幾つかの実施例では、複数の圧縮部が有する異なる所定の圧縮比の値は第2の所定の範囲内にあり、各圧縮部の所定の圧縮比の値は第2の所定の範囲内に均等に分布している。
【0145】
幾つかの実施例では、圧縮ユニットは、各圧縮部について、それぞれの対応する領域セグメント内の複数の領域内シフト結果を、対応する圧縮部の入力とし、各圧縮部により、それぞれの対応する所定の圧縮比に従って、それぞれの入力に対してセグメント圧縮処理を行い、加算結果及び桁上げ結果を取得し、加算結果及び桁上げ結果は、対応する圧縮部に対応するセグメント圧縮結果を構成する。
【0146】
幾つかの実施例では、決定モジュールは、加算ユニットをさらに含む。該加算ユニットは、分割された複数の領域セグメントのうち、圧縮処理が行われておらず、且つ単一の領域内シフト結果のみに対応する第1の領域セグメントについて、単一の領域内シフト結果を第1の領域セグメントの選択結果とし、分割された複数の領域セグメントのうち、圧縮処理が行われておらず、且つ2つ以上の領域内シフト結果に対応する第2の領域セグメントについて、第2の領域セグメント内にある2つ以上の領域内シフト結果に基づいて、第2の領域セグメントの真値結果及びシミュレーション値結果を生成し、分割された複数の領域セグメントのうち、圧縮処理が行われた第3の領域セグメントについて、各第3の領域セグメントにそれぞれ対応するセグメント圧縮結果に基づいて、対応する第3の領域セグメントの真値結果及びシミュレーション値結果を生成し、領域セグメントの順位に従って、最下位の領域セグメントから、最上位の領域セグメントの選択結果を取得するまで、各領域セグメントに対応する選択結果を順次決定し、領域セグメントのうちの第1の領域セグメント以外の他の領域セグメントの選択結果は、対応する領域セグメントの真値結果及びシミュレーション値結果のうちの1つであり、各領域セグメントの選択結果に基づいて、目標タスクに対応する浮動小数点数処理結果を決定する。
【0147】
幾つかの実施例では、決定モジュールは、連結ユニットをさらに含む。該連結ユニットは、各領域セグメントの順位に従って、各領域セグメントの選択結果を順次連結し、目標タスクに対応する浮動小数点数処理結果を取得する。
【0148】
幾つかの実施例では、上記装置は、後処理モジュールをさらに含む。該後処理モジュールは、浮動小数点数処理結果を所定の浮動小数点標準に合致させるように、浮動小数点数処理結果に対して正規化処理を行う。
【0149】
幾つかの実施例では、後処理モジュールは、浮動小数点数処理結果における第1の符号識別子及び第2の符号識別子を決定し、第1の符号識別子と第2の符号識別子とが同一である場合、浮動小数点数処理結果における仮数値を第1のシフト方向にシフトさせ、第1の符号識別子と第2の符号識別子とが異なる場合、浮動小数点数処理結果における仮数値を第2のシフト方向にシフトさせ、第2のシフト方向は、第1のシフト方向とは反対の方向である。
【0150】
幾つかの実施例では、目標タスクは、ニューラルネットワーク処理タスクにおける1つのサブタスクであり、ニューラルネットワーク処理タスクは、畳み込み処理タスク又は類似度処理タスクのうちの少なくとも1つを含む。上記装置は、タスクモジュールをさらに含む。該タスクモジュールは、浮動小数点数処理結果に基づいて、ニューラルネットワーク処理タスクにおける後続の各サブタスクを実行し、ニューラルネットワーク処理結果を取得する。
【0151】
多入力の浮動小数点数の処理装置の具体的な限定について、上記の多入力の浮動小数点数の処理方法の限定を参照してもよい。上記の多入力の浮動小数点数の処理装置における各モジュールの全て又は一部は、ソフトウェア、ハードウェア、及びそれらの組み合わせにより実現されてもよい。上記の各モジュールは、コンピュータ機器内のプロセッサにハードウェア的に組み込まれ、或いは独立してもよいし、プロセッサが上記の各モジュールに対応する動作を容易に呼び出すために、コンピュータ機器内のメモリにソフトウェア的に格納されてもよい。
【0152】
同様な発明の思想及び考え方に基づいて、本発明の実施例は、上記の実施例に係る多入力の浮動小数点数の処理方法を実現するためのプロセッサをさらに提供する。幾つかの実施例では、図16に示すように、プロセッサ1600は、異なる所定のビット数を有する少なくとも1つのシフト部1601及び論理処理部1602を含む。異なる実施シナリオでは、プロセッサは、異なるコンピュータ機器に適用される必要性に応じて様々なパッケージ構造を示すことができる。
【0153】
ここで、異なる所定のビット数を有する少なくとも1つのシフト部1601は、処理される複数の浮動小数点数のうちの1つの浮動小数点数の仮数部の仮数値に対してシフト処理を行うためにそれぞれ割り当てられる。ここで、各浮動小数点数に対応して割り当てられたシフト部は、各浮動小数点数の指数部の指数値を大きさに従って並び替えて得られた並び替え結果に基づいて決定される。
【0154】
論理処理部1602は、各シフト部がシフト処理を行って得られた複数のシフト結果に対して論理処理を行い、浮動小数点数処理結果を取得する。
【0155】
幾つかの実施例では、少なくとも1つのシフト部が有する異なる所定のビット数は第1の所定の範囲内にあり、各シフト部の所定のビット数は第1の所定の範囲内に均等に分布している。
【0156】
幾つかの実施例では、図17に示すように、論理処理部1602は、以下の各部を含む。
【0157】
少なくとも1つの圧縮部16021は、異なる所定の圧縮比を有し、シフト部にそれぞれ接続されている。各圧縮部は、シフト処理により得られた複数のシフト結果に対してセグメント圧縮処理を行い、セグメント圧縮結果を取得するために割り当てられる。
【0158】
少なくとも1つの加算部16022は、圧縮部16021にそれぞれ接続されている。該加算部は、セグメント圧縮結果に基づいて複数の領域セグメントの真値結果及びシミュレーション値結果を生成する。
【0159】
少なくとも1つの選択部16023は、加算部16022にそれぞれ接続されている。該選択部は、複数の領域セグメントの真値結果及びシミュレーション値結果に基づいて各領域セグメントの選択結果を決定し、選択結果は連結により浮動小数点数処理結果を生成するために用いられる。
【0160】
幾つかの実施例では、複数の圧縮部が有する異なる所定の圧縮比の値は第2の所定の範囲内にあり、各圧縮部の所定の圧縮比の値は第2の所定の範囲内に均等に分布している。
【0161】
プロセッサの具体的な限定について、上記の多入力の浮動小数点数の処理方法の限定を参照してもよい。上記のプロセッサにおける各素子は、全部或いは部分的にゲート回路、スイッチ回路などの他の回路デバイスの組合せにより実現されてもよい。上記の各素子は、集積式でコンピュータ機器のプロセッサに内蔵してもよく、プロセッサが該各素子に対応する操作を実行することを便利にする。
【0162】
幾つかの実施例では、コンピュータ機器をさらに提供し、該コンピュータ機器は、上記のプロセッサを含むサーバ又は端末であってもよい。ここで、サーバは、独立した物理サーバであってもよいし、複数の物理サーバからなるサーバクラスタや分散型システムであってもよいし、クラウドコンピューティングサービスを提供するクラウドサーバであってもよい。端末は、スマートフォン、タブレットコンピュータ、ノートパソコン、デスクトップパソコン、スマートスピーカー、スマートウォッチ、車載端末、スマートテレビなどであってもよい。該コンピュータ機器の内部構成は、図18に示す。該コンピュータ機器は、システムバスを介して接続するプロセッサ、メモリとネットワークインタフェースを含む。ここで、該コンピュータ機器のプロセッサは、計算と制御能力を提供するために用いられる。該コンピュータ機器のメモリは、不揮発性記憶媒体、内部メモリを含む。該不揮発性記憶媒体は、オペレーティングシステム、コンピュータ読み取り可能な命令とデータベースを記憶する。該内部メモリは、不揮発性記憶媒体におけるオペレーティングシステムとコンピュータ読み取り可能な命令の実行のために環境を提供する。該コンピュータ機器のデータベースは、浮動小数点数を記憶するために使用される。該コンピュータ機器のネットワークインタフェースは、外部の端末とネットワーク接続で通信するためのものである。該コンピュータ読み取り可能な命令は、プロセッサにより実行される際に、多入力の浮動小数点数の処理方法を実現する。
【0163】
当業者であれば、図18に示された構成は、本発明の解決手段に関連する部分的な構成のブロック図にすぎず、本発明の解決手段が適用されるコンピュータ機器の限定を構成するものではなく、特定のコンピュータ機器は、図に示されたものよりも多くの又は少ない構成要素を含んでもよく、又は幾つかの構成要素を組み合わせてもよく、又は異なる構成要素の配置を有してもよいことを理解するであろう。
【0164】
幾つかの実施例では、コンピュータ読み取り可能な命令が記憶されたメモリと、プロセッサとを含むコンピュータ機器であって、該プロセッサは、該コンピュータ読み取り可能な命令を実行する際に、上記の方法のステップを実現する、コンピュータ機器をさらに提供する。
【0165】
幾つかの実施例では、コンピュータプログラムが記憶されたコンピュータ読み取り可能な記憶媒体であって、該コンピュータプログラムは、プロセッサにより実行される際に、上記の方法のステップを実現する、記憶媒体をさらに提供する。
【0166】
幾つかの実施例では、コンピュータプログラムを含むコンピュータプログラム製品であって、該コンピュータプログラムは、プロセッサにより実行される際に、上記の方法のステップを実現する、コンピュータプログラム製品をさらに提供する。
【0167】
当業者であれば、上記の実施例の方法のプロセスの全部又は一部を実現することは、実行際に上記の方法の実施例のようなプロセスを含むことができる不揮発性コンピュータ読み取り可能な記憶媒体に記憶され得るコンピュータプログラムによって関連するハードウェアを命令することによって達成され得ることを理解するであろう。ここで、本発明に係る各実施例で使用されるメモリ、データベース、又は他の媒体への任意の参照は、不揮発性メモリ及び揮発性メモリのうちの少なくとも1つを含むことができる。不揮発性メモリは、リードオンリーメモリ(Read-Only Memory:ROM)、磁気テープ、フロッピーディスク、フラッシュメモリ、光メモリ、高密度埋め込み不揮発性メモリ、抵抗変化メモリ(ReRAM)、磁気変化メモリ(Magnetoresistive Random Access Memory:MRAM)、強誘電体メモリ(Ferroelectric Random Access Memory:FRAM)、相変化メモリ(Phase Change Memory:PCM)、グラフェンメモリなどを含むことができる。揮発性メモリは、ランダムアクセスメモリ(Random Access Memory:RAM)又は外部キャッシュメモリなどを含むことができる。限定ではない一例として、RAMは、スタティックランダムアクセスメモリ(Static Random Access Memory:SRAM)又はダイナミックランダムアクセスメモリ(Dynamic Random Access Memory:DRAM)などの様々な形態であってもよい。本発明に係る実施例に関連するデータベースは、リレーショナルデータベース及び非リレーショナルデータベースのうちの少なくとも1つを含むことができる。非リレーショナルデータベースとしては、ブロックチェーンベースの分散型データベースなどを含んでもよいが、これに限定されない。本発明に係る実施例に関連するプロセッサは、汎用プロセッサ、中央プロセッサ、グラフィックプロセッサ、デジタル信号プロセッサ、プログラム可能論理回路、量子計算に基づくデータ処理論理回路などであってもよく、これらに限定されない。
【0168】
以上の実施例の各技術的特徴は任意に組み合わせることができ、説明を簡潔にするために、上記実施例における各技術的特徴の可能な全ての組み合わせについては説明しなかったが、これらの技術的特徴の組み合わせに矛盾がない限り、本明細書に記載された範囲と考えるべきである。
【0169】
上記の実施例は、本発明の幾つかの実施例のみを示しており、その説明はより具体的で詳細であるが、従って、本発明の特許範囲を限定するものとは解釈されない。なお、当業者であれば、本発明の概念から逸脱することなく、本発明の範囲内で幾つかの変形及び改良を行うことができる。従って、本発明の保護範囲は、添付の特許請求の範囲に従うものとする。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
【国際調査報告】