(57)【要約】【課題】プログラマブル及び／又は大規模並列プロセッサーあるいはその他のデバイスにおいて、効率的に計算能力を提供する。【解決手段】処理要素４００は、低精度ハイ・ダイナミック・レンジ(ＬＰＨＤＲ演算)の数値に対して演算処理(例えば、必須ではないが、加算、乗算、減算、そして除算の内の1つまたはそれ以上を含む処理)を実行するために設計された処理要素を備える。プロセッサーあるいはその他のデバイスの中にあるＬＰＨＤＲ演算要素の数は、もし演算要素が存在するならば、演算要素の数をはるかに超える。演算要素は、従来の精度(３２ビットあるいは６４ビットの浮動小数点演算のような精度)で、ハイ・ダイナミック・レンジの演算を行う。【選択図】図４
2020074074.tif 000002
【特許請求の範囲】
【請求項１】
複数の低精度ハイ・ダイナミック・レンジ（ＬＰＨＤＲ）演算実行ユニットと、
少なくとも一の高精度演算実行ユニットであって、前記少なくとも一の高精度演算実行ユニットにより実行される計算の精度は、前記複数のＬＰＨＤＲ演算実行ユニットにより実行される計算の精度より高い、前記少なくとも一の高精度演算実行ユニットと、
前記複数のＬＰＨＤＲ演算実行ユニット及び前記少なくとも一の高精度演算実行ユニットが方法を実行するように制御する手段と、を備え、
前記方法は、
入力として複数のｅｘａｍｐｌｅベクトル及び一のｔｅｓｔベクトルを受信することと、
前記複数のｅｘａｍｐｌｅベクトルを記憶することと、
前記複数のＬＰＨＤＲ演算実行ユニットを用いて、
前記複数のｅｘａｍｐｌｅベクトルの中で前記一のｔｅｓｔベクトルに最も近い第１ｅｘａｍｐｌｅベクトルを識別させ、
前記第１ｅｘａｍｐｌｅベクトルの識別子を記憶させ、
前記複数のｅｘａｍｐｌｅベクトルの中で前記一のｔｅｓｔベクトルに２番目に近い第２ｅｘａｍｐｌｅベクトルを識別させ、
前記第２ｅｘａｍｐｌｅベクトルの識別子を記憶させることと、
前記少なくとも一の高精度演算実行ユニットを用いて、
前記ｔｅｓｔベクトル及び前記第１ｅｘａｍｐｌｅベクトルの間の第１距離を計算させ、
前記ｔｅｓｔベクトル及び前記第２ｅｘａｍｐｌｅベクトルの間の第２距離を計算させ、
前記第１距離及び前記第２距離のうち小さい方を識別させ、
前記第１ｅｘａｍｐｌｅベクトル及び前記第２ｅｘａｍｐｌｅベクトルのうちから、前記第１距離及び前記第２距離のうち小さい方に関連付けられたｅｘａｍｐｌｅベクトルを識別させ、
前記第１距離及び前記第２距離のうち小さい方に関連付けられた前記ｅｘａｍｐｌｅベクトルを出力させることと、を含む、
デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
早く計算する能力は、人類にとって極めて重要になってきている。  天候や気象状態の予測、医療分野(薬剤設計や断層撮影技術など)、国家防衛、地質学的調査、財務モデリング、インターネット検索、ネットワーク通信、多様な分野での科学的研究、そして新しいコンピュータ・ハードウェアのデザインにおいても大量の計算を迅速に処理する能力に依存するようになってきている。  複雑なナノ・スケールのシステムのコンピュータ支援設計や、見たり、聞いたり、理解したりするための消費者製品の開発などの分野においても更なる進歩のために、更に高度な計算能力を経済的に展開していく必要が生じるものと考えられる。
【０００２】
ゴードン・ムーアの将来予測、すなわち、1ドル当たりの計算性能は2年毎に2倍に向上していくであろうという予測、は30年にわたって有効であることが立証され、これはある種の形態で、今後も続いていくものと考えられる。  しかし、このような迅速な指数的な進歩にもかかわらず、現実には、シリコンによって利用可能な本来の計算能力は、ソフトウェアを利用可能にする速さよりもはるかに速い能力を有するまで成長している。  言い換えれば、コンピュータ・ハードウェアの理論上の計算能力が指数関数的に成長を遂げてきているとはいえ、ソフトウェアがハードウェアにアクセスするために必要となるインターフェースのために、計算を実行するためにソフトウェアがハードウェアを使用する能力が、ハードウェアの理論上の最大計算能力に近づく段階において、制限されてしまうということである。
【０００３】
約10億個のトランジスターを内蔵し、クロック周波数がほぼ1GHzの最新のシリコン・マイクロプロセッサー・チップについて考えてみる。  1回のサイクルで、そのチップはほぼ1つの有効な演算処理を稼働中のソフトウェアに配信する。  例えば、一つの値がレジスター間で移送され、別の値が加えられ、そして、乗算が完了する。  今日ではクロック速度が1000倍程度早くなってはいるものの、このことは、マイクロプロセッサー・チップが30年前にやっていたことと大きく異なるものではない。
【０００４】
実際のコンピュータは、物理的なデバイスとして構築されており、コンピュータのマシンが構築される基礎となる物理学は、しばしば複雑で興味深い作用を提供するものである。  例えば、シリコン金属酸化膜半導体電界効果トランジスター(シリコンMOSFETトラン
ジスター)は、指数処理のような、興味深い非線形処理を行う機能を有するデバイスである。  2つのワイヤーの接点では電流が加算される。  もし適切な形態に設定すれば、10億個のトランジスターとワイヤーは、基本的なコンポーネントの2、3の伝播遅延の間(設計全体が従来から行われているデジタル設計であるならば、「サイクル」と呼ばれる)に、計算に関係する10億の処理のかなりの割合を実行することができる。  そして、今日のCPUチップは、ソフトウェアが、可能性のある10億の処理のかなりの割合を実行するのではなく、単に、サイクル毎に2、3の上述したような処理を実行できるようにするために、10億個のトランジスターを使用している。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の実施例は、プロセッサーあるいはその他のデバイスに関するものであり、プログラマブル及び/又は大規模並列処理プロセッサーおよびその他のデバイスに関係する。
そして、このプロセッサーあるいはその他のデバイスは、低精度ハイ・ダイナミック・レンジ(LPHDR演算)における数値を取り扱う演算処理(例えば、1又は2以上の加算、乗算、減算、除算を必ず含むものではないが、これらを含む可能性がある演算処理)を実行するように設計された処理要素を含む。
かかるプロセッサーあるいはその他のデバイスは、例えば、単一のチップに実装されている。  単一のチップに実装されているか否かにかかわらず、本発明のある実施例におけるプロセッサーあるいはその他のデバイスで使用されるLPHDR演算要素の数は、従来の精度を有するハイ・ダイナミック・レンジの演算(32ビットまたは64ビット浮動小数点演算のような演算)を実行するために設計された当該プロセッサーあるいはその他のデバイスで使用されている演算要素の数をはるかに超えるようになっている。
【０００６】
ある実施例においては、「低精度」演算要素は、少なくとも0.1%(1%の10分の1)の頻度で正しい結果とは異なる結果を生じさせるような演算処理を実行する。 これは、広く採用されているIEEE  754  単精度浮動小数点の標準規格に比べるとかなり悪い精度となっている。  本発明におけるプログラマブル・プロセッサーの実施例においては、このような異常な多数の演算エラーが生じても、適切に機能するアルゴリズムを使用してプログラミングが行われる。
また、ある実施例においては、処理要素はインプットを処理し、そして/又は、少なくとも100万分の1から100万までの広がりを有するレンジのアウトプットを出力する能力を有するという意味で、処理要素は「ハイ・ダイナミック・レンジ」を有している。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施例であるSIMDプロセッサーの全体設計を例示するものである。
【図２】本発明の一実施例であるSIMDプロセッサーの処理要素アレイを例示するものである。
【図３】本発明の一実施例であって、プロセッサーの処理要素アレイにおいて、処理要素がどのようにして当該プロセッサーの他の部分とデータ通信するのかを例示するものである。
【図４】本発明の一実施例である処理要素の設計を例示するものである。
【図５】本発明の一実施例であるLPHDRデータのワード・フォーマットを例示するものである。
【図６】本発明の一実施例であって、LPHDR演算ユニットの設計を例示するものである。
【発明を実施するための最良の形態】
【０００８】
上述したように、今日のCPUチップは、内蔵するトランジスターを効率よく使っていない。  例えば、10億個のトランジスターを内蔵する従来のCPUチップでは、各クロックサイクル毎に、ソフトウェアがわずか数回の処理を実行できるようになっているに過ぎない。  このことは極めて非効率なことであるが、当該技術の分野の通常の知識を有する者は、有効な理由であるとして幅広く受け入れられてきた理由により、このような手法でCPUを設計している。  例えば、ここで述べた設計手法は、初期設計におけるソフトウェアの適合性にかかる要求事項(これは、しばしば本質的な要求事項である)を満たすものであった。  さらに、この設計手法では極めて高い精度を実現するものであり、典型的には32ビットあるいは64ビット長の整数を使って正確な演算を行い、そして、32ビットと64ビットの浮動小数点数を使ったかなり正確で、広く標準化された演算を行うようになっている。
多くのアプリケーションでは、この種の精度は必須のものである。 その結果、従来のCPUでは、演算処理を実行するために100万個のオーダーのトランジスターを使って、典型的には上述した精度を提供できるように設計されている。
【０００９】
しかしながら、精度に関しては感度が高くなく、トランジスター１個当たりのアプリケーションパフォーマンスという形態で、極めて大きな利得を得ることができる、経済的に重要なアプリケーションは多くある。  そして、100万個のトランジスターが本来備えている計算能力のかなりの割合を引き出す能力に基づき、この極めて大きな利得を得るのである。  汎用コンピュータで用いられている現状のアーキテクチャーは、この能力を実現させることができないでいるのである。
【００１０】
典型的なマイクロプロセッサーのような従来のコンピュータの弱点に関する理由から、より高度な性能を実現するために、別の種類のコンピュータが開発されてきている。  このようなマシンには、単一命令ストリーム/複数データストリーム(SIMD:  Single Instruction Stream/Multiple Data Stream)の設計手法、複数命令ストリーム/複数データストリーム(MIMD:  Multiple Instruction Stream/Multiple Data Stream)の設計手法、フィールド・プログラマブル・ゲート・アレイ(FPGAs:  Field Programmable Gate Arrays)のような再構成可能なアーキテクチャー、そして、汎用コンピュータに応用された場合には、単一命令ストリーム/複数スレッド(SIMT: Single Instruction Stream /Multiple Thread)の設計手法として見ることができるグラフィック・プロセッシング・ユニット(GPUs:  Graphics Processing Units)の設計手法が含まれている。
【００１１】
SIMDマシンは、データの集合体の処理を行う命令を備えたシーケンシャル・プログラムによって動作するようになっている。  SIMDマシンには二つの主要な形式のものがあり、それはベクター・プロセッサーとアレイ・プロセッサーである。  ベクター・プロセッサーは、処理要素(あるいは処理要素の小さな集合体)を通じてデータを流す。  データストリームの各コンポーネントは同様に処理される。  ベクター・マシンでは、多くの命令フェッチ/デコード処理(メモリから命令を持ってくること/命令を解読すること)を省略すること、および処理のクロック・スピードが上がるようにプロセッサーに連続送信する(パイプライン方式)ことにより、高速化を達成する。
【００１２】
アレイ・プロセッサーは、処理要素(PEs)のグリッドにデータを分配する。 各処理要素は、独自のメモリを備えている。  命令は中央制御装置から処理要素に、シーケンシャルに送信される。  各処理要素(PE)は、各処理要素が持つローカル・データに対して送信された命令を実行する(しばしば、特定のサイクルでは、「アイドリング」というオプシ ョンを取り得る)。  アレイ・プロセッサーでは、シリコンを効率的に使用することにより高速化を達成する。  すなわち、アレイ・プロセッサーでは、多くの小さくてシンプルな実行ユニットを平行に動作させるために、1つだけの命令フェッチ/デコード・ユニットを使用している。
【００１３】
アレイ・プロセッサーは、幅広いビット幅、たとえば1、4、8ビット幅あるいはそれ以上のビット幅を有する固定小数点演算と、浮動小数点演算を使用して構築されてきた。  ビット幅が小さければ処理要素を小さくすることができ、ほとんどの処理要素をコンピュータ内に収納できるようになるが、従来形式の演算を行うためには、多くの処理を順番に実行する必要が生じる。  ビット幅が広くなれば、従来形式の演算処理を単一のサイクルで完結できる。 実際のところ、ビット幅を広げることは望ましい。  1ビット幅の処理要素を使ったコネクション・マシン-1やGoodyear超並列プロセッサーのように、もともと小さなビット幅で設計されているマシンでは、高速演算をうまくサポートするために、より広いデータ・パスを志向して開発が行われ、32ビット浮動小数点演算用ハードウェアを備えたコネクション・マシン-2や、Goodyearマシンの後を継いだ計算機であって、MasPar-1では4ビットの処理要素を用い、MasPar-2では32ビットの処理要素を用いた超並列計算機MasParのようなマシンが作り出された。
【００１４】
また、アレイ・プロセッサーは、数値のアナログ表現を行い、計算を行う際にアナログ回路を使用するために設計されたものである。  SCAMPはこのようなマシンに該当する。
これらのマシンは、低精度の演算を行うものであり、このマシンで行われる各処理の結果には、数パーセント程度のエラーが生じる。  また、これらのマシンは、計算過程においてノイズを生じさせるので、計算を繰り返すことはできない。  更に、これらのマシンでは、狭い範囲の値のみ扱うものであり、例えば、32または64ビット浮動小数点演算のハイ・ダイナミック・レンジを提供するというよりは、むしろ8ビット固定小数点数値に対応するものである。  このような制約から、SCAMPは汎用コンピュータを指向したものではなく、画像処理および初期の生物学的視覚プロセスにおけるモデリング用として設計され、使用されているものである。  このようなアプリケーション分野では、ハードウェアにおける演算処理のフルレンジ(全項目)を必要とするものではなく、例えば、SCAMPは、その設計の中から一般的な除算と乗算を省いている。
【００１５】
1980年代においては、SIMDマシンはポピュラーなものであったが、マイクロプロセッサーの価格/性能が向上したので、設計者は、通信マイクロプロセッサーの大きな集合体からなるマシンを構築し始めた。  MIMDマシンは、高速で、そのコンポーネントであるマイクロプロセッサーに匹敵する価格/性能を有するが、MIMDマシンは、そこで使用されてい
るソフトウェアに対して相対的に低いトランジスター1個当たりの計算性能しか実現できないという点において、そのコンポーネントと同程度の非効率さを有している。
【００１６】
フィールド・プログラマブル・ゲート・アレイ(FPGAs)は、汎用デジタル要素の大きなグリッドを備えた集積回路であり、デジタル要素間のワイヤリングは再構築可能となっている。  このデジタル要素は、もとは「AND」と「OR」ゲートのようなシングル・デジタル ・ゲートであるが、ブール関数によって、例えば、6入力1出力のマップ(map)にプログラミングできる大きな要素として開発された。  このアーキテクチャーは、FPGAが外部ソースから幅広い種類のデジタル計算を実行できるように構成されている。  そしてこのデジタル計算は、デバイスがCPUの計算を促進するためのコプロセッサー(副処理装置)として使用できるようにするものである。
しかし、整数、と特に浮動小数点数に対する乗算や除算のような演算処理には、多くのゲートが必要になり、FPGAの汎用のリソースの大部分を使い切ってしまうことになる。  このような理由から、最新のFPGAsでは、FPGAsのかなりの比率の領域を、数ダースあるいは数百の乗算ブロックを提供するために割り当てている。  そしてこの数ダースあるいは数百の乗算ブロックは、乗算を必要とする計算のために、汎用のリソースの代わりに使用できるようになっている。  これらの乗算ブロックは、典型的には18ビットあるいはそれ以上の幅の整数の乗算を実行するものであって、多くのトランジスターを使用するものである。  そして、これらの乗算ブロックは、汎用CPUの一部として機能する乗算回路と同様である。
【００１７】
既存のフィールド・プログラマブル・アナログ・アレイ(FPAAs)は、FPGAsに類似しているが、FPAAsの設定可能な要素はアナログ処理を行うようになっている。  一般に、このようなデバイスは、神経回路のモデル化を助けるような、信号処理を行うためのものである。  FPAAsは比較的低精度であって、比較的低いダイナミック・レンジを有しており、計算過程でノイズを生じるものである。  FPAAsは、汎用コンピュータとして、あるいは汎用コンピュータに使用されることを意図して設計されたものではない。  例えば、当該技術の分野の通常の知識を有する者には、FPAAsは、ハイ・パフォーマンスのデジタル・コンピュータ上で使用されている、浮動小数点演算を使用した複雑な多種のアルゴリズムを実行することができるマシンとしては見られてこなかった。
【００１８】
最後に、グラフィック・プロセッシング・ユニット(GPUs)には、パーソナル・コンピュータ用として高速のグラフィックス能力を提供するために開発されたさまざまな並列プロセッサーがある。  GPUsは、特定のタスクにおいて極めてハイ・パフォーマンスな性能を発揮する標準的な浮動小数点計算能力を提供している。  GPUsの計算モデルは、往々にして、数千からなるほぼ同一の計算スレッドに基づいている(SIMT)。  その点について、それはSIMDに似た内部計算エンジンの集合体によって実行され、各エンジンは、遅い外部DRAMメモリがデータを提供する作業を実行するために、結果の出力先を決め、あるいは出力先を変更する。  標準的な浮動小数点演算を実行するその他のマシンのように、GPUsは、その演算のために多くのトランジスターを使用している。  GPUsは、上述したような意味において、汎用のCPUsと同様に、これらのトランジスターを無駄に使っている。
【００１９】
あるGPUsは16ビット浮動小数点数値をサポートしている(往々にして、「ハーフ」フォーマットと呼ばれる)。  NVIDIAやAMD/ATIのような現在のGPU製造業者は、通常の32ビットのRGBAフォーマットよりも高度なダイナミック・レンジを備えたレンダリング画像にとって、この能力は有用であると述べている。  そして、32ビットのRGBAフォーマットは色毎に8ビットの固定小数点データを使用し、色のコンポーネントごとに32ビットの浮動小数点を使用することに対して、使用領域を節約している。  特殊効果映画ファームであるインダストリアル・ライト・アンド・マジック社(ILM)は、彼らのOpenEXR標準において独自に同一の画像を定義した。  そして、ILM社は、ハイ・ダイナミック・レンジ(HDR)画像ファイル・フォーマットは、コンピュータ画像アプリケーションの分野で使用するために、インダストリアル・ライト・アンド・マジック社(ILM)によって開発されたものであると述べている。  Wikipedia(2008年後半)は、16ビット浮動小数点画像について以下のように述べている。  すなわち、「このフォーマットは、OpenEXR、OpenGL、D3DXを含むいくつかのコンピュータ・グラフィックス環境において使用されている。  8ビットまたは16ビット2進整数に対する利点は、拡大されたダイナミック・レンジによってハイライト部分と影の部分においてより詳細に保存できるということである。  32ビット単精度2進数フォーマットに対する利点は、記憶容量およびバンド幅が半分になることである。」
【００２０】
グラフィックス・プロセッサーが16ビット浮動小数点をサポートしているとき、そのサポートは32ビット浮動小数点を一緒にサポートするものであり、さらには、64ビット浮動小数点をも一緒にサポートするものである。  すなわち、16ビット浮動小数点フォーマットは、それを必要とするアプリケーションでサポートされ、従来のグラフィックス・アプリケーションやいわゆる汎用GPUアプリケーションにとっても必要であると考えられているため、さらに高精度のフォーマットもサポートされている。  従って、既存のGPUsでは、実質的なリソースを32ビット演算(さらには64ビット演算)に充てており、上述したような意味においてトランジスターの浪費を行っている。
【００２１】
上述した種々のアーキテクチャーの全ては、従来のプロセッサーの設計で利用できる性能よりも更に高度な性能をシリコンから引き出すために行われてきた試みである。  しかし、従来のプロセッサーの設計者は、マシンの性能を向上させようとすると莫大な数のトランジスターを使用する必要があり、苦しんできていた。  このようなマシンは、歴史的および経済的に、インテルx86命令セットのような既存の大きな命令セットをサポートするために、往々にして必要になる場合がある。  トランジスターの数を2倍にしても性能を2倍にすることはできないという、収穫逓減の法則に基づく理由から、これは困難な問題である。  このような設計者の苦悩の一面は、演算処理の精度を向上させることであった。  これは、トランジスターは十分であり、プロセッサーがもともと長い数値(例えば64ビットの数値)をサポートしていたのであれば、あるアプリケーションでは顕著にスピードアップを図れたからである。  8ビットから１６ビット、32ビット、64ビットまでの固定小数点数の精度の向上によって、及び32ビットから64ビット、あるときには128ビットまでの浮動小数点数の精度の向上によって、プログラマーは高精度という点について考えるようになり、コンピュータ・プロセッサーというものは、かかる精度を提供するものだという前提に立って、アルゴリズムの開発を行うようになってきている。  なぜなら、精度はシリコン・チップの新しい世代の全てであり、何ら拘束されるものではないからである。
【００２２】
本発明の実施例は、上述した方法とは根本的に異なったアプローチによって効率的に計算能力を提供するものである。  特に、本発明の実施例は、コンピュータ・プロセッサーあるいはその他のデバイスに係るものであって、それは、計算(例えば、演算処理)を実行するために低精度ハイ・ダイナミック・レンジ(LPHDR)の処理要素を使用するものである。
【００２３】
LPHDR演算の一種では、約0.1%の精度であって、100万分の1から100万までの値を表す。
もし、これらの値が表わされ、浮動小数点演算の方法により取り扱われるならば、これらの数は、10ビット+符号ビットを超えない2進法の仮数と、少なくとも5ビット+符号ビットの2進法の指数を有するようになる。  しかし、このような浮動小数点数の乗算や除算を行う回路は比較的大きなものになってしまう。  別の実施例の一つの例は、浮動小数点数の対数表示を使用するものである。  このようなアプローチでは、浮動小数点数を表示するために必要となるビット数は同じであるが、乗算や除算は、対数表示の加算、および減算としてそれぞれ実行される。  加算や減算は、以下に説明するように効率的に実行することができる。  その結果、演算回路の領域を比較的小さくすることができ、そして多くの計算要素をシリコン上の与えられた領域の中に配置することが可能となる。  このことは、マシンが単位時間当たり、あるいは単位電力当たり、より多くの処理を実行することができることを意味する。  そしてこのことは、マシンがLPHDRのフレームワーク内で表現できる計算の利点を享受できるということを意味する。
【００２４】
別の実施例は、アナログ表現とプロセッシング・メカニズムを利用するものである。  LPHDR演算のアナログ演算の実行は、デジタル演算の実行よりも優れたものになるという可能性を有している。  なぜならば、アナログ演算は、デバイスの挙動のデジタル的挙動を示す部分のみを利用するのではなく、トランジスターあるいはその他の物理的なデバイスが本来備えているアナログ的物理挙動を利用しようとするものだからである。  このように、デバイスが本来備えている能力の全体を利用することは、LPHDR演算を実行するために必要なメカニズムを小規模なものにすることができる。  近年、シリコン回路の技術分野では、アナログ的な手法は、デジタル手法によって置き換えられてきている。  これは、アナログ設計に比べ、デジタル設計の方が容易であるという理由によるものである。  また、アナログ技術に比べデジタル技術は継続的に急激な拡張を遂げてきた(ムーアの法則)という理由もある。  特に、ディープ・サブミクロンの領域では、大きな寸法を有する前世代のトランジスターのように、アナログ・トランジスターはもはや機能しない。
良く知られている挙動の近年におけるこのような変化は、アナログ設計をさらに難しくしている。
しかし、デジタルトランジスターは、実際のところ、デジタル的手法で使用されているアナログ・トランジスターであり、デジタル回路は、実際のところ、完全に「ON」の状態と、完全に「OFF」の状態に、トランジスターをスイッチングするように設計されたものである。  デジタル技術の拡張は継続するが、このようにトランジスターを使用することは、アナログ挙動の現実に直面し始めることになる。  デジタル的使用方法におけるトランジスターの拡張は、行き詰るか、あるいは、デジタル設計者はアナログの問題を認識し、アナログの問題を取り扱うことが必要になると考えられている。  このような理由のために、LPHDR演算におけるデジタル的な実施例はもはや、容易であって、信頼でき、かつ拡張可能なものとは言えない。  そして、LPHDR演算におけるアナログ的な実施例は、商業上のアーキテクチャーとして優位に立つようになる可能性がある。
【００２５】
LPHDR処理要素は、比較的小さいので、単一のプロセッサーあるいはその他のデバイスに、非常に多数のLPHDR処理要素を収納することができ、かつ互いに並行処理でき、そしてその結果、大規模並列処理LPHDRプロセッサーまたはその他のデバイスを構成することができる。  このようなプロセッサーやその他のデバイスが、当該技術分野における通常の技術常識を有するものによって、汎用的な計算を行う手段として説明されたり、実際に使用されたりしたことはなかった。  これには少なくとも2つの理由がある。  一つは、当業者の間では、以下のことが広くに考えられていた。  すなわち、大規模並列処理が行われるか否かにかかわらず、LPHDR計算、特に大量のLPHDR計算は、中程度の汎用計算用の回路基板として実用的でないということである。  二つ目には、大量、高精度計算はコンパクトな計算処理ユニットによって処理することができるので、マシン内にある処理要素間、マシンへの入力、そしてマシンの外部のバンド幅を増加させることなく、単一チップあるいは単一マシン上で大量、高精度計算を行うことは有用ではない、と当業者の間で広く考えられていた。  なぜならば、計算はワイヤリングによって制限を受け、計算はコストをかけずに実行することができると考えることができるからである。
【００２６】
単一チップあるいは大規模並列処理マシン上で大量の計算を行うことは有用ではなく、大量のLPHDR演算は却って悪い結果を生むものである、という考え方にもかかわらず、ここで開示する本発明の実施例では、大規模並列LPHDR設計は実際には有用であり、少なくとも数種類のアプリケーションにおいては顕著な実際的な利点を提供できることを実証している。
【００２７】
結論として、最新のデジタル演算システムは、高精度演算を提供することができるが、この高精度のためにコスト高になる。  低精度の乗算を実行するためには、わずかな数のトランジスターしか必要としていないにもかかわらず、最新の倍精度浮動小数点乗算器は、100万オーダーのトランジスターを必要とする。  最新のアプリケーションは高精度処理を必要としている、ということが当業者の間では広く信じられているにもかかわらず、実際には、ある種の有用なアルゴリズムはもっと低精度であっても適切に機能する。
その結果、このようなアルゴリズムは、本発明の実施例を適用したプロセッサーまたはその他のデバイスによって実行することができる。  そして、このことは乗算のためのわずかなトランジスターと、加算のためのワイヤー接点を使用するという最終目標の実現に近づくものである。  更に、このことは、比較的少量の物理的リソース(単一のシリコン・チップのようなもの)によって、大規模並列演算を可能とするものである。  ある専門分野に特化したタスクは、低精度でも機能するが、汎用コンピュータにおいて今日典型的に実行されているような比較的汎用的な計算は、低精度でも実施できるものであるということは、自明なことではなく、実際には当業者からは明らかに誤った考え方であると見られてきた。
しかし、実際のところ、ある種の有用で、重要なアルゴリズムは、大規模並列計算のフレームワークにおいて、32ビット精度以下であっても適切に機能させることができる。
そして、本発明のある実施例では、そのようなアルゴリズムをサポートしており、したが って、トランジスターを効率的に使用するようになっている。  その結果、従来のコンピ ュータに比較して、スピード、消費電力、及び/又はコストを向上させている。
【００２８】
以下に、本発明の実施例を適用した種々の計算デバイスについて説明する。  ここで説明する実施例のいくつかは、SIMDコンピュータ・アーキテクチャーを例示するものである。  MIMDアーキテクチャー、プログラマブル・アレイ・アーキテクチャー(FPGAsやFPAAs
など)、あるいはGPU/SIMTアーキテクチャーなどその他のアーキテクチャーを使用することもできる。  ここで開示する技術は、例えば、前述したような既存のアーキテクチャーを備えたプロセッサー又はその他のデバイスを使用し、ここで開示するいずれかの方法で使用されているLPHDR演算ユニットで、プロセッサー又はその他のデバイスに収納されている特定のあるいは全ての既存の演算ユニットを置き換えるか、増補することによって、実行することができる。
しかし、本発明の実施例に従って実施されるデバイスは、既存のプロセッサーの設計をそのまま使用してスタートする必要はかならずしもなく、まさにここで述べたアーキテクチャーあるいはその他のアーキテクチャーの中にLPHDR演算ユニットを含めるために、本発明の実施例に従って実施されるデバイスを最初から設計するようにしても良い。
【００２９】
例えば、本発明の実施例は、特殊なSIMDコンピュータである、アレイ・プロセッサーのアーキテクチャーを使用して実施することもできる。  科学文献や商業文献に開示されているアレイ・プロセッサーには多くの種類のものがあり、かつ特殊なものもある。  例示するならば、イリアック4(Illiac 4)、Connection Machine 1 and 2、Goodyear MPP 、MasPar等のコンピュータがある。
【００３０】
しかし、本発明の実施例は、SIMDコンピュータとして実施する必要は必ずしもない。  例えば、本発明の実施例は、FPGAs、FPAAs、あるいは一群の処理要素に柔軟な接続性を提供する関連アーキテクチャーとして実施するようにしても良い。  例えば、本発明の実施例は、GPU/SIMTs、MIMDs、その他のものとして実施するようにしても良い。  例えば、本発明の実施例は、従来のアーキテクチャーに比べ、少ないリソース(トランジスターの数や体積)を使って計算するために、LPHDR演算処理要素を使用したどんな種類のマシンとしても実施することができる。  更に、本発明の実施例において言及する「処理要素」は、LPHDR処理を行うものであるか否かは別として、いずれかの種類の演算実行部としてより一般的に解釈すべきである。
【００３１】
SIMDコンピューティング・システム100の例を図1に示す。  このコンピューティング・システムは、多数の処理要素(PEs)の集合体  104を含んでいる。  このコンピューティング・システムは、往々にして、コントロール・ユニット(CU)  106、I/Oユニット(IOU)  108、種々の周辺デバイス  110、そしてホスト・コンピュータ  102を備えている。
処理要素(PEs)の集合体  104は、2次元的な配列、アレイ、グリッド、その他の特定の
レイアウトをとる必要は必ずしもないが、ここでは「処理要素アレイ」(PEA)  104と呼ぶ。  あるマシンでは、Goodyear MPPの「ステージング・メモリ」と呼ばれる追加的メモリ・システムのような、追加的なコンポーネントを備えている。  しかし、このような追加的コンポーネントは、コンピュータにとって本質的なものではなく、本発明の実施例を理解するために必要なものでもない。  したがって、説明を分かりやすくするために、ここでは、このような追加的コンポーネントは、省略することにする。
本発明の一つの実施例は、図1に示すようなSIMDコンピューティング・システムであり、本明細書における用語を使えば、処理要素アレイ(PEA)  104中における一つ又はそれ以上(例えば、全て)のPEsはLPHDR処理要素になる。
【００３２】
ホスト・コンピュータ102はコンピューティング・システム100の全体制御を行う責任を負っている。  ホスト・コンピュータ102は従来タイプのユニ・プロセッサーであり、シリアル(あるいはほとんどシリアル)な演算を行うものである。  もちろん、ホスト・コンピュータ102は、いろんな種類の並列処理を含む更に複雑な構造を備えるようにすることもできる。  実際、単一のマシンにおいて、複数の計算アーキテクチャーを組み合わせた異機種環境の計算システムを採用することは、本発明の実施例にとっては好ましい使用方法である。
【００３３】
ホスト・コンピュータ102の目的は、処理要素アレイ(PEA)  104に、有用な方法で、大量の計算を実行させることである。  ホスト・コンピュータ102は、PEsに、典型的には各PEに局所的に記憶されたデータに対する計算を、互いに並列的に実行させることにより、大量の計算を実行させる。  例えば、多数のPEsが存在するときには、各単位時間当たりに、大量の計算が実行される。
【００３４】
処理要素アレイ(PEA)  104中のPEsは、ホスト・コンピュータ102が実行する計算と同様な速度で、個々の計算をラフに行うことができるようになっている。  このことは、ホスト・コンピュータ102又は処理要素アレイ(PEA)  104の最小タイム・ステップと同じ細かいタイム・スケールで、ホスト・コンピュータ102が処理要素アレイ(PEA)  104を制御するように試みることは非効率であることを意味するものである。(この最小タイム・ステ ップは、従来のデジタル設計におけるクロック周期に相当する。)  このような理由のために、特化したコントロール・ユニット(CU)  106をアーキテクチャーの中に含めるようにしても良い。  コントロール・ユニット(CU)  106の主要タスクは、命令メモリからの命令を回収し復号することであり、このことは、概念的にはコントロール・ユニット(CU)  106の役割であり、部分的に復号した命令を処理要素アレイ(PEA)  104の全てのPEsに発信する。  (このことは、コントロール・ユニット(CU)  106のソフトウェアによって、全てのPEsに対してほぼ同時に生じる出来事として観察するようにしても良い。  そして、それは文字通りに同期したものである必要はない。  実際のところ、複数の命令を異なった実行段階に、処理要素アレイ(PEA)  104全体に亘って波面が伝播するように、同時に伝播させるような、同期させた設計にすることは効率的である。)
【００３５】
コントロール・ユニット(CU)  106を含む設計では、ホスト・コンピュータ102は、典型的には、処理要素アレイ(PEA)  104に対する命令(プログラム)をコントロール・ユニット命令メモリ(図1には図示せず)にロードする。  そして、コントロール・ユニット(CU)  106に対して、プログラムを解読し、処理要素アレイ(PEA)  104に命令に従った計算を実行させる。  例えば、このプログラムは、PEs内およびPEs間におけるデータの移動、論理的処理、演算処理等、およびコントロール・ユニット(CU)  106内での制御の流れ処理と一緒に類似の処理を行うための、その他の命令を備えた、一般的な機械言語プログラムに類似したものであっても良い。  従って、コントロール・ユニット(CU)  106は典型的なタイプのプログラムを実行することができるが、処理要素アレイ(PEA)  104に対して大規模な並列処理命令を発生させる能力をも有している。
【００３６】
コントロール・ユニット(CU)  106および処理要素アレイ(PEA)  104の中へデータを送り、そしてこれらからデータを取り出すために、I/Oユニット(IOU)  108がコントロール・ユニット(CU)  106および処理要素アレイ(PEA)  104とホスト・コンピュータ102、ホスト・コンピュータ・メモリ(図1には図示せず)、外部記憶装置(例えばディスク・ドライブ)や計算結果を可視化するためのディスプレイ装置や特別な広いバンド幅を有する入力装置(例えば、ビジョン・センサー)のようなコンピュータ・システムの周辺デバイス  110の間のインターフェースをとるようにしても良い。  ホスト・コンピュータ  102よりもはるかに速くデータを処理できる処理要素アレイ(PEA)  104の能力は、データ移送のある部分をホスト・コンピュータ  102をバイパスして実行できるようにするために、I/Oユニット(IOU)  108にとって有用になる。  更にホスト・コンピュータ 102は周辺デバイス  110と通信するための独自の経路を有するようにしても良い。
【００３７】
図1に示す特定の実施例は、単に例示のために示したものであり、本発明を限定するためのものではない。  例えば、代替的なものとして、コントロール・ユニット(CU)  106によって実行される機能は、コントロール・ユニット(CU)  106を省略してホスト・コンピュータ  102によって代行させることもできる。  コントロール・ユニット(CU)  106は、処理要素アレイ(PEA)  104から離れたハードウェア(例えば、チップから外れたハードウェア)として設置することもできるし、あるいはコントロール・ユニット(CU)  106は、処理要素アレイ(PEA)  104の近く(例えば、同一チップ内)に配置することもできる。
I/Oは、I/Oユニット(IOU)  108を省略し、コントロール・ユニット(CU)  106を経由した経路とすることもできるし、図示するように、別途設けたI/Oユニット(IOU)  108を経由するようにすることもできる。  更に、ホスト・コンピュータ  102はオプションであって、例えば、コントロール・ユニット(CU)  106がCPUを備えるようにしても良いし、あるいは、ホスト・コンピュータ  102によって実行できる機能を代替できる機能を有する
コンポーネントを備えるようにしても良い。  図1に示す周辺デバイス  110はオプションである。  図1に示す設計では、中間レベルの局所記憶装置を提供するGoodyear MPPの「ステージング・メモリ」のような特別のメモリを備えるようにすることができる。
例えば、このようなメモリは、処理要素アレイ(PEA)  104の処理要素(PEs)からメモリに比較的高速に並列アクセスするために、3D組立技術を使用したLPHDRチップに接続することができる。
【００３８】
処理要素アレイ(PEA)  104は、コントロール・ユニット(CU)  106やI/Oユニット(IOU)  108、あるいはその他の可能なメカニズムとの間で通信できるのに加え、処理要素アレイ(PEA)  104は、それ自身アレイ内でデータを移動させる手段を備えている。  例えば、処理要素アレイ(PEA)  104は、処理要素(PEs)から最も近くに隣り合う処理要素(PEs)に対してのみデータを移動させることができるように駆動することができる。  すなわち、データ移送のための距離は、もはや存在しない。  図2および3は、本発明の実施例を示すものであって、上述したようなアプローチを採用した実施例を示す。  ここでは、最も近くに隣り合う処理要素(PEs)は、4つの隣接した処理要素(PEs)であり、北、東、西、南の各処理要素(PEs)からなり、NEWS設計と呼んでいる。  例えば、図2は、処理要素アレイ(PEA)  104における処理要素(PEs)の小集合、すなわちPE  202、PE  204、PE  206、PE  208、およびPE  210を示したものである。  コントロール・ユニット(CU) 106がデータ移動命令を発すると、全ての処理要素(PEs)は、個々の処理要素(PEs)の最も近くに隣り合う特定の処理要素(PEs)からのデータにアクセスするか、あるいは個々の処理要素(PEs)の最も近くに隣り合う特定の処理要素(PEs)へ向けてデータを送るようになっている。  例えば、すべての処理要素(PE)が、西側に隣り合う処理要素(PE)内の特定のデータ数値にアクセスし、それを自らの局所記憶装置の中にコピーする。  アナログ処理の実施例のような、ある実施例では、このような種類のデータ移送は、コピーされた数値の劣化が生じることになる。
【００３９】
図3は、I/Oユニット(IOU)  108とのデータ接続を備えた処理要素(PE)  302を示したものである。  処理要素(PE)  302は、北側で処理要素(PE)  304、東側で処理要素(PE)  306、南側で処理要素(PE)  308、西側で処理要素(PE)  310に接続されている。  しかし、処理要素アレイ(PEA)  104の内部からI/Oユニット(IOU)  108へ出ていく駆動信号は、通常、物理的に比較的大きな駆動回路あるいはアナログ・メカニズムを必要とする。
全ての処理要素(PE)において、このようなものを備えることは、ハードウェアの実行技術上の利用できるリソースの多くの部分(VLSI領域のようなもの)を使い尽くすことになってしまう。  更に、全ての処理要素(PE)からI/Oユニット(IOU)  108への独立した接続を備えるようにすることは、多くの接続と長い接続を備えることを意味し、これもまた利用できるリソースの多くの部分を使い尽くすことになってしまう。  このような理由のため、処理要素(PEs)とI/Oユニット(IOU)  108の間の接続は、処理要素アレイ(PEA)  104の端にある処理要素(PEs)に限定するようにしても良い。  この場合、処理要素アレイ(PEA)  104からのデータを取得し、そして処理要素アレイ(PEA)  104へデータを送り出すために、データは、処理要素アレイ(PEA)  104の端にある処理要素(PEs)において読み書きされ、そして処理要素アレイ(PEA)  104の端にある処理要素(PEs)と処理要素アレイ(PEA)104の内部側にある処理要素(PEs)との間でデータを移動させるために、コントロール・ユニット(CU)  106の命令が実行される。  このような設計では、直接的な接続を利用して、I/Oユニット(IOU)  108から処理要素アレイ(PEA)  104の内側にあるいずれかの処理要素(PE)に向かってデータが送られていくようになっているが、I/Oユニット(IOU)  108によって読み込むことができる、処理要素アレイ(PEA)  104の端にある処理要素(PEs)にデータをおくるためには、コントロール・ユニット(CU)  106を利用してデータを読み込むようにしても良い。
【００４０】
コントロール・ユニット(CU)  106と処理要素アレイ(PEA)  104の間の接続には、類似のバリエーションがある。  ある設計では、命令をほぼ同時に全ての処理要素(PEs)に伝える能力を備えるようにしても良いが、別のアプローチでは、命令が徐々に伝播(例えば、離散的なタイム・ステップに基づくずらしによる)して処理要素アレイ(PEA)  104を横断し、処理要素(PEs)に命令が届くようにしている。  本発明の実施例として実行される、ある種のSIMD設計においては、処理要素アレイ(PE)  104の各処理要素(PE)のOR結線状態またはAND結線状態がコントロール・ユニット(CU)  106によって、ほぼ1命令時間の遅
れで、読み取ることができるようになっている機器を備えている。
【００４１】
このことについて良く研究された種々の論文が多数存在し、それらのうちのいくつかについては、本発明の実施例の中に取り込まれている。  例えば、8WAYのローカル・インターコネクトのようなインターコネクトを使用することもできる。  ローカル・インターコネクトでは、ディスタンス1であるもののほか、ディスタンス4や16となるもののように、ディスタンスのホップ数が種々の値をとるものが混在している。  外側の端部では、トラス(torus)やねじれトラス(twisted torus)のようなトポロジーを使用して接続することができる。  ローカル・インターコネクトに代えて、あるいはローカル・インターコネクトに加えて、ハイパーキューブ・デザインのような、更に複雑なグローバル・インターコネクトを使用することもできる。  更に、更に大きな処理要素アレイ(PEA)  104を作りだすために、処理要素アレイ(PEA)  104  (例えば、チップ)は、複製する(例えば、回路のボード上に敷設する)ことによって物理的に実装することができる。  PEAsのコンポーネントは必ずしもグリッド状の配列になっている必要はないが、複製することによってシンプルなグリッド状の配列あるいはその他の配列を形成することができる。
【００４２】
図4は、処理要素(PE)  400(これは処理要素アレイ(PEA)  104中の処理要素(PEs)の一つまたは複数の機能を果たすものである)の一設計例を示したものである。  処理要素(PE)  400はローカル・データを記憶する。  このローカル・データのための記憶容量は設計毎に顕著に変化するものである。  それは、処理要素(PE)  400を製造するために利用することができる実施技術に大きく依存している。  めったに変更されない数値(コンスタント:Constants)は、頻繁に変更される数値(レジスター)よりも使用場所が少なくて済む。  そして、ある種の設計では、レジスターよりも多くのコンスタントを提供するようにしている。  例えば、コンスタントに対しては単一のトランジスタ・セル群(例えば、フローティング・ゲート・フラッシュ・メモリ・セル)を使い、レジスターに対しては、複数のトランジスタ・セル群(例えば、6-トランジスタSRAMセル)を使ったデジタル回路の実施例がある。  アナログ回路の実施例では、この状況は往々にして逆転する。  この場合には、コンスタントの長期保存の安定性を確保するために、キャパシタンスに対する十分な領域が必要となる。  そして、係る実施例では、コンスタントよりもレジスターを多く備えるようになっている。  典型的には、各処理要素(PE)におけるレジスターおよびコンスタントに記憶される記憶容量は数10あるいは数100の演算値になるが、これらの記憶容量は設計者によって調整できるものである。  例えば、ある設計では、レジスターの記憶装置は備えているが、コンスタントの記憶装置は備えていない。  そして、ある設計では、各処理要素(PE)に記憶される数値は、数千あるいはそれ以上の多数の数値となる。このようなバリエーションの全ては、本発明の実施例に反映されている。
【００４３】
各処理要素(PE)は、各処理要素(PE)のローカル・データを処理する必要がある。  このため、処理要素(PE)  400の中には、データ・パス402a-i、ルーティング・メカニズム(マルチプレクサMUX  404のようなもの)、および論理処理と演算処理の結果を収集するためのコンポーネント(論理ユニット406及びLPHDR演算ユニット408のようなもの)が存在する。  LPHDR演算ユニット408は、本明細書で使用する用語である、LPHDR演算処理を行う。
処理要素(PE)  400によって受け取り、処理要素(PE)  400によって出力され、処理要素(PE)  400によって処理された入力、出力、および処理途中の数値は、例えば、数値を表す電気信号の形態をとる。
【００４４】
また、処理要素(PE)  400は、図4に示すマスク410として示す、一つまたはそれ以上のフラッグ・ビットを備えるようにしてもよい。  マスク410の目的は、いくつかの処理要素(PEs)を有効にし、コントロール・ユニット(CU)  106によって出された命令を無視するために、その処理要素(PEs)では特定のマスク・ビットがセットされる。  このようにすることによって、処理要素アレイ(PEA)  104の中の全ての処理要素(PEs)の通常のロック・ステップ動作のバリエーションを作り出すことができるようになっている。  例えば、コントロール・ユニット(CU)  106が、各処理要素(PE)が各処理要素(PE)のマスク410を、処理要素(PE)内の特定のレジスターが正であるか負であるかによってリセットしたりセットしたりする命令を出すことができる。  例えば、演算命令のような後続の命令には、マスク410がリセットされた処理要素(PEs)によってのみ命令が実行されるべきであるとの意味を持たせたビットを備えるようにすることができる。  その処理要素(PE)内の特定のレジスターが負であるかどうかによって、その組み合わせは、各処理要素(PE)において演算命令が条件付きで実行されるという効果を有するようになる。  従来のコンピュータの比較命令と同じように、マスクをセットし、そしてクリアためのメカニズムとしては、多くの設計上の選択肢がある。
【００４５】
処理要素(PEs)における処理は、コントロール・ユニット(CU)  106から受信した制御信号412a-dによって制御される。  これら4つの制御信号は図4に示されているが、これらは単なる例示であって、これらに限定されることを意味するものではない。  このメカニズムの詳細については示していないが、制御信号412a-dは、データ・パスに送るべき、処理要素(PE)  400内のレジスター・メモリの数値やコンスタント・メモリの数値、あるいは隣接する処理要素(PE)を特定する。  そしてこのような処理は、論理ユニット406や演算ユニット408やその他の処理メカニズムによって実行され、その結果はレジスターに記憶される。  そして制御信号412a-dは、セットやリセットの方法、およびマスク410を使用すること等を特定する。  これらのことについては、SIMDプロセッサーの文献に詳細に記述されている。
【００４６】
処理要素(PE)  400と処理要素アレイ(PEA)  104の設計に関するバリエーションには多くの可能性が存在すると共に、これらは全て本発明の範囲に包含される。  デジタルの処理要素(PEs)では、シフター、参照テーブル、その他上記文献にも記載されているような多くのその他のメカニズムを備えることができる。  アナログの処理要素(PEs)では、時間ベースの演算子、フィルター、グローバル・ブロートキャスト・信号を備えたコンパレータ、その他上記文献にも記載されているような多くのその他のメカニズムを備えることができる。  処理要素アレイ(PEA)  104は、デジタルの処理要素(PEs)に対しては、OR結線またはAND結線のようなグローバル・メカニズムを備え、アナログの処理要素(PEs)に対しては、SUM結線を備えることができる。  再度述べるが、デジタルおよびアナログのコンピュータ・アーキテクチャーに関する文献には多くのバリエーションが詳細に記載されている。
【００４７】
例えば、加算と乗算の他and/or以外のLPHDR処理をサポートすることもできる。  例えば、乗算と関数(1-X)だけを実行することができるマシンは、概算加算およびその他の演算処理に使用することができる。  LPHDR処理の集合体は、当該技術分野における通常の知識を有する者に周知の技術を使用して、加算、乗算、減算及び除算のようなLPHDR演算処理を概算するために使用される。
【００４８】
本発明のユニークな実施例の一つの観点として、処理要素(PEs)の中にLPHDR演算メカニズムが含まれている。  係るメカニズムの実施例について、以下に説明する。
【００４９】
LPHDR演算ユニット408に関する一つのデジタルの実施例では、デジタル(2進数)表現された数値が処理される。  あるデジタルの実施例では、これらの数値は対数表示される。  係る表現方式は対数システム(LNS)と呼ばれ、当業者には良く知られたシステムである。
【００５０】
対数システム(LNS)では、数値は、符号と指数によって表現される。  対数システム(LNS)では、対数に対する暗黙的な低が存在し、それはデジタルなハードウェアによって機能している場合には、典型的には2である。  本実施例では、2の低が例示として使用されている。  結果的に、数値Bは符号と低2の対数で表現され、数値bはその絶対値として表現される。  最大でも1%の表示誤差を有する数値では、変化し得る小数部が数値Bにおける約1%の変化に相当する十分な精度で表示される。  もし、分数が6ビットを使用して表現されるならば、その小数部を1だけ増減することは、数値Bに2の64乗根(ほぼ1.011の値をとる)を乗じたり、除したりすることに該当する。  このことは、本実施例では、数値は約1%の乗法誤差を持って表示される可能性があるということを意味する。  従って、この実施例では、小数部の表示に6ビットが割り当てられている。
【００５１】
更に、本実施例において処理される値の領域は、ハイ・ダイナミック・レンジを有している。  10億番目から更に10億までの絶対値を表すために、対数の整数部は10億の低を2とする正負の数値を表すことができる十分な長さでなければならない。  その対数は、約29.9である。  本実施例では、対数表示の整数部は、0から31の数値を表すために5ビットの長さになり、これで十分である。  その他に、指数部の符号ビットが必要になる。  負の対数は、2の補数表現を使用して表される。
【００５２】
対数システム(LNS)では、0の値は負の無限大になる。  この特別な値を正確に表現するために、表示方法を選択することができる。  しかし、演算回路によって使用されるリソースを最小化するために(例えば、領域を最小化するために)、本実施例では、0を負側の最も大きい数値、-32によって表示しており、これは2の補数ビット表現、「100000  000000」に対応し、約2.33E-10の値を意味するものである。
【００５３】
計算を実行するとき、処理が合理的な値を導き出すことができない状況が生じる場合がある。  例えば、非常に大きな二つの数値を掛け合わせたり、加えたりするときや、ゼロ(またはゼロに近い数値)で割り算を行うときのように、数値が大きすぎて選択したワード・フォーマットで表現することができないような場合である。  このような問題を解決するための共通的なアプローチとして、得られた値に、「数値ではない:Not A Number (NAN)」というマークを付すようにし、問題が発生して処理途中において「NAN」が生じたかどうか、あるいは入力のいずれかが「NAN」ではないかということを確認するようにしている。  本実施例では、以下に説明するようなアプローチを採用している。
【００５４】
図5は、本実施例で使用している数値を表現するためのワード・フォーマット500を示したものである。  このワード・フォーマット500では、1つのNANビット502aと、値の符号を与える1つのビット502bと、対数を表示する12ビット502c-eを備えている。  対数を表示するビットには、5ビットの整数部502dと、6ビットの小数部502eが備えられている。  負の対数を表現できるようにするために、対数を表示するビットには、対数の符号ビット502cが設けられており、これは2の補数形式で表現されている。  NANビット502aは計算された値に問題が生じた場合にセットされる。  図5に示すワード・フォーマット500は単なる例示であり、本発明の範囲を限定するものではない。  低精度であってハイ・ダイナミック・レンジである限りにおいては、ここで説明したものとは別のバリエーションを使用することも可能である。
【００５５】
図6は、図5で示した表示形式に対応する、デジタル形式のLPHDR演算ユニット408の例を示すものである。  LPHDR演算ユニット408は、二つのインプットA602aおよびB602bを受け取り、一つのアウトプット602cを出力する。  インプット602a-bとアウトプット602cは、例えば、図5に示す表示形式に従い、数値を表す電気信号の形態をとるようにすることができる。  そしてインプット602a-bとアウトプット602cは、LPHDR演算ユニット408のコンポーネントによって、LPHDR演算ユニット408の中で送信される真の信号である。  インプット602a-bとアウトプット602cの各々は、数値のビットとNANビットから成っている。 LPHDR演算ユニット408は、コントロール・ユニット(CU)  106から送られてきた制御信号412a-dによって制御される。  そして、この制御信号412a-dは、インプット602a-bに対してどの演算処理を実行すべきかを決定するものである。  本実施例では、インプット602a-b に対し加減算器604、乗算器606、および除算器608によって、全ての適用可能な演算処理が並行に実行される。  加減算器604は、LPHDR加算および減算を実行し、乗算器606は、L PHDR乗算を実行し、除算器608は、LPHDR除算を実行する。
【００５６】
所望する結果が(加減算器604、乗算器606、および除算器608の出力から)マルチプレクサ(MUXes)610aおよび610bによって選択される。  右側のマルチプレクサ(MUX)610bは、アウトプット602cへ所望する値を送る。  左側のマルチプレクサ(MUX)610aは、所望する処理から得られたNANビットの情報をORゲート612に送り、このORゲートは、いずれかのインプットがNANである場合や、あるいは特定の演算処理においてNANが生じた場合にはNANを設定して出力するようになっている。  コンピュータのアーキテクチャーを論じた文献には 、図6に示す実施例に取り込むことができる多くのバリエーションが論じられている。
【００５７】
対数システム(LNS)での演算では、乗算(MUL)および除算(DIV)が極めて容易であって、物理的なリソースをあまり使用しない(シリコン上での実装エリアが少ない)という、極めて大きな利点がある。  演算結果の符号は、演算対象の符号の排他的論理和となる。  アウトプットの対数部分は、乗算(MUL)の場合には演算対象の対数部分の和であり、除算(DIV)の場合には演算対象の対数部分の差となる。  対数の和および差は、オーバーフローし、NANが生じることがある。  対数システム(LNS)での演算では、他の処理も、容易になる。  例えば、2乗根では、対数を1/2に除することに相当し、このことは上述した表現方法では、単に1ビットだけ右側に位置をずらすだけで良い。
【００５８】
従って、図6に示す乗算器606、および除算器608は、2進法補数である入力を単に加算し、減算する回路として実装されることになる(2進法補数は、たまたま対数となっているものである)。  もし、数値がオーバーフローすれば、NANとして1を出力するようになっている。
【００５９】
対数システム(LNS)での加算および減算の実行、すなわち、図6における加減算器604は、対数システム(LNS)の文献にて使用されている共通的なアプローチに従って行われる。  加算について考えてみる。  対数bおよびcで表される二つの正の数BおよびCについて考えると、BとCの和は、log(B+C)で表される。  この結果を計算するアプローチは、当業者にとって良く知られた方法で、以下のような表示に基づく。
Log(B+C)=log(B＊(1+C/B))=log(B)+log(1+C/B)=b+F(c-b)
ここで、F(x)=log(1+2^x)
従って、本実施例では、当業者に良く知られた標準的なデジタル技術を使用することにより、c-bを計算し、Fに代入し、その結果をbに加えている。
【００６０】
対数システム(LNS)に関する出版された文献の多くは、F(x)、加算(ADD)のための特別な関数、更に減算(SUB)のための類似の関数、をいかに計算するかというものに関係している。  これら二つの関数は、しばしば回路を共有している。  そして、このことが、図6に示す実施例において、単一の組み合わされた加減算器604が使用されている理由である。  これらの関数を計算する、あるいはその概算値を求める方法について記載した文献が多く出版されている。  そして、値の精度が低い場合に、これをどのように取り扱うかについても論じられている。  そのような手法、あるいはこれとは別の手法であっても使用することができる。  一般論として、大規模並列LPHDR演算を実行するための、更に適切なアプローチは、回路のエリアのようなリソースの使用を最小に抑え、図6に示す実施例において使用されている表示は低精度のものであり、そこで行われる演算処理は、決定論的(確定的に1つに決定されること)なものである必要はなく、低精度の表示において最も正確な答えを返す必要もないという事実から派生する利点を享受できる。  従って、本発明の実施例においては、最良の答えを計算しない回路であって、低精度の表示において適用可能な限定された選択肢から選択して使うことができる。
【００６１】
選択した処理要素(PEs)の条件付き処理を可能にするために、本実施例では、計算結果に基づき、マスク・フラッグ410をリセットしたりセットしたりすることができるようになっている。  これを実行するメカニズムは、コントロール・ユニット(CU)  106が、データ・パス402fを通ってマスク410に入ってくる値に対して、基本的なテストを行うための命令と共に、各処理要素(PE)におけるマスク410のフラッグをリセットしたり、セットしたりする命令を出し、フラッグをセットする。  後述した命令の例には、データ・パス402fを通ってマスク・ビット410に入るデータの符号ビットあるいはNANビットをコピーする命令が含まれている。  他の例としては、データ・パス402f上のデータの12ビットの数値部が2進数のゼロに等しい場合に、マスク・ビット410がセットされるようになっている。  従来のプロセッサーにおける比較命令に類似したものであって、当業者に周知な上述したような処理を行う方法としては、多くの追加的な手法や別の手法が存在している。
【００６２】
上述した対数システム(LNS)の処理を使用した自明な手法で、LPHDR演算を実行しているが、プログラマーは選択した数値を12ビットの2進法補数にすることを考慮しても良い。  乗算(MUL)と除算(DIV)は、対数システム(LNS)の演算を実行する際の演算結果の正確さの理由から、このような数値を加減算するために使用することができる。  マスクのセット命令はこれらの単純な2進数を比較することができる。  従って、LPHDRの計算を行う他に、対数システム(LNS)を使用したこのデジタル方式の実施例では、短い符号のついた整数に対して単純な2進数演算を実行することができる。
【００６３】
本発明のある実施例では、アナログ方式の表示およびアナログ処理方式を備えることができる。  かかる実施例では、例えば、電荷、電流、電圧、周波数、パルス幅、パルス密度、スパイクの種々の形態、あるいは従来のデジタル形式の実装の特性ではないその他の形態としてLPHDR値を表すことができる。  このように表現された値の処理のためのメカニズムと同様、かかる表示方式については多くの文献により論じられている。  アナログ方式と呼ばれるこのような方式は、ここで論じてきた、例えば一例としてのSIMDのような、幅広いレンジのアーキテクチャーで、LPHDR演算を実行するために使用することができる。
【００６４】
アナログSIMDアーキテクチャーの例としては、DudekのSCAMP設計(およびその関連設計)がある。  この設計では、数値はロー・ダイナミック・レンジを有し、ほぼ1%以内の精度を有している。  数値は、キャパシターの電荷によって表わされるようになっている。
これらのキャパシターは、典型的にはトランジスターのゲートである。  各処理要素(PE)は、図4に示すレジスターに類似した数個のメモリ・セルを備えている。  加算は、2つの演算対象からのパス・トランジスターをオン状態にすることによって実行され、これらの2つの演算対象は、自らの電荷をアナログ・バスに移送し、電荷と配線による自然な物理現象によって合計され、別のレジスターのキャパシターを充電するために回路を開いて移送され、演算対象の合計値が表示されることになる。  Dudekによって開示された詳細なメカニズムは、実際には、負の合計値を生み出すことになるが、基本的な概念はここで述べたとおりであり、アナログ表示と単純な処理メカニズムを使い、単純な方法で加減算を実行するようになっている。
【００６５】
SCAMP設計アーキテクチャーのバリエーションが製造され、そして画像処理に関連する分野において低精度、ロー・ダイナミック・レンジの処理を実行するために使用されてきている。  このSCAMP設計アーキテクチャーでは、ハイ・ダイナミック・レンジの演算を行うものではなく、また、レジスターに保存された値の乗算や除算を行うメカニズムを備えているものでもない。  しかしながら、Dudek設計アーキテクチャーは、アナログ方式のSIMDマシンを構築することができる可能性を示唆するものである。  以下に、本発明の一つの実施例であって、LPHDR演算を実行するアナログ方式のSIMDマシンの構築方法について説明する。
【００６６】
本発明の一実施例では、数値をアナログ形式とデジタル形式を組み合わせた混合方式として表示する。  この実施例では、数値を、低精度で、正規化し、低を2とする浮動小数点数として表し、仮数部をアナログ値とし、指数部を2進数のデジタル値としている。  アナログ値は約1%の精度であり、Dudekのアプローチに基づいており、精度はアナログ処理技術のリーズナブルな範囲内に十分入っている。  指数部は、6ビットの長さであるか、あるいは要求されるハイ・ダイナミック・レンジを提供するために必要な長さであればよい。
【００６７】
数値を乗ずるため、本実施例は、従来の浮動小数点法に対するアナロジーによって実行される。  デジタル値である指数部は、標準的なデジタル技術である、2進数演算による加算器を使用して合計される。  アナログ値である仮数部は乗じられる。  これらは、約1/2と1の間の正規化した数値を表すので、これらの積は、約1/4の小さい数値となる。  かかる積の値は、1/2から1の範囲に正規化し直す必要がある。  本実施例では、これは、スレッショルド回路を使用し、アナログ値である仮数部を1/2のアナログ表示と比較することによって行われる。  もし、アナログ値である仮数部が1/2より下の場合には、仮数部は2倍され、デジタル値である指数部から1を減じる。  そして、この減算は、単純なデジタル値の減算である。  アナログ値である仮数部を2倍にすることは、選択されたアナログ表示に対応した方法で実行される。  例えば、2つのアナログ値を加算するために使用される手段であれば何であっても、コピーした仮数部を仮数部に加えることによって、仮数部を2倍にするために使用することができる。  例えば、アナログ値である仮数部が電流として表現されている場合には、電流ミラーやその他の適切なメカニズムを使用してコピーを作り出すことができ、加算は、電流加算用の接点を設けることにより実行することができる。
【００６８】
オリジナルのアナログ値である仮数部を乗ずる手段は、選択された表示方法に依存する。  例えば、アナログ値である仮数部が、SCAMPに基づき、電荷によって表されている場合には、電荷を電流に変換するために、文献により公知となっている方法を使用することができる。  例えば、キャパシターの電荷は、キャパシターの電圧を決定することになるので、電荷を電流に変換することは、電圧から電流への変換として実行することができる。  そして、この技術は、アナログの電子技術の分野においては、当業者に周知となっている基本的な技術である。  いずれの場合であっても、アナログ値である仮数部が電流として表示されているか、あるいは仮数部が一旦電流に変換されていれば、例えば、Gilbertの技術を使用して仮数部の乗算を実行することができる。  Gilbertの乗算器は、積を表す電流を作り出し、もし必要であれば、その積である電流を電荷(あるいは使用されている表示であれば何であっても良い)に変換し直すこともできる。  ここで述べたことは、どのようにして処理が実行される必要があるかを示すための単なる例示である。  文献では、このようなことが大々的に論じられており、この種のアナログ回路は当業者にとって周知となっている。
【００６９】
数値の加減算では、従来のデジタル方式の浮動小数点演算において行われていたように、同じ指数部を有するように数値を予め正規化しておく必要がある。  本実施例では、指数部を比較し、指数部が小さい方を選択することによって正規化が実行される。  小さい方の指数部は、デジタル方式の手段を使用して、大きい方の指数部から減算される。  この差は、小さい指数部を持つ数値の仮数部を、1/2に除することを何回行う必要があるかを特定するものである。  もし、その仮数部が電流で表示されて(あるいは電流に変換されて)いる場合には、上述したように計算された指数部の差によって特定されるラダーの階数分に相当する、必要な回数だけ電流を1/2に除算するために、アナログ形式のR-2R形式のラダーを使用することができる。  出力の仮数部を作り出すために、大きい方の指数部を有する数値の仮数部に対応する電流に、結果としてスケール・ダウンされた電流が加算される(もし、これがLPHDR減算処理であるならば減算されることになる)。  出力される仮数部に対応する出力される指数部は、大きい方の指数部となる。  この時点において、正規化の後処理が必要になる。  もし、出力される仮数部が1よりも大きい場合には、仮数部を1/2に除算し、出力される指数部には1を加える(インクリメント)必要がある。  もし、出力される仮数部が1/2よりも小さい場合には、1/2を超えるようになるまで仮数部を必要回数だけ、2倍に乗算する必要がある。  そして、出力される指数部は、対応する回数に相当する数だけ減算(デクリメント)しなければならない。  そして、このような処理は、一連のスレッショルド回路、倍化回路、およびデクリメント回路によって実行される。  2進数デジタル形式の指数部をインクリメントしたりデクリメントしたりすることや、これらに対応してアナログ形式の仮数部の電流を2倍化したり、1/2に半減させたりすることは、当業者に良く知られた単純な処理である。
【００７０】
本実施例では、指数部はデジタル形式の2進数として表されている。  別の実施例では、指数部をアナログ値として表すこともできる。  しかし、指数部は保存時および計算時においては、指数部を表す数値に変動を起こすようなノイズも誤差も生じさせることのない方法で表されることは、特に重要な点である。  指数部におけるかかる変動は、記憶された数値の値に、2つの変化するファクターを生み出すことになる。  指数部の精度を維持するための一つの実施例として、指数部を比較的小さいレベル、例えば、16ビット+符号ビットに量子化することができる。  処理途中において、指数部のアナログ表示部に生じたわずかな変動は、16ビットの標準化された量子化レベルに数値を記憶し直すようになっている回路によって、取り除くことができる。  このような実施例において、十分なダイナミック・レンジを得るために、浮動小数点数は、通常の低2の数値としてではなく、低4の数値として処理するようにしても良い。例えば、このことは正規化された仮数部は1/4から1の範囲のレンジにあることを意味する。  ここで述べた加算、減算、乗算はわずかではあるが単純な変動を生ずるようになる。
【００７１】
上述したアナログ形式で混合した信号を使用した実施例は、単に例示するものであって、本発明の限定を構成するためのものではない。  神経形態学的であって、アナログ形式で混合した信号を使用した技術に関係する文献刊行物は、LPHDR演算において実行することができる記憶と処理に関する手法について、非常に多くのものを提供している。  このような記憶と処理においては、LPHDR演算を実行するマシンの動作に、組立誤差と同様にノイズも取り込まれてしまう。  「fp+ノイズ」演算を使用したソフトウェア・アプリケ ーションの実行において得られる後述するような結果は、非常に「非デジタル」的なクオリティを持つものであるにもかかわらず、このように構築されたマシンは驚くほど有用なものである。
【００７２】
LPHDR演算がいくつかの重要な計算アプリケーションの実務において、有効である証拠について以下にのべる。  本発明の実施例の幅広いバリエーションに対して、有効であるという証拠が存在するが、この有効さは、実施内容の細部に依存するものではない。
【００７３】
LPHDR演算の有効性を示す目的のために、LPHDRマシンの非常に一般的な例を選択する。
かかるマシンのモデルは、少なくとも以下のような機能を定提供できるものである。  (1)大規模な並列処理ができ、(2)ノイズを伴う可能性のあるLPHDR演算を提供でき、(3)各演算ユニットに少量の局所メモリを備えており、(4)ユニット間に局所接続(パワフルで、フレキシブルで、あるいは高度な接続メカニズムではない接続)のみを備えた2次元的な物理的配列を有する演算/記憶ユニットを備えており、(5)マシンとホスト・マシンの間には、限定されたバンド幅のみを備えているマシンである。
なお、このモデルは、本発明の実施例に係るバリエーションの有効性を論証するためにだけ例示するものであり、本発明を限定するためのものではないことに留意すべきである。  このモデルは、特に、デジタル形式、アナログ形式、あるいはこれらを複合したもので実行し、ノイズがゼロまたはノイズを有するものであり、FPGA、SIMD、MIMDのようなアーキテクチャーやモデルの前提条件に適合したアーキテクチャーを備えている。  そして、共有メモリ設計、GPUのような設計、あるいはその他の洗練された設計などの、一般的なアーキテクチャーは、このモデルの能力を組み込んでいる。  そのため、これらのアーキテクチャーを使ったLPHDR演算は、更に有用なものとなっている。  ここでは、LPHDR演算は広い範囲の設計に対して有効であることを示しているが、広い範囲の設計の中のSIMDは、以下のディスカッションのための一つの例として示すものであり、各ユニットを「処理要素」又は「PE」と呼んでいる。  そして、各ユニットはメモリと演算を組み合わせている。
【００７４】
数種類のアプリケーションについて以下に説明する。  各アプリケーションに対し、以下の点について論じている。  すなわち、(1)ノイズの発生の可能性のあるLPHDR演算において計算が実行されるとき、その結果は有効なものとなること、(2)各ユニット間でのデ ータの局所的なやり取りのみであり、各ユニット内にあるメモリに限定し、そしてホスト・マシンとの間でのデータのやり取りに限定して、2次元的な物理的配置で計算を構成することにより、マシンのリソース(領域、時間、電力)を効率的に使用した計算となる。
第1の要求事項は、「精度」に関する事項あり、第2の要求事項は、「効率」に関する事項である。  この二つの要求事項を満たし、このモデルで動作するアプリケーションは、多くの種類のLPHDRマシン上で十分に機能するものと考えられ、従って、このような本発明のマシンは幅広く有効活用できるものである。
【００７５】
アプリケーションは、2つの実施例にかかるマシンの演算によってテストされた。  1番目の実施例は、正確な浮動小数点演算を行うものであるが、各演算処理の結果に0.99から1.01の間のランダムな数値であって、一律に選択した数値を乗ずるようになっている。  以下の議論において、この実施例を「fp+ノイズ」と表示することにする。  この実施例は、アナログ形式の実施例にかかるマシンによって算出された結果を表すものである。
【００７６】
2番目の実施例は、図5に示す表示形式の数値により、対数演算を使用するものである。  演算は繰り返しが可能、すなわちノイズを含まないが、小数部のサイズが小さいため、各処理において約1〜2%までの誤差が生じる。  以下の議論において、この実施例を「lns」と表示することにする。  この実施例は、特に、デジタル形式の実施例にかかるマシンによって算出された結果を表すものである。
【００７７】
本発明にかかる実施例の有用性を論証するために、本発明に係る実施例によって実行可能であり、実務的なアプリケーションの多様化が可能である、3つの計算タスクについて論じることにする。  タスクの内の2つは、最近傍探索に関連するものであり、残りの1つは、視覚情報を処理することに関連するものである。  以下に、タスクについて説明した後、その実務的なアプリケーションについて述べ、その後で、各タスクが上述した一般的なモデルを使用して計算することができ、かつ本発明に係る実施例を適用して計算することができることを論証する。
アプリケーション1:    最近傍探索
【００７８】
大きなセットのベクトル群が与えられており、これを「Examples」と呼ぶことにする。
そして、ある一つのベクトルを「Test」と呼ぶことにする。  最近傍探索という課題(「NN」と呼ぶ)は、「Test」に最も近い「Example」を探し出すことであり、ここで計量的な距離は、ユークリッド距離の2乗(各コンポーネント間の距離の2乗和)とする。
【００７９】
NNは、幅広く使用される有用な計算である。  一つの応用例として、データ圧縮の分野があり、「ベクトル量子化」と呼ばれている。  このアプリケーションにおいては、「コード・ブック」内において、短い「コード・ワード」に関連づけられた、比較的長いベクトルのセットを準備する(これらがExamplesである)。  圧縮すべき一連のベクトル上を移動し、そのうえでTestであるベクトルに対して、コード・ブック内で最も近いベクトルを見つけだし、これに対応するコード・ワードを出力する。 これによって、一連のベクトルは、短い連続したコード・ワードに減縮される。  コード・ワードは、オリジナルの一連のベクトルを完全に特定するものではないので、このやり方は、不可逆形態のデータ圧縮になる。  その他のアプリケーションとして、音声の圧縮やMPEG標準として利用することができる。
【００８０】
NNの別のアプリケーションとしては、大きなビデオ・データベースにおいてビデオの断片化が起こるか否かを決定するために利用することができる。  ここでは、色ヒストグラムや、スケール不変の特徴抽出等の既知の手法を使って、ビデオの断片からの画像を要約して特徴ベクトルにしている。  ここでExamplesは、ビデオのデータベースから抽出された類似の特徴ベクトルとなる。  ビデオの断片からのいずれかのベクトルがビデオのデータベースからのいずれかのベクトルに近かったかどうかについて知ることを希望しており、このような判断を行うに当たってNNは有効になる。
【００８１】
最近傍探索に関するアプリケーションの多くにおいて、真に最も近隣のものを見つけ出すことが好ましいが、もし、ほとんどの場合真に最も近隣のものを見つけ出し、たまにわずかに離れた別の近隣のものを見つけ出すような場合であっても、それは許容できるものである。  従って、最近傍探索の課題の近似解も有用であり、それが特別に速く、あるいは低電力で、あるいは厳密解を得る場合に比べ何か別の利点を持って計算できるものであるならば、特に有効である。
【００８２】
以下に、「精度」と「効率」に関するクライテリアを満たす方法であって、本発明の実施例を適用して、ほぼ最も近隣のものを見つけ出すことが可能であることを示す。
【００８３】
アルゴリズム
本発明の実施例に従い、実装されたマシンによって実行することができるアルゴリズムについて以下に説明する。  そして、アルゴリズムを実行するための命令を含む実行ソフトウェアよって、アルゴリズムは実行される。  このアルゴリズムへの入力は、1セットのExamplesとTestベクトルである。  そして、このアルゴリズムは、Testに最も近い(あるいはほぼ最も近い)Exampleを見つけ出すものである。
【００８４】
最もシンプルなバージョンのアルゴリズムでは、Examplesの数は処理要素(PEs)の数を上回らず、各ベクトルは単一の処理要素(PE)のメモリ内に収まる程度の小さい情報量でなければならない。  各処理要素(PE)の中には一つのExampleが配置されるようにして、Examplesが処理要素(PEs)のメモリ内に配置される。  Testが与えられると、Testは全ての処理要素(PEs)を順に通過するようになっている。  Testは処理要素(PEs)を通過するようになっているので、Testに同伴することによって、どの処理要素(PE)が(従って、どのExampleが)最も近いExampleであるかが分かると共に、Testから最も近いExampleまでの距離が分かる。  各処理要素(PE)は、Testと処理要素(PE)のメモリに記憶されたExampleとの間の距離を計算し、距離とこのPEの中へ渡されたインジケータと一緒にTestを転送するか(このPEによって計算された距離が、このPEへ渡された距離を超えている場合)、あるいは、このPEのExampleが最も近いものであることを示す情報と共に、このPEによって計算された距離と一緒にTestを転送する(このPEによって計算された距離が、このPEへ渡された距離よりも小さい場合)。  従って、このアルゴリズムでは、Testは処理要素(PEs)のセットを通過していくので、シンプルな最小化された処理が行われることになる。  Testと関連情報が最後のPEを出ていくとき、出力にはExampleとTestの間の距離と共に、どのPE(そしてどのExample)がTestに最も近いかという表示が含まれている。
【００８５】
このアルゴリズムの更に効率的な改良タイプのものでは、Testは最初に転送され、例えば、一番上の行から列の全てへとTestと関連情報を下方に送り、他の列と並行して効率的なサーチが行われる。  そして、一旦情報が列の下端まで届くと、列の下端を横断して情報が伝達される限り、処理される全ての列のExampleの最小の距離を計算する。  このことは、Testを処理するために必要となる時間が、行および列における処理要素(PEs)の数に(大きく依存して)比例することを意味する。
【００８６】
このアルゴリズムの機能強化は上述したように行われるが、機能強化されたアルゴリズムは、見つけ出された最も近くのExampleおよび2番目に近くのExampleの両方を示す情報を計算し、そして伝達する。  この情報が処理要素(PEs)のアレイから出ていくとき、処理要素(PE)アレイを管理するデジタル・プロセッサーがTestと、処理要素(PE)アレイによって示された2つのExamplesの間の距離を(高精度で)計算し、2つの内の最も近いものが、Testに最も近い近隣のもののようだとして、出力される。
【００８７】
精度
C言語でコーディングされ、上述したような機能強化したアルゴリズムによって実行された演算について説明する。  このコードでは、後で述べるような重みづけしたスコアと共に、上述した最も近い近隣のものを計算する。
【００８８】
Cコードは、ハードウェアで実行されたように、本発明を実際に実行するときに行う演算と同じ方法を使って、同じオーダーの、同一セットの演算処理を行うものである。  従って、Cコードは、本発明を実行する際に機能強化したアルゴリズムが導き出す結果と同じ結果を出すことができるものである。  (このように実行する際に、効率的に機能させるために、アルゴリズムはどのように体系づけられているかということについては、「効率」について論じるセクションにおいて説明する。)
【００８９】
特に、Testと各Exampleの間の距離を計算する際、TestとExampleのベクトル成分間の距離の二乗の和を求めるために必要となる計算において、長い数値の和を求めることになる可能性があるため、Cコードは、後述するようにKahanの方法を使うようにしている。
【００９０】
このCコードは、上述したように、演算のための数種類の実行手続きを含むようになっている。  「#define fp」でコンパイルすると、IEEE標準浮動小数点を使用して演算が行われる。  もし、ノイズ下での演算を可能にするために、コマンドライン引数が出されたならば、各計算結果にランダム・ノイズが加えられることになる。  これが「fp+ノイズ」形式の演算である。  「#define fp」無しでコンパイルした場合には、低が2であって6ビットの小数部を有する低精度の対数演算を使用することによって、演算が実行される。
これが「lns」形式の演算である。
【００９１】
このコードが実行されると、コードが実行した計算結果を示す出力が作り出される。  これらの出力は、以下に説明するが、あるコマンドライン引数によって、機能強化されたアルゴリズムがLPHDRの最も近隣のものに関する計算結果を生み出すことを示している。
これらの結果は、このアプローチが有用なものであることを示すものである。  ここでは、これらの結果について簡単に説明する。
【００９２】
第1番目の結果は、「fp+ノイズ」形式に関するものである。  10回の明確に区別できる計算を実行した。  各計算の実行においては、百万のランダムなExampleベクトルであって、長さ5のExampleベクトルを発生させた。  そして、各ベクトルの各コンポーネントはN(0, 1)に基づき決定されたものである。  ここで、N(0,  1)は、ガウス(正規)分布であって、平均がゼロ、標準偏差が1を意味する。  更に、各計算の実行においては、百のTestベクトルであって、長さ5のTestベクトルを発生させた。  そして、各ベクトルの各コンポーネントは同じくN(0,   1)に基づき決定されたものである。  各Testに対して、2つの方法により最も近隣のものを計算した。  一つは機能強化した上述のアルゴリズムを使用するものであり、もう一つは、高精度で浮動小数点演算による標準の「最近傍探索方法」により計算するものである。機能強化したアルゴリズムを使用したものは、標準の浮動小数点法をしたものと同じ結果となった。  その結果を以下に示す。
%  ./a.out  5  10  1000000  100  1
表現形式は浮動小数点形式であり、ノイズ有
Run  1:  100  Testに対し実行、100(100.0%)適合性,  0.81%平均スコア誤差
Run  2:  100  Testに対し実行、100(100.0%)適合性,  0.84%平均スコア誤差
Run  3:  100  Testに対し実行、100(100.0%)適合性,  0.98%平均スコア誤差
Run  4:  100  Testに対し実行、100(100.0%)適合性,  0.81%平均スコア誤差
Run  5:  100  Testに対し実行、100(100.0%)適合性,  0.94%平均スコア誤差
Run  6:  100  Testに対し実行、100(100.0%)適合性,  0.82%平均スコア誤差
Run  7:  100  Testに対し実行、100(100.0%)適合性,  0.78%平均スコア誤差
Run  8:  100  Testに対し実行、100(100.0%)適合性,  0.86%平均スコア誤差
Run  9:  100  Testに対し実行、100(100.0%)適合性,  0.85%平均スコア誤差
Run  10:  100  Testに対し実行、99(99.0%)適合性,  0.86%平均スコア誤差
ここで、LPHDR演算が最も近いExampleを見つけ出した回数の平均パーセント(最終的にDPによる修正を行ったもの)=99.90%
LPHDR演算とDPとの対比による平均スコア誤差の平均値=0.85%
【００９３】
ここで、「平均スコア誤差」の値については、後で述べる「重みづけスコア」に関する議論の部分において説明する。  「適合性」という情報は、ここでは関連性のあるもの(適切であるもの)を意味する。
【００９４】
10回の計算の実行、計算の実行に際してはいずれかのTestのみを対象にし、100個のTestについて計算を実行した結果得られた最も近隣のものは、通常の高精度な手法により得られた最も近隣のものとは違った結果が得られた。  従って、「fp+ノイズ」形式の演算であって、機能強化したアルゴリズムにより実行した場合と、通常の高精度な手法により実行した場合とにおける適合性を対比した平均パーセントは99.9%であった。
【００９５】
次に、「lns」形式の演算を使用して類似の計算を実行した。  この結果を、以下に示す。
%  ./a.out  5  10  1000000  100  0
表現形式はlns形式であり、ノイズ無
Run  1:  100  Testに対し実行、100(100.0%)適合性,  0.15%平均スコア誤差
Run  2:  100  Testに対し実行、100(100.0%)適合性,  0.07%平均スコア誤差
Run  3:  100  Testに対し実行、100(100.0%)適合性,  0.08%平均スコア誤差
Run  4:  100  Testに対し実行、100(100.0%)適合性,  0.09%平均スコア誤差
Run  5:  100  Testに対し実行、100(100.0%)適合性,  0.11%平均スコア誤差
Run  6:  100  Testに対し実行、100(100.0%)適合性,  0.16%平均スコア誤差
Run  7:  100  Testに対し実行、100(100.0%)適合性,  0.07%平均スコア誤差
Run  8:  100  Testに対し実行、100(100.0%)適合性,  0.13%平均スコア誤差
Run  9:  100  Testに対し実行、99(99.0%)適合性,  0.17%平均スコア誤差
Run  10:  100  Testに対し実行、98(98.0%)適合性,  0.16%平均スコア誤差
ここで、LPHDR演算が最も近いExampleを見つけ出した回数の平均パーセント(最終的にDPによる修正を行ったもの)=99.70%
LPHDR演算とDPとの対比による平均スコア誤差の平均値=0.12%
【００９６】
この結果では、適合性を対比した平均パーセントは99.7%であり、「fp+ノイズ」形式のものよりわずかに悪い結果となった。
【００９７】
LPHDR演算の2つの形式を使用した、最近傍探索の機能強化したアルゴリズムによって示された精度は、驚くべきものであった。  1%の誤差で多くの計算を連続的に行い、しかも、1%以下の誤差で最終的な計算結果を導き出すということは、これまでの経験からは考えられないことである。  それにもかかわらず、LPHDR演算が効率的であることを立証し、ほぼ最も近い近隣のものを見つけ出すという計算方法が有効な応用分野におけるアプリケーションにおいて、得られた精度は十分高く、有用なものであった。
【００９８】
極端なケースとして、「fp+ノイズ」形式の変形方式について評価を行った。  この場合には、ノイズが+10%から-5%までの間を滑らかに変化するようにしている。  従って、各演算処理によって、10%の非常に大きいものから5%の非常に小さい範囲の結果が得られた。  上述した、最近傍探索の機能強化したアルゴリズムを実行した。  ここで、各計算の実行においては、10万のExampleベクトルを発生させた。  その結果、以下のような、不明確で、ノイズが存在し、非ゼロ平均のLPHDR演算という極端な条件であっても、有用な結果を実現することができるという、驚くべき結果が得られた。
Run  1:  100  Testに対し実行、97(97.0%)適合性
Run  2:  100  Testに対し実行、100(100.0%)適合性
Run  3:  100  Testに対し実行、100(100.0%)適合性
Run  4:  100  Testに対し実行、98(98.0%)適合性
Run  5:  100  Testに対し実行、98(98.0%)適合性
Run  6:  100  Testに対し実行、99(99.0%)適合性
Run  7:  100  Testに対し実行、99(99.0%)適合性
Run  8:  100  Testに対し実行、99(99.0%)適合性
Run  9:  100  Testに対し実行、99(99.0%)適合性
Run  10:  100  Testに対し実行、99(99.0%)適合性
ここで、LPHDR演算が最も近いExampleを見つけ出した回数の平均パーセント(最終的にDPによる修正を行ったもの)=98.80%
【００９９】
効率
驚くべき精度の結果に対し、ここで示した計算モデルにおいて、最近傍探索の機能強化したアルゴリズムによる計算が効率良く実行されたということは、この技術分野における通常の知識を有する者にとっては明らかなことである。  ここで、マシンの演算/メモリのユニットは2次元的な物理的配置で接続されており、処理要素(PEs)間のローカルな通信のみを使用したものである。  しかし、このことは、ホスト・マシンに対して狭いバンド幅を使い、有用な作業を行わせて、マシンを使用中の状態に維持することを狙ったものではない。
【０１００】
単一のTestに対して最近傍探索の計算を行うとき、Testはアレイ中の全ての処理要素(PEs)を通過していく。  上述したように、アレイがMxMの格子状であれば、そのTestがマシンを通過し、結果をホスト・マシンに返すために、当該Testに対して少なくともO(M)ステップの演算が行なわれる。  この間、マシンは最も近隣なものとの間の距離の計算をO(MxM)ステップ実施することになる。  しかし、マシンは各ステップにおいて、O(MxM)ステップの計算実行する能力があるので、O(M)ステップのファクターが失われることになる。
【０１０１】
シリアルタイプのマシンに比べ、このようなマシンはスピードアップが図れ、O(M)ステップのファクターは重要で有用なものとなる。  しかも、効率は更に高くなる。  もし、十分に多くのTestベクトル、いわゆるO(M)ステップ、あるいは更に多くのTestベクトルを処理しなければならなくなると、それらはマシンの中に流れ込み、パイプライン状に通過する流れを構成することになる。  O(M)ステップのTestを処理する時間は、O(M)ステップのままであり、単一のTestに対しての時間と同じである。  しかし、ここでマシンは、O(M)x  O(MxM)ステップの距離計算を実行することになり、その結果、一定のファクターではあるが、マシンの計算能力の全てが使用されることになる。
【０１０２】
もしマシンが、処理要素(PEs)の数の2乗根と同じ数のTestベクトルを処理するのであればマシンは特に効率的になる。  このような形態によく適合するアプリケーションが存在する。  このようなアプリケーションとして、Examplesのセット中の各Exampleに最も近隣のものを見つけ出す問題と同様に、パターン認識や、多数の独立したTestの圧縮に関するもの(例えば、画像のブロック、ファイルの部分、独立した株の株価履歴など)がある。
ここで述べたことは、上述したように、いわゆる当業者の観点に反するものであり、単一のチップ上に非常に多くの演算処理要素を配置したマシンや、これに類似するものは、有用なものではない。
アプリケーション2:    距離の重みづけスコアリング
【０１０３】
最近傍探索の問題に関連するタスクとして距離の重みづけスコアリングがある。  このタスクでは、各Exampleは関連づけられたスコアを有している。  このスコアは、Exampleをいずれかの方法により特徴づける数値である。  例えば、Examplesが与えられた株の株価履歴を抽出したものであれば、スコアは、株価がほぼ上がりそうか、下がりそうかの見込の履歴になるかもしれない。  Testベクトルが与えられると、タスクは、全てのExamplesのスコアの重みづけした和を求めることになる。  ここで、重みは、Testから各々のExamplesまでの距離の漸減関数となる。  例えば、この重みづけされたスコアは、Testによって履歴が表された株の将来の株価の予測値として取り扱われるかもしれない。  本発明の実施例をこのように適用することにより、例えば、量的なヘッジ・ファンドによって行われているような株の高速トレーディングをサポートすることができるようになるかもしれない。  そして、このことは、当業者の観点である、低精度の計算はフィナンシャルの分野でのアプリケーションとしては有効ではないとする考え方に反するものである。
【０１０４】
上述したCコードにより、最近傍探索の計算と共に、重みづけしたスコアが計算される。  この計算においてExamplesに割り当てられたスコアは、範囲[0,  1]から引き出されたランダムな数値である。  この計算における各Exampleに対する重みは、全てのExamplesに対する非正規化された重みの和によって除算されたExampleに対する非正規化された重みであると定義される。
そして、各Exampleに対する非正規化された重みは、ExampleからTestベクトルまでの距離の2乗プラス1の和の逆数であると定義されている。  上述したように、Cコードは、多数の計算を実行し、その計算において多くのExamplesとTestsを導き出し、そして、「fp+ノイズ」形式および「lns」形式を使用して計算された結果と従来の浮動小数点による計算結果とを比較した。
【０１０５】
上述したシュミレーションを実行した出力結果を再び参照すると、「fp+ノイズ」形式によるLPHDR演算における重みづけスコアの平均値は、修正した値の0.85%以内にあり、1%を超えるものではなかった。  「lns」形式による演算においては、誤差は非常に小さく、平均値でちょうど0.12%の誤差であった。
【０１０６】
これらの結果は驚くべきものであり、重みづけされたスコアの計算には、各Exampleに関係する個々の重みづけされたスコアの合計がふくまれているということを示している。  各計算の実行において、百万のExamplesが処理されているので、このことは、合計値は百万以上の小さい正の値であった。  各加算において約1%の誤差をもって、百万の小さな値の合計値を求める単純化した方法は、概算によるノイズを含んだ結果を生み出すことになる。  しかし、このCコードは、Kahan(Kahan,  William(January  1965)、「切り捨て誤差を低減する際の注意点」ACM8(1)のコミュニケーション:40)によって発明され、長い間公知となっていた方法を使用して合計値を求めるものである。  この方法は、距離の重みづけスコアを求める際、あるいは、モンテ・カルロ法を使ったデリバティブ証券の価格計算を行うなどの金融工学の分野、あるいは、次に説明する画像処理アルゴリズムでのデコンボルーションを実行する際に使うこともできるような、長い加算を行うことができようにするものである。
【０１０７】
このアルゴリズムの効率は、最初のほうで述べたように、NNのアルゴリズムの場合と類似している。  もし、一回に多くのTestベクトルが処理されるような場合には、マシンは特に効率よくタスクを実行する。
アプリケーション3:    画像の動きに起因するぼやけの除去
【０１０８】
画像を形成する光を十分に集めるために、カメラは往々にして長時間シャッターを開けたままの状態に置かれ、このためカメラの動きによって「ぼやけ」が生じることになる。
人口衛星や航空機に搭載される移動用カメラは別として、非常に高価なカメラと同様安価な民生用カメラでは、カメラの揺れの結果として、このような「ぼやけ」が生じることがある。  もし、カメラの移動経路が分かっているのであれば(あるいは、計算することができるのであれば)、「ぼやけ」はいろいろな「ぼやけ」除去のアルゴリズムを使用して、実質的に取り除くことができる。  かかるアルゴリズムの一つとして、Richardson-Lucyの方法(「RL手法」と呼ぶ)がある。  ここでは、本発明の実施例が、Richardson-Lucyの方法によるアルゴリズムを実行することができ、有用な結果を導き出すことができることを示す。  上述したアルゴリズムのフォーマットの説明に続き、精度と効率に関するクライテリアについて述べる。
【０１０９】
アルゴリズム
Richardson-Lucyの方法によるアルゴリズムはよく知られ、幅広く利用されている。  この方法では、画像は既知のカーネルによって、ぼやけさせられていると仮定する。  特に、このカーネルは直線であると仮定し、「ぼやけ」が純粋に水平方向にのみ生じるように画像が方向づけられているものと仮定する。  ぼやけた画像の各列におけるJ番目のピクセルに対する特定のカーネルが、ぼやけていない画像のJ番目からJ+31番目のピクセルの一様に重みづけした平均値であると考える。
【０１１０】
精度
Cプログラミング言語を使い、LPHDR演算を使用したRL手法の簡単なバージョンについて計算を実行した。  このプログラムでは、テスト画像を読み込み、上述したようなカーネルを使って画像をぼやけさせ、そして、「fp+ノイズ」形式か「lns」形式のいずれかの演算方式を使用して画像のぼやけ除去を行った。  ぼやけ除去を行った画像の現状の近似値でカーネルをコンボルーション(たたき込み積分)する際のように、RL手法のアルゴリズムによって和を計算した。  この計算の実行にあたっては、最初にのべたように、Kahanの手法を使用してこれらの和を求める計算を行なった。  図7は、テスト画像のオリジナルの状態を示したものである。  このテスト画像は、バラク・オバマの就任式に使われた建物の衛星画像である。  図8は、カーネルによって極端にぼやけさせられた画像を示すものである。  この画像では、いずれの特定の対象物をも見分けることができない。  図9は、標準の浮動小数点演算を使用して、ぼやけ除去を行った結果を示すものである。  図10は、「fp+ノイズ」形式の演算を使用して、ぼやけ除去を行った結果を示すものである。  そして、図11は、「lns」形式の演算を使用して、ぼやけ除去を行った結果を示すものである。  これらの全てのケースで、画像は、建物、道路、パーキング・ロット、および車を識別することができる状態で、再保存された。
【０１１１】
人間の目を使って判定するために画像を表示するのに加え、ぼやけ除去の性能に関する数値的特性値の計算を行った。  この計算は、画像内の全てのピクセルに対し、オリジナルの各ピクセルの値(0から255までのグレー・スケール値)と、RL手法のアルゴリズムによって再現された画像の対応する各ピクセル値の間の平均差を求めたものである。  結果として得られた数値的特性値を下の表1に示す。
【０１１２】
【表１】
2020074074.tif 000003
【０１１３】
これらの結果と、主観的ではあるが重要な人間の目による判定によれば、LPHDR演算により、標準浮動小数点による演算に比べても、実質的であって有用なぼやけ除去が可能であることが示された。  更に、この例では、LPHDR演算を使用したぼやけ除去のビジュアルなインパクトとそのコンセプトをよりよく伝えるために、極端にぼやけた画像を選んでいる。  もっと穏やかで、一般的なカーネルによるぼやけでは、得られるぼやけた画像は、今回のケースの画像より、もっとオリジナルの画像に近いものであり、カーネルの長さが縮小され、このような画像に対してLPHDR演算を使ったRL手法のアルゴリズムを実行することにより、もっと一般的なものとして見ることができるようになる。
【０１１４】
効率
局所的なカーネルを使用したRichardson-Lucyの方法は、局所的な計算処理のみを行うものであることは、いわゆる当業者には自明なことである。  ぼやけ除去するべき画像は、処理要素(PE)のアレイの中へロードすることができ、処理要素(PE)毎に一つまたはそれ以上のピクセルを保存し、RL手法のアルゴリズムによるデコンボルーション処理を数十回または数百回繰り返すことができる。  そして、ぼやけ除去された画像は、ホスト・プロセッサーに戻され、読み込まれるようになっている。  十分に長い繰り返し処理を行う限り、マシンを効率よく使用することができる。
【０１１５】
画像のぼやけ除去に関する極端な形態として、コンピュータ・トモグラフィー(断層撮影)に使用される、繰り返し復元法がある。  2Dの投影画像から3Dの立体画像を復元することは、極端に大量の計算タスクを必要とするものである。  前述した方法は、本来、繰り返し復元法に一般化されるものであり、マシンを効率的に使用することになるものである。
【０１１６】
本発明の実施例の利点としては、以下に記載するものの内の一つまたはそれ以上のものがある。
【０１１７】
本発明のある実施例によって実行された処理要素(PEs)は、演算を実行できる処理要素(PEs)としては比較的小さいものである。  このことは、単位リソース(例えば、トランジスター、面積、体積など)当たりに、多くの処理要素(PEs)があることを意味し、そしてこのことは、単位リソース当たりの演算にかかる計算パワーが非常に大きいことを意味する。  このことによって、従来のコンピュータ設計に比べ、与えられた範囲のリソースで、より大きな問題を解決することが可能になる。  例えば、最新の技術で組み立てられた大きなシリコン・チップとして構築された、本発明のデジタル方式の実施例では、1サイクル当たり、数万回の演算処理を実行することができる。  これに対し、従来のGPUでは、1サイクル当たり数百回程度であり、従来のマルチ・コアCPUでは、1サイクル当たりごく少数回の演算処理しか実行できない。  このような演算回数の比率は、本発明の実施例のアーキテクチャー上の利点に反映される。  それは、現状ナノ・テクノロジーに到達し、あるいはデジタル方式とアナログ方式による計算の実行技術に到達しているにも関わらず、継続的に改良が進められている組立技術として存続するものである。
【０１１８】
一般的には、少ないリソースで演算を実行すること、および実施例の中で明確に示されていることは、演算に使用される電力が小さいということを意味している。  その結果、本発明の実施例によって実行されるマシンは、リーズナブルな使用電力(例えば、数十ワット)で、極端に高い性能を発揮しているか、または少ない使用電力(例えば、何分の1かの電力)で、高い性能を発揮していると言える。  このことは、かかる実施例は、スーパーコンピュータから、デスクトップ・コンピュータや、モバイル・コンピュータに至るまでのフル・レンジのコンピュータに適したシステムであることを意味する。  同様に、コストは一般論として、利用できるリソースの量に関連するので、本発明の実施例は、従来のコンピュータ・デバイスに比べ、比較的大きな、単位コスト当たりの計算パワーを提供できるようになっている。
【０１１９】
SIMDアーキテクチャーは、かなり古いものであり、いわゆる当業者からはコンピュータ・デザインのアプローチの手段としては放棄されたものである。
しかし、一般的な演算能力のような重要な機能を維持しており、SIMDマシンのプロセッシング・エレメントが特に小さく作ることができれば、SIMDのアーキテキチャーは有用なものとなる。  ここで示した実施例は、まさにこのような品質を備えたものである。
【０１２０】
大規模なLPHDR演算は有用でないとする一般的な見方があったにもかかわらず、大規模なLPHDR演算は、極めて一般的な計算フレームワークとして有用であるという発見は、単にSIMDマシンの実施例のみならず、(大規模であるか否かにかかわらず)どんな並列処理マシンにおいても有効に活用することができる。  大規模なLPHDR演算は、FPGAs、FPAAs、GPU/SIMTマシン、および少ないリソース(トランジスターや体積など)を使い、大量の計算を実行するためのコンパクトな演算処理要素を使ったあらゆる種類のマシンにおいて使用することができる。
【０１２１】
本発明の実施例の別の利点としては、一般論として効率的に計算を実行できるから有用であるということではなく、一般的に高精度な演算要素が必要になると考えられる、種々の現実的な問題に取り組むために使用することができるという点が挙げられる。  たとえ本発明の実施例が、低精度の計算要素しか備えていない(あるいは、計算要素の大部分が低精度である)としても、以上のようなことが言える。  ここで、かかる現実的な問題のいくつかの例について述べ、そして分子動力学のシュミレーションにおける非結合力場の計算やその他のタスクを実行することにも成功しているが、これらは単なる例示であって、本発明の実施例を使用することによって解決することができる、現実的な問題の範囲を限定するものではない。
【０１２２】
ここで開示した実施例は、単なる例示であって、本発明を限定するものではない。  むしろ、本発明の実施例は、以下に示すような、他の種々の方法でも実行することができる。
【０１２３】
例えば、本発明の実施例は、デジタル形式やアナログ形式の表示を使ったり、固定小数点、対数、あるいは浮動小数点表示、電圧、電流、電荷、パルス幅、パルス密度、周波数、確率、スパイク、タイミング、あるいはこれらの組み合わせなど、種々の方法のいずれかの方法により値を表示することができる。  このような内在する表示方法は、個別に、あるいは組み合わせによりLPHDRの値を表すために使用することができる。  LPHDR演算回路は、種々のデジタル方式(パラレルかシリアルか、あるいはパイプライン型かそうでないか)、あるいはアナログ方式、あるいはこれらの組み合わせのような、種々の方法の中のいずれかの方法によって実施することができる。  演算要素は、最近接した4つ、最近接した8つ、種々のタイプの飛び石状、あるいは三角形やグリッド状になったりならなかったりするアーキテクチャーのように、種々の接続アーキテクチャーを使って接続することができる。  パラレルまたはシリアル、デジタルまたはアナログ、あるいはこれらを組み合わせたモードを利用した方法のように、どのような方法であっても、演算要素間の通信を行うために使用することができる。  演算要素は、同期して処理したり、あるいは非同期で処理を行い、そして全体的に同時に処理したり、あるいは全体的に同時でなく処理したりすることができる。  演算要素は、例えば、シリコン・チップのような、単一の物理的デバイス、あるいは散在する複数のデバイスに対して実行することができる。  そして複数のデバイスから構築された実施例では、例えば、グリッド状、トラス状、ハイパーキューブ状、ツリー状、あるいはその他の方法を含む種々の方法で接続された演算素子を備えている。  演算要素は、もしあるならば、コストとバンド幅、そして特定の実施例に対するその他の要求事項に基づいて、種々の方法で、ホスト・マシンに接続することができる。  例えば、演算要素の集合体に接続される多くのホスト・マシンが存在する。
【０１２４】
本発明のある実施例については、SIMDアーキテクチャーとして実施されるとして説明しているが、これは単なる例示であって、本発明をこれに限定するものではない。  例えば、本発明の実施例は、プログラマブルなロジック・デバイス、フィールド・プログラマブル・アナログ・アレイ、あるいはフィールド・プログラマブル・ゲート・アレイ・アーキテクチャー(これらに限定するものではないが)のように、再構成可能なアーキテクチャーとして実施することもできる。  そして、フィールド・プログラマブル・ゲート・アレイ・アーキテクチャーには、FPGAの既存の乗算器ブロックが、ここで開示したいずれかのタイプのLPHDR演算要素で置き換えられるか、あるいは補完されるようにしたデザインのもの、あるいは、LPHDR演算要素が新規あるいは既存の再構成可能なデバイスの中に含まれるようにしたデザインのものがある。  別の例として、本発明の実施例は、GPUあるいはSIMT形式のアーキテクチャーとして実施できる。  そして、このアーキテクチャーには、ここで開示したいずれかのタイプのLPHDR演算要素が取り入れられている。  例えば、現在のあるいは新しいグラフィック・プロセッシング・ユニットのデザインにおいて使用されている従来の演算要素をLPHDR演算要素で置き換えたり、補完したりすることができる。  また、別の例では、本発明の実施例は、MIMDタイプのアーキテクチャーとして実行することもできる。  そして、このアーキテクチャーには、ここで開示したいずれかのタイプのLPHDR演算要素が取り入れられている。  例えば、現在のあるいは新しいMIMDコンピュータ・システムのデザインにおいて使用されている従来の演算要素をLPHDR演算要素で置き換えたり、補完したりすることができる。  更に、別の例では、本発明の実施例は、大規模並列処理マシンを含む、いずれかの種類のマシンとして実行することもできる。
そしてこの大規模並列処理マシンは、従来のアーキテクチャーに比べ、少ないリソース(例えば、トランジスターや面積や体積など)を使用して大量の演算能力を提供するために、コンパクトな演算処理要素を使用している。
【０１２５】
ここでは、ソフトウェアを実行する、本発明にかかるある種の実施例について説明したが、これは単なる例示であって、本発明を限定するものではない。  また、例えば、本発明の実施例は、ここで開示されたいずれかの種類のLPHDR演算要素を制御するために、マイクロコードやハートウェア・シーケンサー、あるいはステート・マシンやその他のコントローラーを使用して実行することができる。  また、例えば、本発明の実施例は、ここで開示されたいずれかの種類のLPHDR演算要素を制御するために、ハード・ワイヤードの、焼き付けられた、あるいはプリ-プログラムド・コントローラーを使用して実行することができる。
【０１２６】
本発明のある種の実施例は、ハードウェアとしてカスタム・シリコンを使用して実行されるとして説明してきたが、これは単なる例示であって、本発明を限定するものではない。  また、例えば、本発明の実施例は、FPGAや内在するハードウェアとしての、その他の再構成可能なチップを使用して実行することができる。  そして、このFPGAsやその他の再構成可能なチップは、ここで開示したLPHDR処理を実行するために構成されている。  別の例として、本発明の実施例は、プログラマブルで、従来のデジタルまたはアナログ計算のアーキテクチャー(高精度な計算要素を使用したものや、LPHDR演算を行うためのその他の種類の非LPHDRハードウェアを使用したものや、大規模並列処理するものなどが含まれている)を使用して実行することができる。  そして、このアーキテクチャーは、ここで開示したLPHDR処理を実行するためのソフトウェアでプログラムされている。  例えば、本発明の実施例は、ここで開示した機能のソフトウェア・エミュレータを使用して実行することができる。
【０１２７】
更に別の例として、本発明の実施例は、シリコン・チップ、あるいはその他の技術に基づくものであっても、3D組立技術を使用して実施することができる。  いくつかの例示した実施例では、1つのメモリ・チップがプロセッサーまたは別のデバイス上に接続されているか、あるいは数個のメモリ・チップ及び/又はプロセッサー・チップ、あるいはその他のデバイス・チップが互いにスタック状に重ねて接続されている。  本発明の3D技術を採用した実施例は、2D技術を採用した実施例に比べ、高密度化されており、プロセッサー・ユニット間での3Dの情報通信が可能となるので、非常に有用である。  そして、この3D
技術を採用した実施例は、2D技術を採用した実施例に比べ、効率的に実行できる高度な
アルゴリズムを可能ならしめるものである。
【０１２８】
本発明のある実施例では、シリコン・チップの組立技術を使って実施されるとして説明したが、これは単なる例示であって、本発明を限定するものではない。  また、例えば、本発明の実施例は、その他の種類の従来のデジタルおよびアナログ形式のコンピュータ・プロセッサーやその他のデバイスを使用する技術によって実行することができる。  このような技術の例では、種々のナノメカニカル・テクノロジーやナノエレクトロニック・テクノロジー、DNA計算のような化学ベースのテクノロジー、ナノワイヤーとナノチューブをベースとしたテクノロジー、オプティカル・テクノロジー、メカニカル・テクノロジー、バイオロジカル・テクノロジー、およびトランジスターに基礎を置くか否かは別として、その他の技術を含み、これらは、ここで開示した種類のLPHDR演算を実行できる可能性を持ったものである。
【０１２９】
本発明のある実施例では、「大規模並列」技術を使った実施例であるとして説明してきた。  本発明のある実施例では、数千、数百万、あるいはそれ以上の演算ユニットを含んでいるが、本発明の実施例は、いくつかの(非常に少ない数の)演算ユニットを含むこともできる。  例えば、単一のLPHDRユニットのみを含む実施例であっても、小さくて、安価なプロセッサーやその他のデバイスにおいて大量のLPHDR処理できるパワーを提供するために、シリアル・プロセッシング・ユニットあるいはその他のデバイスの中で使用することができる。
【０１３０】
本発明のある実施例では、デジタル技術のみを使って実行されている場合であっても、演算処理は、選択した低精度の表示方式において、決定論的で、繰り返し可能で、あるいは最も正確である可能性のある結果を生み出すものではない。  例えば、ある特定の入力値に対して、演算処理は、真の演算結果に対して、選択した表示方式において最も近い値ではない結果を生み出すかもしれない。
【０１３１】
「低精度のハイ・ダイナミック・レンジ」の演算要素の精度の程度は、個々の実施内容によって変化する。  例えば、ある実施例では、LPHDR演算要素は小数、すなわち0より大きく1より小さい数を含む結果を生み出す。  例えば、ある実施例では、LPHDR演算要素は、往々にして(あるいは常に)、正しい結果に対して0.05%以上離れた結果を生み出す。(すなわち、LPHDR演算要素によって生み出された結果と正しい結果の間の差の絶対値は、正しい結果の絶対値の1%の20分の1を超えないものである。)
別の実施例として、LPHDR演算要素は、往々にして(あるいは常に)、正しい結果に対して0.1%以上離れた結果を生み出す。
別の実施例として、LPHDR演算要素は、往々にして(あるいは常に)、正しい結果に対して0 .2%以上離れた結果を生み出す。
更に、別の実施例として、LPHDR演算要素は、往々にして(あるいは常に)、正しい結果に対して0.5%以上離れた結果を生み出す。
更に、別の実施例として、LPHDR演算要素は、往々にして(あるいは常に)、正しい結果に対して1%、あるいは2%、あるいは5%、あるいは10%、あるいは20%以上離れた結果を生み出す。
【０１３２】
精度の程度については、いろいろな値をとる可能性があるが、この他に、LPHDR演算要素が処理する数値の空間のダイナミック・レンジによって、演算の実行は変化する。  例えば、ある実施例では、LPHDR演算要素は、ほぼ100万分の1から100万までの範囲を有するレンジの空間において、数値を処理する。  別の例として、ある実施例では、LPHDR演算要素は、ほぼ10億分の1から10億までの範囲を有するレンジの空間において、数値を処理する。  更に別の例として、ある実施例では、LPHDR演算要素は、ほぼ65,000分の1から65,000までの範囲を有するレンジの空間において、数値を処理する。  更に別の例として、ある実施例では、LPHDR演算要素は、0と65,000分の1の間にある特定の値から、65,000よりも大きい特定の値までの範囲を有するレンジの空間において、数値を処理する。  更に別の例として、別の実施例であるLPHDR演算要素は、前述の例で示した範囲内あるいは前述の例で示した範囲を組み合わせたダイナミック・レンジ、例えば、ほぼ10億分の1から1000万までの範囲のレンジを備えた空間において、数値を処理することができる。  別の実施例と同様、本発明として例示したこれらの全ての実施例において、議論の対象となっている数値は、符号の付いたものであり、そして、上述の議論は取り扱う数値の絶対値の特性を論ずるものである。
【０１３３】
正しい結果に対する近似値のみを生み出すことができるLPHDR演算要素の周波数は、実行する演算の種類によって異なる。  例えば、LPHDR演算要素が一つまたはそれ以上の処理(おそらく、例えば、三角関数を含むような処理)を実行することができるようになっている実施例であって、各処理において、LPHDR演算要素の各々が有効な数値の範囲から取り出した入力のセットを受け入れ、入力値の特定のセットに対しLPHDR演算要素が一つまたはそれ以上の出力値を生み出し(例えば、入力値のサインおよびコサインの両方を同時
に計算するようなケース)、入力値の特定のセットに対して生み出された出力値が決定論
的、あるいは非決定論的である場合について考えてみる。  このような例の実施例では、有効な入力と相対的な誤差の大きさEの比Fについて更に考える。  そして、このことによって、LPHDR演算要素によって計算される結果は、数学的に正しい結果とは異なったものとなる。  本発明のある実施例では、各LPHDR演算要素の各々において、LPHDR演算ユニットが実行できる少なくとも1回の処理に関するものであって、当該処理に対する許容できる有効な入力の少なくとも比Fに関して、当該処理によって生み出される少なくとも一つの出力信号に関して、繰り返し実行される演算の全体にわたって求めた統計的平均であって、処理が個々の入力に対して実行された時の、LPHDR演算ユニットの出力信号によって表される数値の統計的平均は、同じ入力値に対する正しい数学的計算結果に比べて、少なくともEだけ異なる。  ここで、Fは1%であり、Eは0.05%である。  いくつかの別の実施例では、Fは1%ではなく、2%、または5%、または10%、または20%、または50%の内のいずれかである。  これらの実施例の各々では、Fの値としていくつかの特定の値をとっており、Eの値として0.05%ではなく、0.1%、あるいは0.2%、あるいは0.5%、あるいは1%、あるいは2 %、あるいは5%、あるいは10%、あるいは20%のE値を有するその他の実施例がある。  これらの種々の実施例は、単に例示するものであり、本発明を限定するものではない。
【０１３４】
本発明により具体化したあるデバイス(コンピュータや、プロセッサー、あるいはその他のデバイスのようなもの)では、デバイス内(例えば、コンピュータや、プロセッサー、あるいはその他のデバイス)のLPHDR演算要素の数は、従来の精度(すなわち、32ビットまたはそれ以上のビット数のワード長での浮動小数点演算)でハイ・ダイナミック・レンジの演算を実行するように設計されたデバイス内の演算要素の数(ゼロの場合もありうる)を超える。  NLを、デバイス内のLPHDR演算要素の合計数とし、NHを、従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計されたデバイス内の演算要素の合計数とすると、NLはT(NH)を超える。  ここで、T(  )は、ある関数を意味する。  種々の関数の中のいずれかのものが関数T(  )として使用することができる。  例えば、ある実施例では、T(NH)は20+3xNHであり、デバイス中のLPHDR演算要素の数は、もしデバイス内に演算要素があったとすれば、20+3x[デバイス内の演算要素の数]を超える。  ここで、このデバイスは、従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計されたものである。  また、別の例として、ある実施例では、デバイス内のLPHDR演算要素の数は、もしデバイス内に演算要素があったとすれば、50+5x[デバイス内の演算要素の数]を超える。  ここで、このデバイスは、従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計されたものである。  また、別の例として、ある実施例では、デバイス内のLPHDR演算要素の数は、もしデバイス内に演算要素があったとすれば、100+5x[デバイス内の演算要素の数]を超える。  ここで、このデバイスは、従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計されたものである。  また、別の例として、ある実施例では、デバイス内のLPHDR演算要素の数は、もしデバイス内に演算要素があったとすれば、1000+5x[デバイス内の演算要素の数]を超える。  ここで、このデバイスは、従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計されたものである。  また、別の例として、ある実施例では、デバイス内のLPHDR演算要素の数は、もしデバイス内に演算要素があったとすれば、5000+5x[デバイス内の演算要素の数]を超える。  ここで、このデバイスは、従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計されたものである。  本発明のある実施例は、これに限定するものではないがシリコン・チップ、あるいはスタックされたチップ、あるいはチップ・パッケージ、あるいは回路ボードのような単一の物理デバイスの中で実行されるようになっている。
そして、物理デバイスの中のLPHDR演算要素の数NL、および物理デバイスの中で従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計された演算要素の数NHは、その物理デバイスの中の個々の演算要素の合計数になる。  本発明のある実施例は、一つ以上の物理的デバイスを含むコンピュータ・システムの中で実行される。  そして、このような物理的デバイスには、これらに限定するものではないが、シリコン・チップ、あるいはスタックされたチップ、あるいはチップ・パッケージ、あるいは回路ボードの集合体であって、互いに結合され、種々の手段(バス、スイッチ、いずれかの種類のネットワーク接続、あるいはその他の通信手段)を使って互いに通信し合うようになっているものがある。  そして、このケースでは、コンピュータ・システムの中のLPHDR演算要素の数NL、およびコンピュータ・システムの中で従来の精度でハイ・ダイナミック・レンジの演算を実行するように設計された演算要素の数NHは、これらの連結された全ての物理デバイスの中の個々の演算要素の合計数になる。
【０１３５】
本発明のある実施例は、プロッセッサーあるいはプロセッサーの一部を構成することができるようになる。  このプロセッサーは、計算を実行するためのソフトウェアを稼働する能力をもったデバイスである。  かかるプロセッサーは、ソフトウェアを保存するためのメカニズム、どの処理を実施すべきかを決定するためのソフトウェアを使うメカニズム、これらの処理を実行するためのメカニズム、大量のデータを保存するためのメカニズム、特定の処理を行うソフトウェアによってデータを修正するためのメカニズム、そしてプロセッサーに接続されたデバイスと通信するためのメカニズム、を備えている。  プロセッサーは、特に限定するものではないが、フィールド・プログラマブル・アレイのような再構成可能なデバイスであっても良い。  プロセッサーは、ホスト・マシンをアシストするためのコプロセッサーであっても良いし、外部のホスト・マシンから独立して演算処理できる能力を有するものであっても良い。  プロセッサーは、CPUs、GPUs、FPGAs、その他のプロセッサーやその他のデバイスのような、種々のタイプのホスト・プロセッサーおよびコプロセッサーのコンポーネントの集合体として形成されるものであっても良い。
そしてこれは、異機種環境のプロセッサー・デザイン、あるいは異種環境のコンピュータ・システムとして言及されるものであり、これらの内のいくつか、あるいはこれらの全てのコンポーネントは、本発明の実施例と同じか、そのバリエーションに含まれるものである。
【０１３６】
しかし、本発明の実施例は、プロセッサーに追加されたデバイス、あるいはプロセッサー以外のデバイスにおいて実行することができる。  例えば、プロセッサーとその他のコンポーネント(データ・パスによってプロセッサーに接続されたメモリのようなもの)を含むコンピュータは、本発明の実施例の一例である。  ここで、プロセッサーは、本明細書で開示したいずれかの方法によりLPHDR処理を行うためのコンポーネントを含んでいる。
更に一般的には、プロセッサーという意味の範疇に入るか否かは別として、ここで開示した機能を実行するいずれかのデバイスまたはデバイスの組み合わせは、本発明の実施例に関する一例を構成するものである。
【０１３７】
更に一般的には、ここで開示した技術のいずれかは、例えば、ハードウェア、コンピュータ読み取り可能な媒体に確実に記憶されたソフトウェア、ファームウェア、あるいはこれらの組み合わせによって実行される。  ここで述べた技術は、プロセッサー、プロセッサーによる読み取り可能な記憶媒体(例えば、揮発性あるいは非揮発性のメモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも一つの出力デバイスを備えたプログラマブル・コンピュータ上で実行される一つまたはそれ以上のコンピュータ・プログラムによって実行することができる。プログラム・コードは、上述した機能を実行し出力を生み出すために、入力デバイスを使って、入力される。  出力は、一つまたはそれ以上の出力デバイスに供給される。
【０１３８】
後で述べるクレームの範囲内となる各コンピュータ・プログラムは、アッセンブリ言語、機械言語、ハイレベルなプロシージャル・プログラミング言語、あるいは、オブジェクト・オリエンテッド言語のように、どのようなプログラミング言語であっても実行することができる。  例えば、プログラミング言語はコンパイルされ、解釈される。
【０１３９】
かかるコンピュータ・プログラムの各々は、コンピュータ・プロセッサーによって実行するために、マシンによる読み取り可能な記憶デバイスの中に確実に具体化されたコンピュータ・プログラム製品の形態で実行される。  この発明の手法は、入力を処理し出力を生み出すことによって発明の機能を実行させるために、コンピュータによる読み取り可能な記憶媒体の中に確実に具体化されたプログラムを稼働させるコンピュータ・プロセッサーによって実行される。  適切なプロッセッサーには、例えば、汎用目的および特殊用途目的の両方のマイクロプロセッサーが含まれる。  一般的に、このプロセッサーは、命令とデータをリード・オンリー・メモリおよび/またはランダム・アクセス・メモリから受けとる。  コンピュータ・プログラム命令を確実に具体化するのに適した記憶デバイスには、例えば、EPROMやEEPROMを含む半導体メモリ・デバイス、フラッシュ・メモリ・デバイス、内部ハードディスクやリムーバブル・ディスクなどの磁気ディスク、光-磁気ディスク、及びCR-ROMs等の全てのタイプの非揮発性のメモリがある。  ここで述べたもののいずれもが、特別に設計されたASICs (Application-Specific Integrated Circuits)やFPGAs(Field-Programmable Gate Arrays)によって取り込まれ、実行することができるものである。  また、コンピュータは、一般に、内部ハードディスク(図示せず)あるいはリムーバブル・ディスクのような記憶媒体からプログラムとデータを受け取る。  これらの要素は、従来のデスクトップやワークステーションコンピュータ、そしてここで述べた方法を実行するコンプュータ・プログラムを駆動するのに適したその他のコンピュータにおいても見いだされるものである。  そしてこれらの要素は、デジタル・プリント・エンジンやマーキング・エンジン、ディスプレイ・モニター、および、紙、フィルム、ディスプレイ・スクリーンあるいはその他の出力媒体の上にカラーやグレー・スケールのピクセルを出力する機能を持った、その他のラスター・アウトプット・デバイスと共に使用されるものである。
【図１】
2020074074.tif 000004
【図２】
2020074074.tif 000005
【図３】
2020074074.tif 000006
【図４】
2020074074.tif 000007
【図５】
2020074074.tif 000008
【図６】
2020074074.tif 000009
【手続補正書】
【提出日】令和1年10月30日(2019.10.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の低精度ハイ・ダイナミック・レンジ（ＬＰＨＤＲ）演算実行ユニットであって、第２の浮動小数点表示による第２の数値を表す第１の出力信号を生み出すために、第１の浮動小数点表示による第１の数値を表す第１の入力信号に対して第１の処理を実行するように構成されており、
前記第１の処理への許容できる有効な入力のダイナミック・レンジは、少なくとも1/1,000,000から1,000,000までの幅を有し、
前記第１の処理への前記許容できる有効な入力の数に対する割合X（少なくともＸは10%）の入力について、前記第１の出力信号によって表される数値は、同じ入力についての前記第１の処理の数学的に正確な計算結果に対し、誤差Yを少なくとも0.2%有する、複数のＬＰＨＤＲ演算実行ユニットを備え、
前記LPHDR演算実行ユニットの数は、少なくとも３２ビットのワード長を持つ浮動小数点数について、浮動小数点乗算を行うように設計された、デバイス内の演算要素の数より多く、
前記演算要素は０個以上である、デバイス。
【請求項２】
前記第１の浮動小数点表示と前記第２の浮動小数点表示とは同一である、請求項１に記載のデバイス。
【請求項３】
前記第１の浮動小数点表示と前記第２の浮動小数点表示とは異なる、請求項１に記載のデバイス。
【請求項４】
前記第１の処理は、浮動小数点乗算である、請求項１から３のいずれか一項に記載のデバイス。
【請求項５】
前記ＬＰＨＤＲ演算ユニットの数は、前記演算要素の数の３倍と、２０とを加算した値より大きい、請求項１から４のいずれか一項に記載のデバイス。
【請求項６】
前記割合Xは、２０％である、請求項１から５のいずれか一項に記載のデバイス。
【請求項７】
前記誤差Yは、０．５％である、請求項１から５のいずれか一項に記載のデバイス。
【請求項８】
前記割合Xは、２０％であり、且つ、前記誤差Yは、０．５％である、請求項１から５のいずれか一項に記載のデバイス。
【請求項９】
前記第１の処理への前記許容できる有効な入力の前記ダイナミック・レンジは、少なくとも1/1,000,000,000から1,000,000,000の幅を有する、請求項１から８のいずれか一項に記載のデバイス。