(57)【特許請求の範囲】
【請求項１】
プログラマブル集積回路上に格子状に配列された複数のディシジョン・ツリー・クラスターを備えるディシジョン・ツリー採点ハードウェア・システムであって、
前記複数のディシジョン・ツリー・クラスターの各々は、
各々が並列に実行可能な１又は複数のディシジョン・ツリーを有する複数のディシジョン・ツリー・プロセッサーと、
二重バッファ型特徴ストレージであって、第１の組の共通特徴ベクトルを前記二重バッファ型特徴ストレージに書き込むことと、前記複数のディシジョン・ツリー・プロセッサーの各々に対して、前記二重バッファ型特徴ストレージに格納された第２の組の共通特徴ベクトルへのアクセスを提供することとを、同時に行うように構成された二重バッファ型特徴ストレージと、
を備え、
各々が第１の複数の全体ディシジョン・ツリーを有する前記複数のディシジョン・ツリー・クラスターの部分集合は、前記複数のディシジョン・ツリー・クラスターのうちの隣接する少なくとも１つから、第２の複数の全体ディシジョン・ツリーの実行によって生成されたスコア・データーを受け取るように構成され、
前記複数のディシジョン・ツリー・クラスターの前記部分集合の各々は、前記受け取られたスコア・データーを前記ディシジョン・ツリー・クラスター内の前記第１の複数の全体ディシジョン・ツリーから生成されたスコア・データーとともに処理して、総合スコア・データーを生成するように構成される、
ディシジョン・ツリー採点ハードウェア・システム。
【請求項２】
前記複数のディシジョン・ツリー・プロセッサーのうちの第１のものが、更に、前記第２の組の共通特徴ベクトルに関する前記ディシジョン・ツリーのうちの第１のものを、前記ディシジョン・ツリー・プロセッサーのうちの第２のものによる前記第２の組の共通特徴ベクトルに関する前記ディシジョン・ツリーのうちの第２のものの実行と同時に実行する、請求項１に記載のディシジョン・ツリー採点ハードウェア・システム。
【請求項３】
前記複数のディシジョン・ツリー・プロセッサーの第２の部分集合と、前記第２の組の共通特徴ベクトルを格納するための特徴ストレージとを備えたディシジョン・ツリー・クラスターを更に備え、前記特徴ストレージは、前記ディシジョン・ツリー・クラスター内の前記複数のディシジョン・ツリー・プロセッサーの前記第２の部分集合によってアクセス可能である、請求項１に記載のディシジョン・ツリー採点ハードウェア・システム。
【請求項４】
第１のディシジョン・ツリー・クラスター及び第２のディシジョン・ツリー・クラスターを更に備え、
前記第１のディシジョン・ツリー・クラスターは、
前記複数のディシジョン・ツリー・プロセッサーの第１の部分集合と、
前記複数のディシジョン・ツリー・プロセッサーの前記第１の部分集合によってアクセス可能な、前記第２の組の共通特徴ベクトルを格納するための第１の特徴ストレージと、
を備え、
前記第２のディシジョン・ツリー・クラスターは、
前記複数のディシジョン・ツリー・プロセッサーの第２の部分集合と、
前記複数のディシジョン・ツリー・プロセッサーの前記第２の部分集合によってアクセス可能な、前記第２の組の共通特徴ベクトルを格納するための第２の特徴ストレージと、
を備える、請求項１に記載のディシジョン・ツリー採点ハードウェア・システム。
【請求項５】
前記ディシジョン・ツリー・プロセッサーの少なくとも１つが、前記１又は複数のディシジョン・ツリーの実行の結末に基づいてスコアを出力し、前記ディシジョン・ツリー採点ハードウェア・システムが、更に、前記ディシジョン・ツリー・プロセッサーによって出力されたスコアを収集するためのスコア集計ネットワークを備える、請求項１に記載のディシジョン・ツリー採点ハードウェア・システム。
【請求項６】
ディシジョン・ツリー・プロセッサーの部分集合を備えるディシジョン・ツリー・クラスターの第２の部分集合であって、前記ディシジョン・ツリー・クラスターの第２の部分集合のうちの第１のものが、前記ディシジョン・ツリー・クラスターの第２の部分集合のうちの第２のものから共通の１組の特徴を受け取り、前記共通の１組の特徴を前記ディシジョン・ツリー・クラスターの第２の部分集合のうちの第３のものに伝搬させる、ディシジョン・ツリー・クラスターの第２の部分集合と、
前記共通の１組の特徴を前記複数のディシジョン・ツリー・プロセッサーの各々に供給するように前記複数のディシジョン・ツリー・プロセッサーに結合された特徴ネットワークと、
のうちの一方又は両方を更に備える、請求項１に記載のディシジョン・ツリー採点ハードウェア・システム。
【請求項７】
プログラマブル集積回路上に格子状に配列された複数のディシジョン・ツリー・クラスターの各々において、当該各々が有する二重バッファ型特徴ストレージに第１の共通特徴ベクトルを同時に書き込むステップであって、前記複数のディシジョン・ツリー・クラスターの各々は、オンチップ・ディシジョン・ツリー採点システム内に実装された複数のディシジョン・ツリー・プロセッサーを有する、ステップと、
前記複数のディシジョン・ツリー・プロセッサーの各々において、第２の共通特徴ベクトルを受け取るステップと、
前記複数のディシジョン・ツリー・プロセッサーの各々において、前記第２の共通特徴ベクトルを参照して、１又は複数のディシジョン・ツリーを並列に実行するステップと、
各々が第１の複数の全体ディシジョン・ツリーを有する前記複数のディシジョン・ツリー・クラスターの部分集合によって、前記複数のディシジョン・ツリー・クラスターのうちの隣接する少なくとも１つから、第２の複数の全体ディシジョン・ツリーの実行によって生成されたスコア・データーを受け取るステップと、
前記複数のディシジョン・ツリー・クラスターの前記部分集合の各々によって、前記受け取られたスコア・データーを前記ディシジョン・ツリー・クラスター内の前記第１の複数の全体ディシジョン・ツリーから生成されたスコア・データーとともに処理して、総合スコア・データーを生成するステップと、
を含む方法。
【請求項８】
前記複数のディシジョン・ツリー・クラスターの少なくとも１つにおいて、前記複数のディシジョン・ツリーを実行したことの結末に基づく前記複数のディシジョン・ツリーの少なくとも１つに対するスコアを、スコア集計ネットワークに出力するステップを更に含む、請求項７に記載の方法。
【請求項９】
前記ディシジョン・ツリー・プロセッサーの少なくとも１つによって、前記二重バッファ型特徴ストレージに第３の共通特徴ベクトルをロードするステップと、
前記ディシジョン・ツリー・プロセッサーの少なくとも１つによって、前記複数のディシジョン・ツリーの少なくとも１つを実行するステップであって、前記実行するステップは、前記二重バッファ型特徴ストレージから前記第３の共通特徴ベクトルの１又は複数の特徴を読み出すステップを含む、ステップと、
を同時に行うことを更に含む、請求項７に記載の方法。
【請求項１０】
複数のディシジョン・ツリー・クラスターにわたって前記第１の共通特徴ベクトルを伝搬させるステップであって、前記伝搬させるステップは、前記複数のディシジョン・ツリー・クラスターの少なくとも１つによって、第１近隣ディシジョン・ツリー・クラスターから前記第１の共通特徴ベクトルを受け取るステップを含む、ステップと、
前記複数のディシジョン・ツリー・クラスターの少なくとも１つによって、前記第１の共通特徴ベクトルを第２近隣ディシジョン・ツリー・クラスターに受け渡すステップと、
を更に含む、請求項７に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ディシジョン・ツリー(decision tree)とは、ディシジョン・ノードと、左および右サブツリーおよび／またはリーフから成る二進検索ツリーである。ディシジョン・ノードは、行われる判断を含む。ブランチ(blanch)は、ディシジョン・ノードから他のディシジョン・ノードまたはリーフ・ノードに至り、ブランチの内の１つの選択は、ディシジョン・ノードにおいて行われる判断に基づく。判断の例には、特徴値および閾値のような２つの値の比較が含まれる。特徴値が閾値以下である場合、左サブツリーが選択される。特徴値が閾値より大きい場合、右サブツリーが選択される。ブランチは次のノードに続き、次のノードがディシジョン・ノードである場合、別の判断が行われ、リーフ・ノードに至るブランチが選択されるまでこのように続く。リーフ・ノードは、ディシジョン・ツリーの出力または終点を表す。出力の例は、ディシジョン・ツリーに対する出力値、またはスコアである。このプロセスは、ディシジョン・ツリーを探索する(walk)と呼ばれる。
【０００２】
[0002]  用途の中でもとりわけ、ディシジョン・ツリーは文書検索において文書を分類する(rank)するために使用される。一例では、ディシジョン・ツリーは、特定の項目（例えば、ウェブ・ページ）の特定の検索クエリーに対する関連性を計算するために使用される。初期の１組の候補検索結果文書が得られ、候補検索結果文書に対する特徴ベクトルが生成される。特徴ベクトルは、候補検索結果文書の種々の側面（例えば、文書統計）を表す。特徴の一例は、検索クエリー単語が候補文書に現れる回数である。各ディシジョン・ツリー・ノードは、閾値と特徴識別子とを含み、候補検索結果文書に対する特徴値を参照するために使用することができる。ディシジョン・ツリーを探索し、このツリー探索(tree-walking)プロセスは最終的にリーフ・ノードに到達し、関連するスコアを出力する。スコア（または１つよりも多いディシジョン・ツリーが使用される場合には多数のスコア）が、候補検索結果の関連性を判断するために使用される。多数の文書の相対的なスコアが、文書を分類するために使用される。
【０００３】
[0003]  検索以外にも、ディシジョン・ツリーには種々の用法がある。ディシジョン・ツリーは、ジェスチャー認識、音声認識、データー・マイニング、およびその他のタイプの計算を実施するために使用される。
【発明の概要】
【０００４】
[0004]  この摘要は、詳細な説明において以下で更に説明する本開示の簡略化した形態を紹介するために設けられている。この摘要は、特許請求する主題の必須の特徴を識別することを意図するのではなく、特許請求する主題の範囲を判断するときの使用を意図するのでもない。
【０００５】
[0005]  本明細書の実施形態は、ディシジョン・ツリー採点(scoring)のハードウェア実施態様を含み、従来のソフトウェアに基づくディシジョン・ツリー採点よりも速いディシジョン・ツリー採点を可能にする。このディシジョン・ツリー採点システムのオンチップ(on-chip)アーキテクチャは、１つ以上の特殊またはプログラマブル・ロジック回路上に並列に実装された複数のディシジョン・ツリー・プロセッサーを含む。オンチップ・アーキテクチャの最上位には、ディシジョン・ツリー・スコアラー（ＤＴＳ：decision tree scorer）があり、上流側の計算システム・ホストまたは処理システムから特徴ベクトル（例えば、複数組の特徴値）を受け取り、この特徴ベクトルを第１ディシジョン・ツリー・クラスター（ＤＴＣ）に送り、ディシジョン・ツリー・クラスターからスコアを受け取り、結果をホストまたは他の下流側システムに出力する。階層の次のレベルでは、複数のディシジョン・ツリー・クラスター（ＤＴＣ）がそれら自体の間で特徴ベクトルを分散し、ディシジョン・ツリー・プロセッサーからのスコアを処理して、近隣のＤＴＣおよびＤＴＳに伝搬する。ＤＴＣは、１つ以上のディシジョン・ツリー・プロセッサーと、１つ以上の特徴格納タイル（ＦＳＴ）とを含む。特徴値および閾値圧縮が、ディシジョン・ツリー採点システムに必要な帯域幅およびストレージを低減する。
【図面の簡単な説明】
【０００６】
[0006]  添付図面を参照して詳細な説明を明記する。図面では、参照番号の左側の数字（１つまたは複数）は、その参照番号が最初に現れる図を識別する。異なる図面において同じ参照番号が使用されるときは、同様または同一の項目を示す。
【図１】図１は、種々の実施形態にしたがって、１つ以上のハードウェアで実現したディシジョン・ツリー・スコアラーを含むディシジョン・ツリー採点システム例のブロック図である。
【図２】図２は、本開示の種々の実施形態によるディシジョン・ツリー・コード化を示す。
【図３】図３は、実数線(real number line)上における一意の閾値のリスト例を示す。
【図４】図４は、種々の実施形態によるディシジョン・ツリー・スコアラーのアーキテクチャ例を示す。
【図５】図５は、種々の実施形態によるディシジョン・ツリー・クラスターのアーキテクチャ例を示す。
【図６】図６は、種々の実施形態によるディシジョン・ツリー・プロセッサーのマルチステージ、マルチスレッド、パイプライン型ツリー探索実施態様を示す。
【図７】図７は、種々の実施形態にしたがって、ディシジョン・ツリー・ノードを実行するプロセス例を示すフロー・グラフを表す。
【図８】図８は、種々の実施形態にしたがって、ディシジョン・ツリー・スコアラーによって複数のディシジョン・ツリーの特徴ベクトルを採点するプロセスを示す。
【図９】図９は、種々の実施形態にしたがって、ディシジョン・ツリー・クラスターによって複数のディシジョン・ツリーを採点するプロセスを示す。
【図１０】図１０は、種々の実施形態にしたがって、複数のディシジョン・ツリーの閾値をコード化するプロセスを示す。
【図１１】図１１は、種々の実施形態にしたがって、１組の特徴値をコード化するプロセスを示す。
【図１２】図１２は、本明細書において説明する種々の方法を実行するために使用可能な計算システム例のブロック図である。
【発明を実施するための形態】
【０００７】
全体像
[0019]  本明細書の実施形態は、ディシジョン・ツリー採点(scoring)のハードウェア実施態様を含み、従来のソフトウェアに基づくディシジョン・ツリー採点よりも速いディシジョン・ツリー採点を可能にする。ハードウェアの実施態様は、ディシジョン・ツリー・プログラムを実行する、回路として実装された１つ以上のディシジョン・ツリー・プロセッサーを含む。ディシジョン・ツリー・プログラムとは、ディシジョン・ツリー・プロセッサーによって実行可能なプログラムまたは他のデーターに変換されたディシジョン・ツリーのことである。ディシジョン・ツリー・プログラムは、ディシジョン・ツリー・テーブルを含み、このディシジョン・ツリー・テーブルは、種々のディシジョン・ノード、特徴識別子、閾値、およびディシジョン・ツリーに対する出力値を含む。ディシジョン・ツリー・プロセッサーのある実施形態は、マルチステージおよび／またはマルチスレッドの様式でディシジョン・ツリーを探索する。マルチスレッドの実施形態では、ディシジョン・ツリー・プロセッサーの各ステージが異なるディシジョン・ツリー・スレッドを実行する。つまり、ｎ段マルチスレッドディシジョン・ツリー・プロセッサーは、サイクル当たりｎ個までのディシジョン・ツリーの部分を同時に実行する。
【０００８】
[0020]  実施形態は、ディシジョン・ツリー・プロセッサー内部において実行されるディシジョン・ツリーをコード化、圧縮、および／またはコンパイルするプロセス、システム、および装置を含む。種々の実施形態では、ディシジョン・ツリーにおいて間にブランチがあるノードの一部が、ディシジョン・ツリー・テーブルにおける特定のノードに隣接するように、ノードを配置することによって、ディシジョン・ツリーからポインターを排除する。他のノードは、オフセットまたはデルタ値のような、次のノード・データーによって識別される。リーフ値は、ディシジョン・ツリー・ノード表現の一部であり、別個のリーフ・ノード・エントリーの一部ではない。
【０００９】
[0021]  ある実施形態では、特徴値および閾値圧縮によって、ディシジョン・ツリー採点システムに必要な帯域幅およびストレージが削減される一方、実施形態が処理することができる作業負荷のサイズは増大する。この説明のある実施形態では、１つ以上のディシジョン・ツリーにおいて特定の特徴と比較される閾値毎に、並び替えリスト(sorted list)が作られ、閾値インデックスが閾値に割り当てられる。可能な閾値の総数は多いが（例えば、ある実施形態では、３２ビット浮動小数点数によって表される）、複数のディシジョン・ツリーにおける特定の特徴に対する実際の閾値の総数は、実際には遙かに少なく、大抵の場合２５５以下の閾値である（しかし、それよりも多い数の閾値も可能である）。密(dense)または疎(non-dense)固定小数点小整数閾値インデックスが作られる。閾値インデックスは、０から閾値の総数までとすればよく、したがって、４ビット、８ビット、または他のｎビット固定少数点値によって表すことができる。他の実施形態では、閾値インデックスが負数(negative number)であってもよく、更に０、２、４、６、または他の不連続整数値のような、不連続整数値を含んでもよい。また、閾値インデックスの特徴値インデックスとの比較が、元の非圧縮閾値の元の非圧縮特徴値との比較と同等となるように、特徴値はｎビット固定小数点特徴値インデックスとしてコード化される。
【００１０】
[0022]  ある実施形態では、複数のディシジョン・ツリー・プロセッサーが、１つ以上の特殊またはプログラマブル・ロジック回路上に並列に実装される。ある実施形態では、複数のディシジョン・ツリー・プロセッサーは、共通の特徴ベクトルに関して、ディシジョン・ツリーを実行する、または同時に実行する。オンチップ・アーキテクチャの最上位には、ディシジョン・ツリー・スコアラー（ＤＴＳ）があり、このディシジョン・ツリー・スコアラー（ＤＴＳ）は、上流側計算システム・ホストまたは処理システムから特徴ベクトル（例えば、複数組の特徴値）を受け取り、これらの特徴値を第１判断ツリー・クラスター（ＤＴＣ）に送り、ディシジョン・ツリー・クラスターからスコアを受け取り、この結果をホストまたは他の下流側システムに出力する。この階層の次のレベルでは、複数のディシジョン・ツリー・クラスター（ＤＴＣ）がこれら自体の間で特徴ベクトルを分散し、ディシジョン・ツリー・プロセッサーからのスコアを近隣のＤＴＣおよびＤＴＳに伝搬する。この階層の次のレベルでは、ＤＴＣが１つ以上のディシジョン・ツリー・プロセッサーと、１つ以上の特徴ストレージ・タイル（ＦＳＴ）とを含む。ディシジョン・ツリー・プロセッサーは、共通の特徴ベクトルに関して多数のディシジョン・ツリーを同時に実行するために、マルチスレッド型にすることができる。ＦＳＴは、複数のディシジョン・ツリーと対照して(against)採点される特徴ベクトルを格納し、ある実施形態では、１組の特徴がＦＳＴに書き込まれ、他の１組の特徴がディシジョン・ツリー・プロセッサーによって採点のためにアクセスされることを可能にするために、二重バッファ型(double-buffered)となる。
【００１１】
[0023]  本明細書において説明する実施形態は、ＡＳＩＣにおけるような特殊ハードウェア、またはＦＰＧＡのようなプログラマブル・ロジック・デバイスにおける実装を受け入れる(amenable)ことができる。また、実施形態の種々の態様は、マルチコア・プロセッサー、システム・オン・チップ（ＳｏＣ）（例えば、ＳｏＣ上における１つ以上のディシジョン・ツリー採点コア）、および／または拡張命令セットを有する汎用プロセッサーにおける実装を受け入れることができ、したがって部分的にまたは全体的に１つ以上の原子プロセッサー命令に応答してディシジョン・ツリーを実行することができる。本明細書において説明するデバイス、プロセス、およびシステムは、多数の方法で実現することができる。以下の図を参照しながらこれより実施態様例について示す。
ディシジョン・ツリー採点システムの例
[0024]  図１は、種々の実施形態による、１つ以上のハードウェア実装型ディシジョン・ツリー・スコアラー１０２を含むディシジョン・ツリー採点システム例１００のブロック図である。ホスト１０４は、ディシジョン・ツリーを、ディシジョン・ツリー・スコアラー１０２上における実行のためのモデル・コンテキスト１０８にコード化するディシジョン・ツリー・コーダー１０６を含む。以下で更に詳しく説明するが、ディシジョン・ツリー・コーダー１０６は、可変長ノードを使用するディシジョン・ツリーを表し、サブツリー・ポインターは隣接性(adjacency)およびオフセットによって排除され、リーフ値がノード表現に含まれ、閾値が閾値インデックス値としてコード化される。ディシジョン・ツリー・コーダー１０６は、ディシジョン・ツリー・スコアラー１０２にロードされるディシジョン・ツリーを増やすことを可能にするために、ディシジョン・ツリーのサイズを縮小する。加えてまたは代わりに、ディシジョン・ツリー・コーダー１０６は、他の圧縮技法を使用して、モデル・コンテキスト１０８のディシジョン・ツリー・データー（またはコード化ディシジョン・ツリー・データー）を圧縮することもできる。これらの実施形態では、ディシジョン・ツリー・スコアラー１０２または他のオンチップ・ロジックは、ディシジョン・ツリー・スコアラー１０２上における採点のために、圧縮されたディシジョン・ツリーまたはコード化されたディシジョン・ツリー・データーを伸長するように構成されている。
【００１２】
[0025]  また、ホスト１０４は、特徴ベクトル・コーダー１１０も含む。特徴ベクトル・コーダー１１０は、ディシジョン・ツリー・スコアラー１０２に必要な帯域幅およびストレージを低減し、特徴ベクトル１１２をコード化モデル・コンテキスト１０８と共用できるようにし、モデル・コンテキスト１０８および特徴ベクトル１１２を、本明細書の種々の実施形態において説明するように特殊ハードウェアによって一層容易に処理される形式にする(place)ために、特徴ベクトル内部の特徴値をコード化する。この詳細な説明における他のところで更に詳細に説明するが、特徴ベクトル・コーダー１１０は、モデル・コンテキスト１０８内における特徴インデックス値の閾値インデックス値との比較が、対応する特徴値および閾値の比較と同等になるように、特徴に対して特徴インデックス値を選択する。
【００１３】
[0026]  ホスト１０４は、ディシジョン・ツリー採点ジョブをスケジューリングするディシジョン・ツリー採点スケジューラー１１４を含む。ホスト１０４は、特徴ベクトル１１２およびモデル・コンテキスト１０８を受け取り、または特徴ベクトル１１２の種々のものを、モデル・コンテキスト１０８の種々のものと対照して(against)採点することを決定する。１組のディシジョン・ツリー採点ジョブの例は、
特徴ベクトル１／モデル・コンテキストＡ
特徴ベクトル２／モデル・コンテキストＢ
特徴ベクトル３／モデル・コンテキストＡ
特徴ベクトル４／モデル・コンテキストＢ
を含む。
【００１４】
[0027]  一般に、新たなモデル・コンテキストをディシジョン・ツリー・スコアラー１０２にロードする方が、新たな特徴ベクトルをディシジョン・ツリー・スコアラー１０２にロードするよりも長い時間がかかるので、ディシジョン・ツリー採点スケジューラー１１４は、新たなモデル・コンテキスト１０８がディシジョン・ツリー・スコアラー１０２にロードされる回数を減らすために、判断採点ジョブを配列し直す。以上の例を続けると、ディシジョン・ツリー採点ジョブは、以下のように配置し直される。
【００１５】
特徴ベクトル１／モデル・コンテキストＡ
特徴ベクトル３／モデル・コンテキストＡ
特徴ベクトル２／モデル・コンテキストＢ
特徴ベクトル４／モデル・コンテキストＢ
[0028]  検索の分野では、モデル・コンテキストは、実行されるあるタイプの検索に関連付けられた１組のディシジョン・ツリーとなる。異なる複数組のディシジョン・ツリーを利用する検索コンテキストの例には、言語（英語のクエリーでの検索は、ドイツ語クエリーで検索が実行される異なるモデル・コンテキストを使用して、実行することもできる）、画像検索、ニュース検索、ビデオ検索等がある。他の検索コンテキストには、別個のモデル・コンテキストを必要とするものもある。
【００１６】
[0029]  ホスト１０４は、インターフェース１１８および１２０のような、データーパス・インターフェースを介して、１つ以上の特殊またはプログラマブル・ロジック・デバイス１１６に通信可能に結合されるように構成される。インターフェース１１８および１２０は、種々の実施形態では、周辺素子インターフェース・エクスプレス(PCI-Express)インターフェースであるが、他のインターフェース・タイプおよび仕様も、実施形態の範囲から逸脱することなく、使用することができる。インターフェース・タイプの判定は、インターフェース帯域幅目標(interface bandwidth target)に基づくことができ、一方、インターフェース帯域幅目標は、ディシジョン・ツリー採点システム１００に対するスループット目標に基づくことができる。特定の例では、目標処理速度が検索文書採点当たり１マイクロ秒である場合、本明細書において説明するディシジョン・ツリーおよび特徴圧縮技法を使用すると、その結果、特徴ベクトル当たり約２〜８ＫＢの帯域幅目標（例えば、候補検索結果文書毎）、または１秒当たり約２〜８ＧＢの帯域幅目標となる。ＰＣＩ−Ｅｘｐｒｅｓｓがこの目標に適しているが、他のインターフェース・タイプおよび仕様もこの目標または他の目標に適していることもある。また、実施形態の範囲から逸脱せずに、１つの高速インターフェースの代わりに、多数のインターフェースを使用してもよい。
【００１７】
[0030]  以下で更に詳しく説明するが、ホスト１０４は、計算システムの１つ以上の汎用プロセッサーによって実行可能な複数のプログラミング命令として実現することもできる。しかしながら、ホスト１０４の１つ以上の態様は、特殊またはプログラマブル・ロジック回路（ＡＳＩＣチップまたはＦＰＧＡチップのような）上に実装されてもよい。
【００１８】
[0031]  ディシジョン・ツリー・スコアラー１０２は、１つ以上のディシジョン・ツリー・クラスター１２２を含む。ディシジョン・ツリー・クラスター１２２は、それらの間でモデル・コンテキスト１０８および特徴ベクトル１１２を分散するように構成されている。代わりにまたは加えて、ディシジョン・ツリー・スコアラー１０２は、モデル・コンテキスト１０８および／または特徴ベクトル１１２をディシジョン・ツリー・スコアラー１０２全域に渡すために相互接続ネットワークを含んでもよい。また、ディシジョン・ツリー・クラスター１２２は、近隣のディシジョン・ツリー・クラスター１２２から、またはディシジョン・ツリー・クラスター１２２内部におけるディシジョン・ツリー・プロセッサー１２４からのディシジョン・ツリー・スコアを処理し伝搬するように構成されている。ディシジョン・ツリー・クラスター１２２は、ディシジョン・ツリー・プロセッサー１２４および近隣のディシジョン・ツリー・クラスターから受け取ったスコアを処理し（ディシジョン・ツリー・スコアを合計することを含んでもよい）、処理したスコア（例えば、合計されたスコア）を他の近隣ディシジョン・ツリー・クラスター１２２に伝搬するように構成されている。これについては、詳細な説明における他のところで更に詳細に説明する。ディシジョン・ツリー・スコアラー１０２は、ディシジョン・ツリー・クラスター１２２の１つから、ディシジョン・ツリー採点ジョブに対する最終スコア（例えば、スカラーまたはベクトル量）を受け取り、このスコアをホスト１０４または他の下流側のデバイスに出力するように構成されている。
【００１９】
[0032]  ディシジョン・ツリー・プロセッサー１２４は、並列にそして特徴ベクトル１１２の共通のものと同時に対照して、または特徴ベクトル１１２の異なるものと対照してというように、実施態様に応じて、１つ以上のモデル・コンテキスト１０８のディシジョン・ツリーを実行する回路を含む。特徴ストレージ１２６の異なるものは、特徴ベクトル１１２の共通のもの、または特徴ベクトル１１２の異なるもののいずれでも格納することができる。各ディシジョン・ツリー・クラスター１２２内部の特徴ストレージ１２６は、特徴ベクトル１１２の内同じものまたは異なるものを格納することができる。
【００２０】
[0033]  本明細書において使用する場合、ディシジョン・ツリー・プロセッサー１２４は、ディシジョン・ツリーを採点する回路を含む。ディシジョン・ツリー・プロセッサー１２４は、ディシジョン・ツリーを採点する回路、およびディシジョン・ツリー・コア自体の双方を含むことができ、ディシジョン・ツリー・テーブルとして具体化され、ディシジョン・ツリー・プロセッサー１２４にアクセス可能な何らかのメモリーに格納される。１つ以上のディシジョン・ツリー・テーブルは、ディシジョン・ツリー・プロセッサー１２４内にハード・コード化され、ディシジョン・ツリー・プロセッサー１２４内部のメモリーに格納され、またはディシジョン・ツリー・プロセッサー１２４に他の方法で関連付けられ通信可能に結合されたメモリーに格納されてもよい。ディシジョン・ツリー・テーブルが格納されるメモリーは、共有ストレージでも専用ストレージでもよく、ランダム・アクセス・メモリー（ＲＡＭ）、フラッシュ・メモリー、リード・オンリー・メモリー（ＲＯＭ）、またはその他のメモリー・タイプでもよい。ディシジョン・ツリー・テーブルが格納されるメモリーは、オン・ダイ・メモリーのように、ダイ上にあってもよく、または高速メモリー・インターフェースを介して通信可能に結合されてもよいというような、チップ外部の外付けメモリー上にあってもよい。モデル・コンテキストは、共有または専用メモリー内部に共存してもよい。ある実施形態では、ホスト１０４がモデル・コンテキスト１０８をディシジョン・ツリー・スコアラー１０２および／またはオンチップまたは外付けメモリーに供給することもできる。ホスト１０４は、作業負荷をスケジューリングするとき、ディシジョン・ツリー・スコアラー１０２に、ディシジョン・ツリー・プロセッサー１２４によってロードされるまたは他の方法でアクセスされ実行されるべきモデル・コンテキスト１０８の指示を与えることができる。ある実施形態では、ディシジョン・ツリー・テーブルを格納するメモリーには２つのレベルがあってもよい。第１レベルのメモリー（オンチップまたは外付けメモリーでもよく、更に１つ以上のディシジョン・ツリー・プロセッサー１２４と共有でも専用でもよい）には、現在の作業負荷要件にしたがって実行される特定の１つまたは複数のディシジョン・ツリー・テーブルがロードされる、またはロード可能である。第２レベルのメモリー（オンチップまたは外付けメモリーでもよく、更に１つ以上のディシジョン・ツリー・プロセッサー１２４と共有でも専用でもよい）は、１つ以上の共存するモデル・コンテキストを格納することができ、その全てまたは一部は、第１レベルのディシジョン・ツリー・テーブル・メモリー上にロード可能である。
【００２１】
[0034]  ホスト１０４は、特徴ベクトル１１２の内共通のものを複数の特殊またはプログラマブル・ロジック・デバイス１１６に供給することができ、更に、１つのモデル・コンテキスト１０８のディシジョン・ツリー・テーブルを複数の特殊またはプログラマブル・ロジック・デバイス１１６供給することができる。つまり、複数の特殊またはプログラマブル・ロジック・デバイス１１６にわたる個々のディシジョン・ツリー・クラスター１２２およびディシジョン・ツリー・プロセッサー１２４は、１つのモデル・コンテキスト１０８のディシジョン・ツリーを、特徴ベクトル１１２の内共通のものと対照して採点することができる。複数の特殊またはプログラマブル・ロジック・デバイス１１６の各々からのスコア・データーは、この詳細な説明における他のところで説明するように、複数の特殊またはプログラマブル・ロジック・デバイス１１６の各々内部において伝搬され、更にホスト１０４まで戻って来ることができる。ある実施形態では、スコア・データーは、第１特殊またはプログラマブル・ロジック・デバイス１１６から他の特殊またはプログラマブル・ロジック・デバイス１１６に渡されてもよく、次いで、他の特殊またはプログラマブル・ロジック・デバイス１１６が更にスコア・データー（スコアを合計するまたは添付する、またはスコアの合計を添付することによるというような）を伝搬して、特殊またはプログラマブル・ロジック・デバイス１１６双方に対する総合スコア・データー(combined score data)を生成することもできる。
【００２２】
[0035]  実施形態の範囲から逸脱せずに、スコア・データーを処理する他の方法も可能である。例えば、各ディシジョン・ツリー・スコアラー１０２が、スコアまたはスコアの合計のリストを、ディシジョン・ツリー・スコアラー１０２内部のディシジョン・ツリー・プロセッサー１２４および／またはディシジョン・ツリー・クラスター１２２から受け取り、最終的な合計値をホスト１０４、他のプログラマブル・ロジック・デバイス１１６、あるいは他の何らかの下流側デバイスに供給することができる。ディシジョン・ツリー・スコアラー１０２は、スコア（またはスコアの合計）のリストをホスト１０４、他のプログラマブル・ロジック・デバイス１１６、または他の下流側のデバイスに供給することができる。ホスト１０４、他のプログラマブル・ロジック・デバイス１１６、または他の下流側のデバイスは、採点を合計するアルゴリズムまたは他の何らかのアルゴリズムを実行することによってというようにして、特徴ベクトル１１２の最終的な採点を実行して、複数の特殊またはプログラマブル・ロジック・デバイス１１６の内１つ以上からのスコア・データーに基づいてというようにして、特徴ベクトル１１２に対して最終的な採点を判定することができる。
【００２３】
[0036]  ある実施形態では、特殊またはプログラマブル・ロジック・デバイス１１６は、特定用途集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）のようなプログラマブル・ロジック・デバイス、システム・オン・チップ（ＳｏＣ）の内１つ以上であってもよく、あるいは、ディシジョン・ツリーを採点する特殊部分を有する汎用プロセッサー、他の何らかのロジック・デバイス、または以上の何らかの組み合わせの一部としてそれらに含まれてもよい。
拡張命令セットを有する汎用プロセッサー
[0037]  ある実施形態では、汎用プロセッサーの命令セット・アーキテクチャが、ディシジョン・ツリー横断、採点命令、および状態を含むように拡張される。ある実施形態では、拡張命令セットは、ディシジョン・ツリーにおいて１つのノードを探索する命令を含む。ある実施形態では、拡張命令セットは、複数のノードを探索する命令、またはルート（最上位ノード）からリーフまでディシジョン・ツリー全体を探索する命令を含む。
【００２４】
[0038]  ディシジョン・ツリーを横断する拡張命令セットを有する汎用プロセッサーによって使用可能な状態は、ディシジョン・ツリー・ノードおよび特徴ベクトル・データーの表現を含む。ディシジョン・ツリー・ノードは、データー構造、実行可能命令、または他の何らかの形態で表すことができる。データー構造として、ディシジョン・ツリーは、１つ以上のノードを含むツリーとして表すことができ、ノードは、特徴識別子、閾値、ならびに左および右サブツリー・データーを含む。左および右サブツリー・データーは、左（それぞれ、右）サブツリー・ノードまたは左（それぞれ、右）リーフ・ノードまたはリーフ・スコア値を識別することができる。特定のノードのデーターを隣接するバイト、例えば、レコードあるいは「ｓｔｒｕｃｔ」または「ｃｌａｓｓ」にバンドルすることができ、またはテーブルにわたって拡散(spread)されてもよい。ディシジョン・ツリー・ノードがデーター構造として表される場合、ツリー・ノードはデーター値、例えば、ノードのインデックスまたはポインター（機械アドレス）として識別される。１つ以上のノードを探索する命令に応答してツリー・ノードを横断することは、ツリー・ノード識別子から開始して、それが識別する特徴を引き出し、それをノードの閾値と比較し、比較の結末(outcome)を使用して、左または右サブツリーのツリー・ノード識別子、あるいは右または左リーフ／リーフ値を判定することを含む。ある実施形態では、ノードを探索する命令をここではＮＯＤＥＷＡＬＫ命令と呼ぶが、この命令は２つのパラメータ、例えば、ツリー・ノードへのポインターを収容するレジスターと、ＲＡＭにおける特徴ベクトルへのポインターを収容するレジスターを取り込むことができ、２つの値、例えば、左または右サブツリーへのポインターを収容する（リーフ・ノードがない場合）または出力値を収容する（リーフ・ノードがある場合）レジスター、およびＮＯＤＥＷＡＬＫがリーフ値に達した場合（ツリー探索を終了する）にセットされるフラグを収容する条件コード・レジスターを生成することができる。アセンブリ言語では、ツリー探索は下記を含む。
【００２５】
【表１】
0006605573.tif 000002
【００２６】
[0039]  ＮＯＤＥＷＡＬＫの他の実施形態はループ・テストおよびジャンプを１つの命令にバンドルする。
【００２７】
【表２】
0006605573.tif 000003
【００２８】
[0040]  他の実施形態では、１つの命令においてツリー全体を探索する。
【００２９】
【表３】
0006605573.tif 000004
【００３０】
[0041]  ある実施形態では、ディシジョン・ツリーは、プロセッサーによって実行される一連のツリー横断命令(tree traversal instruction)として表され、ディシジョン・ツリー横断命令を実装する。これらの命令は、ディシジョン・ツリーにおける１つのノードに対応する。これらの命令は、ビット・ストリングとして表され、特徴識別子、閾値、ならびに左および右サブツリー・ノードおよび／またはリーフおよびリーフ値の識別子を含むビット・フィールドを含む。この実施形態では、ツリー・ノードは命令（機械コード）アドレスによって識別される。したがって、ツリー探索は、左または右サブツリーのコードにジャンプするように、プログラム制御フローを変化させるツリー・ノード探索命令を実行することを含む。
【００３１】
[0042]  例えば、ディシジョン・ツリーが２つのノードで構成される場合、
【００３２】
【表４】
0006605573.tif 000005
【００３３】
[0043]  これは、次のプログラムによって表されてもよい。
【００３４】
【表５】
0006605573.tif 000006
【００３５】
ここで、ＮＯＤＥ命令は次のようにエンコードする。
【００３６】
【表６】
0006605573.tif 000007
【００３７】
＃フィールドは、命令の「即値」ビット(immediate value bit)フィールドである。
[0044]  この実施形態では、ディシジョン・ツリーは、その最初のＮＯＤＥ命令を実行することによって採点される。ＮＯＤＥ命令は、リーフに到達するまで、次の左または右ＮＯＤＥ命令等にジャンプする。ルートＮＯＤＥ命令のビット・フィールドは、特徴識別子（１０）、閾値（４１）、左サブツリー（「ｌｅｆｔ」）、右サブツリー（ｎｉｌ）、左リーフ値（ｎｉｌ）、および右リーフ値（ｃ）をエンコードする。この例では、識別された特徴が閾値ｔ１以下である場合、制御はアドレス「ｌｅｆｔ」における第２ＮＯＤＥ命令に移る。この命令のビット・フィールドは、その特徴識別子（２０）、閾値（ｔ２）、左および右サブツリー（ｎｉｌ）、ならびに左および右リーフ出力値（それぞれ、ａおよびｂ）をエンコードする。ノード命令がリーフまで進んだ場合、指定されたアドレス（ｅｎｄ）に制御を移し、リーフ・インデックスまたは出力値が出力レジスターにおいて得られる。
【００３８】
[0045]  他の実施形態では、ツリー横断命令は、暗示的なレジスター、特殊目的レジスター、またはメモリー位置を使用して、特徴ベクトルおよびリーフ・ノード・アドレスを識別することもできる。他の実施形態は、特定のディシジョン・ツリー・ノードを表すために使用されない命令ビット・フィールド（ｎｉｌサブツリー・フィールドのような）を圧縮または排除するために可変長命令エンコードを採用することもできる。他の実施形態は、先に説明したのと同様にビット・フィールド（左または右サブツリー・アドレスのような）を圧縮または排除するために、メモリーにおける命令の隣接性を利用することもできる。
【００３９】
[0046]  ある実施形態では、ディシジョン・ツリー・データー構造メモリー、またはディシジョン・ツリー命令メモリーが、汎用プロセッサーに統合され、外部に格納されてもよく、またはメモリー・キャッシュ階層を通じて、外部メモリーに結合されてもよい。
【００４０】
[0047]  ディシジョン・ツリー横断、採点命令、および状態を有する汎用プロセッサーが、特徴ストレージＲＡＭに結合されてもよい。ある実施形態では、この詳細な説明において他のところで説明するように、特徴ストレージＲＡＭが自動的に特徴ベクトル分散ネットワークによってロードされてもよい。特に、ディシジョン・ツリーを探索する拡張命令セットを有する汎用プロセッサーによる命令の実行を全く必要とせずに、特徴ベクトル分散ネットワークによって新たな特徴データーをこのＲＡＭにロードしてもよい。これによって、ディシジョン・ツリーを採点するために必要な時間およびエネルギーを節約することができる。
【００４１】
[0048]  また、ディシジョン・ツリー横断、採点命令、および状態を有する汎用プロセッサーが、採点集計システムに結合されてもよい。これは、リーフ・ノードまでノードを横断するためのＮＯＤＥＷＡＬＫ、ＴＲＥＥＷＡＬＫ、またはＮＯＤＥのような命令から得られるリーフ出力値（スコア）を蓄積するために、追加のレジスター、スレッド状態、または加算器ツリー・ネットワークを含でもよい。これもまた、ディシジョン・ツリーを採点するために必要な時間およびエネルギーを節約することができる。
ディシジョン・ツリー・コード化の例
[0049]  図２は、本開示の種々の実施形態によるディシジョン・ツリー・コード化を示す。ディシジョン・ツリー例２００を図２に示す。これは、複数のディシジョン・ノード２０２および複数のリーフ・ノード２０４を含む。ディシジョン・ノード２０２は、種々の特徴を含み、特徴識別子を含む。特徴識別子は、アドレス、インデックス数、参照番号、またはディシジョン・ノード２０２において比較される特徴を識別する他の識別子であってもよい。また、ディシジョン・ノード２０２は、特徴値（特徴識別子によって参照される）が比較される閾値も含む。また、ディシジョン・ノード２０２は、左ブランチ・ポインターおよび右ブランチ・ポインターも含み、次のノードが位置する場所を示す。各ディシジョン・ノード２０２は比較を表す。例えば、ノード番号７は、特徴「Ｆ１」として識別される特徴値が閾値番号１０と比較されることを示す。実施形態の範囲から逸脱することなく、他の比較も可能である。
【００４２】
[0050]  本明細書において説明する実施形態は、左ブランチ、右ブランチ、左ノード、右ノード等に言及する。しかし、これらの用語は、単に、ディシジョン・ツリーを記述するために使用されるに過ぎない。一般に、ディシジョン・ツリー探索アルゴリズムは、特徴値と閾値との間の比較を実行し、この比較の結末(outcome)に応じて、第１ノードまたは第２ノードのいずれかに進む。説明を容易にするために、これらの次のノードを、ここでは、左ノードおよび右ノードと呼ぶが、これはことば本来の意味や限定的な意味で捕らえてはならない。
【００４３】
[0051]  リーフ・ノード２０４はリーフ値を含む。ディシジョン・ツリー探索アルゴリズムがリーフ・ノード２０４に到達したとき、ディシジョン・ツリーを探索する特定のインスタンスが完了し、到達した特定のリーフ・ノード２０４に対応するリーフ値が出力される。
【００４４】
[0052]  ディシジョン・ツリー・コーダー１０６は、ディシジョン・ツリー２００をコード化する。ディシジョン・ツリー・コーダー１０６は、モデル・コンテキスト内部のディシジョン・ツリー毎に、ディシジョン・ツリー・テーブル２０６を作る。ディシジョン・ツリー・テーブル２０６において、少なくとも一部のブランチ・ポインターは、隣接性により排除される。つまり、ディシジョン・ツリー２００におけるノード１は、ディシジョン・ツリー・テーブルにおいて、ノード２よりも前にあるというようにコード化される。ノード３はリストにおいてノード２の後ろに位置付けられ、ノード４はノード３の後ろになる。このように、ディシジョン・ツリー・テーブル２０６内におけるノード１〜３の実行中に、ディシジョン・ツリー・プロセッサー１２４の内１つのような、ディシジョン・ツリー・プロセッサーは、特徴値の閾値との比較の結末に基づいて、ディシジョン・ツリー・テーブル２０６における次の隣接ノード、またはオフセット値のような、次のノード・データーによって参照される他のノードのいずれかを、ディシジョン・ツリー・プロセッサーによって実行される次のノードとして選択することがわかる。このように、図２に示す隣接性の例に基づいて、ディシジョン・ツリー・テーブル２０６のディシジョン・ノードを実行した結末が、左ブランチを選択することを示すので、隣接するノードを次のノードとして選択する結果になる。このように、特定のディシジョン・ノードが、他のディシジョン・ノード（リーフ・ノードではない）に至る左ブランチを有する場合、ディシジョン・ツリー・テーブル２０６における隣接ノードが次の左ノードになる。右の次のノードは、オフセット値のような、次のノード・データーを使用して識別される。左ディシジョン・ノードがない場合（例えば、左ブランチがリーフ・ノードに至るため）、右の次のノードが隣接する可能性がある。このような右ノードも、オフセット値のような、次のノード・データーによって識別することができ、またはこれらが隣接すると仮定してもよい。
【００４５】
[0053]  隣接性に基づいてディシジョン・ツリー・テーブル２０６内部でディシジョン・ノード２０２を配列することに加えて、ディシジョン・ツリー・コーダー１０６は、ディシジョン・ツリー・テーブル２０６内部のディシジョン・ノード２０２の表現で、リーフ・ノード２０４のあらゆるリーフ・ノード値も含む。例えば、ノード７は、その表現がリーフ値を含むように、ディシジョン・ツリー・コーダー１０６によってコード化される。ノード７の実行の結末に基づいて（例えば、図２に示したように、特徴値の閾値１０との比較に基づいて）、ディシジョン・ツリー・プロセッサーは、左リーフ・ノードの値を出力するか、または次に処理するディシジョン・ノードとしてノード８を選択するかのいずれかを選択する。
【００４６】
[0054]  ディシジョン・ノード２０２は、ディシジョン・ツリー・テーブル２０６内部では可変長ディシジョン・ノードとして表される（これを例示するために、いくつかは他よりも小さく示されている）。一例では、ディシジョン・ノードをコード化するために、以下のフィールドがディシジョン・ツリー・コーダー１０６によって使用される。
【００４７】
【表７】
0006605573.tif 000008
【００４８】
[0055]  ディシジョン・ツリー・テーブル２０６内部におけるディシジョン・ノード２０２の全ての表現は、特徴識別子（「ｆｅａｔ＿ａｄ」）および情報（「ｉｎｆｏ」）フィールドを含む。特徴識別子は、特徴ストレージ内部において、ディシジョン・ノードの実行において閾値と比較される特徴値（この詳細な説明において他のところで説明したように、特徴インデックス値であってもよい）が発見される位置を識別する。特徴識別子は、ディシジョン・ツリー・プロセッサーが、特徴ストレージ１２６内部の特徴値というような、特徴ストレージ内部の特徴値を参照するために使用するアドレスまたは他の識別子でもよい。情報フィールドは、以下で更に詳細に論じられる種々のサブフィールドを含む。
【００４９】
[0056]  また、２−リーフ・ディシジョン・ノードは、左リーフ値（「Ｌ＿Ｌｅａｆ＿ｖａｌ」）および右リーフ値（「Ｒ＿Ｌｅａｆ＿ｖａｌ」）も含む。これらの値は、ディシジョン・ツリー２００の可能な結末または出力を表す。１−リーフ・ディシジョン・ノードは、左リーフ値（「Ｌ＿Ｌｅａｆ＿ｖａｌ」）または右リーフ値（「Ｒ＿Ｌｅａｆ＿ｖａｌ」）の内１つを含む。リーフ値は、種々のデーター型を含むことができ、整数、固定小数点、浮動小数点、またはディシジョン・ツリー・テーブルの外部に格納される一意の値を識別するインデックスを含む。
【００５０】
[0057]  ノード２のように、リーフがないディシジョン・ノードは、右ディシジョン・ノードが位置する場所を識別する随意(optional)のデルタ値を含む。この場合、左ディシジョン・ノードは、ディシジョン・ツリー・テーブル２０６内部の隣接する場所に位置する（例えば、ノード２にとって、「左」ディシジョン・ノードはノード３になる）。右ディシジョン・ノードは、ディシジョン・ツリー・テーブル２０６内部において、デルタ値によって識別可能な場所に位置する。ディシジョン・ツリー・プロセッサーは、デルタ値を処理して右ディシジョン・ノード値を判定する。例えば、ディシジョン・ツリー・プロセッサーはデルタ値を、現在実行中のディシジョン・ノードの位置値（例えば、インデックス値またはアドレス）に加算して、次の右ディシジョン・ノードの位置値（例えば、アドレスまたはインデックス値）を得ることができる。ある場合には、以下で更に詳細に説明するように、デルタ値がｉｎｆｏフィールドに含まれる。これらの場合には、別個のデルタ値がノード表現内部に含まれない。
【００５１】
[0058]  実施態様例では、ｆｅａｔ＿ａｄフィールドは１２ビットであり、ｉｎｆｏフィールドは１２ビットであり、ｒｄｅｌｔａフィールドは１２ビットであり、左リーフ値は２４ビットであり、右リーフ値は２４ビットである。
【００５２】
[0059]  ｉｎｆｏフィールドは、閾値を識別する、左リーフがあるか否か識別する、右リーフがあるか否か識別する種々のサブフィールドを含み、次の右ノードを突き止めるために共通オフセットまたはデルタ値をエンコードする。ｉｎｆｏ情報の一例は次の通りである。
【００５３】
【表８】
0006605573.tif 000009
【００５４】
[0060]  ある実施形態では、ｎｙｂフィールドは、特徴値が４ビットまたは８ビット・ワードのどちらであるかを識別する（例えば、特徴値が「ニブル」であるか否か）１ビットであり、ｘフィールドは１ビット、ｌ＿ｌｅａｆは１ビット、ｒ＿ｌｅａｆは１ビット、そして閾値は８ビットであるが、実施形態の範囲から逸脱することなく、他のフィールド・サイズを使用してもよい。ｌ＿ｌｅａｆフィールドは、ノードが左リーフ値を含むか否かを示し、同様に、ｒ＿ｌｅａｆノードは、ノードが右リーフ値を含むか否かを示す。先に注記したように、ｉｎｆｏフィールドは右ノード・オフセットまたはデルタ値をコード化するために使用することができ、これによってノードにける別個のデルタ・フィールドの必要性を排除する。ｘ＝１の場合、ｌ＿ｌｅａｆおよびｒ＿ｌｅａｆフィールドは、４つの共通オフセット値をコード化するために使用される。特定的な例では、ｌ＿ｌｅａｆおよびｒ＿ｌｅａｆフィールドは、８ワード、１２ワード、１６ワード、および２０ワードのオフセットをコード化するために使用される（この特定的な例では、１ワード＝１２ビットである）が、実施形態の範囲から逸脱することなく他のオフセット値をコード化することもできる。ｉｎｆｏフィールド内部の共通オフセット値の１つによってオフセット値をコード化できない場合、例えば、次の右ノードが、現在のノードから共通オフセット値の内の１つだけ離れた位置にないためにコード化できない場合、随意の別個のオフセット・デルタ・フィールドが使用される。ある実施形態では、多数のディシジョン・ツリーが１つのディシジョン・ツリー・テーブル内部に格納され、適したコード化により、ディシジョン・ツリーの本数、および／またはディシジョン・ツリー・テーブル内部の１つ以上のディシジョン・ツリーの位置を識別する。
【００５５】
[0061]  ある実施形態では、ディシジョン・ツリー・テーブル２０６はＤＴＴヘッダー２０８も含む。ＤＴＴヘッダー２０８は、ディシジョン・ツリー・テーブル２０６内部に収容されているディシジョン・ツリーの本数、およびディシジョン・ツリー・テーブル２０６内部の１つ以上のディシジョン・ツリーの開始位置のような、ディシジョン・ツリー・テーブル２０６の種々の面(aspect)をコード化する。
【００５６】
閾値および特徴圧縮の例
[0062]  所与のディシジョン・ツリー内、またはモデル・コンテキスト１０８内というような、複数のディシジョン・ツリー内部において、ディシジョン・ノードは特徴識別子および閾値を含む。ディシジョン・ツリー・ノード実行の一例では、特徴値（特徴識別子ｆｅａｔ＿ａｄによってインデックス化された位置における特徴ベクトルから読み出される）が閾値と比較される。この比較は、特徴値が閾値以下であるか否かの判定であることも可能である。ｙｅｓの場合、左ブランチが選択され、ｎｏの場合、右ブランチが選択される。未満、超過、または以上というような、他のタイプの比較も、実施形態の範囲から逸脱することなく可能である。以下で説明する特徴値および閾値エンコードの種々の例は、ディシジョン・ツリー比較が、特徴値が閾値以下であるか否か判定することを含むと仮定するが、実施形態の範囲から逸脱することなく、他のタイプのディシジョン・ツリー比較に基づいて、特徴値および閾値に対して同様のコード化を実行することができる。
【００５７】
[0063]  複数のディシジョン・ツリー全体にわたり、所与の特徴ｆｉが１つ以上のノードにおいて参照される。所与の特徴ｆｉを参照するノードは、１つ以上の閾値ｔｖｉの内の１つを含む。つまり、所与のモデル・コンテキスト（例えば、１つ以上のディシジョン・ツリー）内において、そして特定の特徴ｆｉについて、ディシジョン・ツリー・コーダー１０６は、特定の特徴ｆｉに対応する特徴値ｆｖｉが比較される閾値ｔｖｉのリストｔｓｉを判定する。特定の特徴ｆｉと比較されない閾値は、特定の特徴ｆｉのリストには含まれない（しかし、これらは他の特徴のリストには含まれる）。モデル・コンテキスト内の特定のｆｉに対して閾値ｔｖｉをコード化するために、以下の手順が使用される。
【００５８】
[0064]  特徴ｆｉ毎に、ディシジョン・ツリー・コーダー１０６は、同様にｆｉを参照するモデル・コンテキストのディシジョン・ツリーの内任意のものの任意のノードに含まれる全ての一意の閾値ｔｖｉの並び替えリストｔｓｉを形成する。図３は、実数線(real number line)３００上における一意の閾値ｔｖｉのリスト例ｔｓｉを示す。並び替えリストｔｓｉは、閾値ｔｖｉの内一意のものだけを含み、したがって、特定の閾値ｔｖｉは、所与のモデル・コンテキスト内においてｆｉを参照する多数のノードに含まれていても、ｔｓｉには１回しか現れない。
【００５９】
[0065]  ｔｓｉにおける閾値ｔｖｉに対するコード化例３０２を図３に示す。最も小さいｔｖｉにはインデックス０が指定され、最も大きなｔｖｉには、ｔｓｉ内にある一意のｔｖｉの総数よりも１少ない数に等しいインデックス番号が指定されるように、インデックス番号ｔｖｉｉが、ｔｓｉ内部の実数線３００上の一意のｔｖｉ毎に昇順で指定される。図３に示す例では、閾値ｔ１は最小のｔｖｉであり、インデックス０が指定され、一方閾値ｔ６は最大のｔｖｉであり、閾値インデックス値５が指定される。閾値が大きい数である場合、固定小数点整数インデックス値ｔｖｉｉの指定により、ディシジョン・ツリー・ノード表現内部において閾値を表すために必要なビット数が減少する。例えば、閾値ｔｖｉは、３２ビット浮動小数点数としてもよく（しかし、他のビット数、他のタイプの変数も、実施形態の範囲から逸脱することなく使用してもよい）、図３に示す例では、閾値インデックス値ｔｖｉｉを表すために、僅か３ビットの数を使用すればよい（しかし、以下で更に詳細に説明するように、ｔｖｉｉおよび特徴インデックス値ｆｖｉｉを表すためには他のビット数を使用してもよい）。
【００６０】
[0066]  ｔｖｉをｔｖｉｉにコード化することに加えて、特徴ベクトル・コーダー１１０は、特徴ベクトル１１２におけるｆｉに対応する特徴値ｆｖｉを、特徴インデックス値ｆｖｉｉにコード化し、これらがコード化閾値インデックス値ｔｖｉｉと共用できる(compatible)ようにする。各特徴ベクトル１１２は、ｆｉ毎に特徴ベクトルｆｖｉのリストを含む。ある実施形態では、特徴値ｆｖｉが、閾値インデックス値ｔｖｉｉに基づいて特徴インデックス値ｆｖｉｉにコード化され、更に具体的には、閾値インデックス値ｔｖｉｉの特徴インデックス値ｆｖｉｉとの比較の結末が、閾値ｔｖｉを特徴値ｆｖｉと比較した結末と同等となるように、これらがコード化される。このように特徴値をコード化することによって、モデル・コンテキスト１０８内におけるコード化ディシジョン・ツリーを、コード化特徴ベクトル１１２と対照して、実行した結末は、元の特徴値および閾値に基づくディシジョン・ツリーの従来のソフトウェアに基づく実行と同じ出力を生成することである。
【００６１】
[0067]  図３に示した例を続けると、モデル・コンテキスト１０８内のディシジョン・ツリーのディシジョン・ノードの実行は、特徴値ｆｖｉが閾値ｔｖｉ以下であるか否か判定することに基づく。したがって、この例では、
【００６２】
【数１】
0006605573.tif 000010
【００６３】
となるように、特徴値ｆｖｉが特徴インデックス値ｆｖｉｉにコード化される。
[0068]  更に一般的には、
【００６４】
【数２】
0006605573.tif 000011
【００６５】
となるように、特徴値ｆｖｉが特徴インデックス値ｆｖｉｉにコード化される。
ここで、compareは、ディシジョン・ツリーの実行中に実行される比較関数を表す（例えば、≦、≧、＜、または＞の内の１つ）。図３に示す例では、特徴インデックス値ｆｖｉｉは、
【００６６】
【数３】
0006605573.tif 000012
【００６７】
ように選択される。
ここで、＃ｔｓｉは、特定のモデル・コンテキスト内における特定の特徴ｆｉに関連付けられた閾値ｔｉの総数である（例えば、特徴ｆｉを参照するノードにおける全ての閾値ｔｖｉ）。言い換えると、特徴インデックス値ｆｖｉｉは、（１）特徴値ｆｖｉ以上である閾値ｔｖｉの内最も小さいものに対応する閾値インデックス値ｔｖｉｉ、または全ての閾値ｔｖｉが特徴値ｆｖｉよりも小さい場合には、（２）最も大きな閾値インデックス値ｔｖｉｉよりも大きな数のいずれかとなるように選択される。以上で示した例では、対応するｆｖｉｉが、閾値ｔｖｉの総数に等しい数となるように選択され、これは最も大きいｔｖｉｉよりも１大きいが、最も大きなｔｖｉｉよりも大きい任意の数を選択してもよい。
【００６８】
[0069]  図３に示す例では、特徴ベクトル・コーダー１１０は、コード化３０４として、特徴例ｆ１〜ｆ６をコード化する。特徴ｆ１に関して、ｔ２は、ｆ１以上である最小のｔｖｉであり、したがって、ｆ１に対する特徴インデックス値ｆｖｉｉは、ｔ２に対するｔｖｉｉと同じに設定される（即ち、１）。特徴ｆ６に関して、ｆ６以上のｔｖｉはない。したがって、ｆ６に対するｆｖｉは最も大きなｔｖｉｉよりも大きな数に設定される。図３に示す例では、ｔ６に対するｆｖｉｉは６に設定される。これは、最も大きなｔｖｉｉである５よりも１だけ大きい。また、図３に示す例では、ｆ４は３としてコード化される。
【００６９】
[0070]  実施形態では、特定のｆｉに関連付けられたｔｖｉおよびｆｖｉをコード化するために選択されるビット数は、＃ｔｓｉ（ｆｉを参照するディシジョン・ノードに関連付けられた一意のｔｖｉの総数）を受け入れる(accommodate)のに十分に大きい。ある実施形態では、１組の可能なインデックス長の内１つが、ｔｖｉおよびｆｖｉを表すために使用され、ｔｖｉおよびｆｖｉをコード化する複雑さを低減する。特定的な一例では、ｔｖｉおよびｆｖｉは、４ビット・ワード、８ビット・ワード、または多数の８ビット・ワードのいずれかとしてコード化されるが、実施形態の範囲から逸脱することなく、他のワード長を使用してもよい。特定的な例では、インデックス・ワード長は、
・ｌｇ（＃ｔｓｉ）＜４の場合、ｔｖｉおよびｆｖｉを４ビットに記録する。ここでｌｇ（ｘ）は基底２に対するｘの対数である。
・または、ｌｇ（＃ｔｓｉ）＜８の場合、ｔｖｉおよびｆｖｉを８ビットに記録する。
・または、ｔｖｉおよびｆvｉｉが＃ｔｓｉ＞２５５回の閾値比較である場合、そのいずれも（＃ｔｓｉ）／２５５個の別個のｆｉとして記録する。
というように選択される。
ｆ１が（＃ｔｓｉ）／２５５個の別個のｆｉに記録される場合、ディシジョン・ノードは、ディシジョン・ツリー・コード１０６によって、（＃ｔｓｉ）／２５５個の別個のｆｉの内の１つを示すために記録され、それに応じて、ノードの対応する閾値ｔｖｉが記録される。具体的な例では、ｔｓｉ内部に合計１２５９個のｔｖｉがあるｆ１では、特定のｆｉに関連付けられたノードが、５つの異なるノードの内１つに記録され、各々別個のｆｉおよび８ビット閾値を有する。つまり、ｆｖｉｉ＝０は（０，０，０，０，０）としてコード化される（例えば、元のｆｉが分解される別個のｆｉの全てに対して０としてコード化される）。ｆｖｉｉ＝２５５は（２５５，０，０，０，０）としてコード化される（例えば、別個のｆｉの内最初のものに２５５、別個のｆｉの他の全てに０）。ｆｖｉｉ＝２５６は（２５５，１，０，０，０）としてコード化される（例えば、別個のｆｉの内最初のものに２５５，２番目の別個のｆｉに１、そして他の全てに０）。ｆｖｉｉ＝１２５８は（２５５，２５５，２５５，２５５，２３８）としてコード化される。別個のｆｉに対する閾値ｔｖｉも、同様にコード化される。
並列アーキテクチャ
[0071]  図４は、種々の実施形態による特殊集積回路またはプログラマブル集積回路上に実装されたディシジョン・ツリー・スコアラー１０２のアーキテクチャ４００を示す。アーキテクチャ４００は、格子状に配列された複数のディシジョン・ツリー・クラスター（ＤＴＣ）１２２を含む。ＤＴＣ１２２は、モデル・コンテキスト１０８および特徴ベクトル１１２をディシジョン・ツリー・スコアラー１０２から受け取るように構成されている。ＤＴＣ１２２は、複数のディシジョン・ツリー・プロセッサー１２４の部分集合、および特徴ストレージ１２６の部分集合を含む。ディシジョン・ツリー・プロセッサー１２４の部分集合には、ディシジョン・ツリー・プロセッサーの他の部分集合と同じまたは異なるディシジョン・ツリー・テーブルがロードされてもよい、および／またはロード可能でもよく、特徴ストレージ１２６の部分集合には、同じまたは異なる特徴ベクトルがロードされてよく、あるいはロード可能でもよい（例えば、共通の特徴ベクトルがロードされてもよい）。
【００７０】
[0072]  ＤＴＣ１２２は、特徴ベクトル１１２を第１近隣ＤＴＣ１２２から受け取り、これらをＤＴＣ１２２の内第２の近隣ＤＴＣに分散することができる。一例では、図４における矢印によって示されるように、ＤＴＣ１２２−Ａは、特徴ベクトル１１２をＤＴＣ１２２−Ｃから受け取り、これらの特徴ベクトル１１２をＤＴＣ１２２−Ｃおよび１２２−Ｄに分散するように構成されている。
【００７１】
[0073]  同様に、ＤＴＣ１２２はスコア・データーを第１近隣ＤＴＣ１２２から受け取り、これらをＤＴＣ１２２の内第２近隣ＤＴＣに伝搬することができる。スコア・データーは、ディシジョン・ツリー・プロセッサー１２４の異なるものから出力される、個々のディシジョン・ツリー・スコアに基づくことができる（共通の特徴集合と対照させるというように）。スコア・データーは、スコアのリスト、スコアの総計、または個々のスコアに基づく何らかの他のスコア・データーでもよい（個々のスコアの乗算、またはスコアを処理するための何らかの他のアルゴリズムのような）。スコアのリストは、個々のディシジョン・ツリーの結末からのスコアのリスト、または処理されたスコアのリストでもよい。例えば、特定のディシジョン・ツリー・クラスター１２２からの全てのスコアを総計し、最終的なスコア・データーが各ＤＴＣ１２２からの総計スコアのリストを含むように、全てのＤＴＣ１２２スコアのリストに添付するのでもよい。他の例では、１つのディシジョン・ツリー・プロセッサー１２４によって実行されたディシジョン・ツリーからの全てのスコアを総計するのでもよく、全てのディシジョン・ツリー・プロセッサーからの総計スコアを、最終的なスコア・データー内に列挙する等としてもよい。スコア・データーを伝搬する他の方法も、実施形態の範囲から逸脱することなく、使用してもよい。ある実施形態では、各ＤＴＣ１２２、ＤＴＣ１２２のグループ、ディシジョン・ツリー・プロセッサー１２４、ディシジョン・ツリー・プロセッサー１２４のグループ、個々のディシジョン・ツリー、ディシジョン・ツリーのグループからの処理されたスコア・データーまたは生のスコア・データーが、他の何らかの様式でＤＴＳ４００に供給され（別個の出力ネットワーク上でというように）、ここで説明したように近隣ＤＴＣ１２２には伝搬されない。
【００７２】
[0074]  図４に示す例では、ＤＴＣ１２２−Ｅは、スコア・データーを近隣ＤＴＣ１２２−Ｆおよび１２２−Ｇから受け取るように構成されている。ＤＴＣ１２２−Ｅは、スコア・データーを近隣ＤＴＣ１２２−Ｆおよび１２２−Ｇから、ＤＴＣ１２２−Ｅ内部のディシジョン・ツリー・プロセッサー（ディシジョン・ツリー・プロセッサー１２４のような）によって供給されるスコア・データーと共に受け取り、これらのスコア・データーを処理して、総合スコア・データーを判定し（スコアを総計する、個々のスコアのリストにスコアを添付する、または他の何らかの方法でスコア・データーを処理することによるというようにして）、そして総合スコア・データーを近隣ＤＴＣ１２２−Ｈに受け渡すように構成されている。近隣ＤＴＣ１２２−Ｈは、同様の機能を実行し、全てのスコアがＤＴＣ１２２の内最後の１つに伝搬されるまで続けられ、最後のＤＴＣ１２２は最終的なスコア・データーをＤＴＳ１０２に受け渡す。更に一般的には、ＤＴＣ１２２は、スコアが二重にカウントされないように、スコア・データーを伝搬するように構成されている。例えば、ＤＴＳ１０２を通るスコア伝搬の特定のパターンにより、ＤＴＣ１２２のいずれもが、同じスコアが処理された２つの近隣ＤＴＣ１２２から２つのスコアを受けることを回避する。
【００７３】
[0075]  ある実施形態では、モデル・コンテキストをディシジョン・ツリー・スコア・アーキテクチャ４００にロードすることは、ＤＴＣ１２２内部にあるディシジョン・ツリー・タイルの異なるものに異なるディシジョン・ツリー・テーブルをロードすることを含む。これらのディシジョン・ツリー・タイルは、ディシジョン・ツリー・スコアラー・アーキテクチャ４００のＤＴＣ１２２のディシジョン・ツリー・プロセッサー全域にわたって分散された複数のディシジョン・ツリーを含む。これらの実施形態では、ＤＴＣ１２２にロードされたディシジョン・ツリーの各々が、共通の特徴ベクトルに基づいて、別個のスコアを生成する。
【００７４】
[0076]  ある実施形態では、同時にディシジョン・ツリー・アーキテクチャ４００にロードされた異なるディシジョン・ツリー・テーブルが、１つのモデル・コンテキスト１０８の一部、または複数の異なるモデル・コンテキスト１０８の一部であってもよい。ある実施形態では、多数のディシジョン・ツリー・モデルが１つのモデル・コンテキストにコード化される。一例では、２つのモデルは同様であるが何らかの相違を有するのでもよい。２つのモデルに対するディシジョン・ツリーは、モデル１またはモデル２のいずれかを選択する新たなディシジョン・ノードを導入するために多少変更される。加えて、モデル１またはモデル２のいずれかを選択するために、該当する特徴が特徴ベクトルに。
【００７５】
[0077]  ある実施形態では、特徴ベクトルをディシジョン・ツリー・スコアラー・アーキテクチャ４００にロードすることは、同じ特徴ベクトル値をＤＴＣ１２２の特徴ストレージ・タイルの各々にロードすることを含む。つまり、実施形態では互いに異なるＤＴＣの複数のディシジョン・ツリーが、同じ１組の特徴と対照して採点され、全てのスコアが処理され（例えば、総計され）逆にＤＴＳ１０２に伝搬される。
【００７６】
[0078]  他の実施形態では、ＤＴＣ１２２の内種々のものが、ＤＴＣ１２２の他のものと同じディシジョン・ツリーを実行するように、これらには同じディシジョン・ツリーがロードされる。ディシジョン・ツリーが異なる特徴ベクトルと対照して実行されるように、異なる特徴ベクトルをＤＴＣの異なるものにロードすることができる。ある実施形態では、ＤＴＣ１２２には異なる特徴ベクトルがロードされ、同じディシジョン・ツリー、またはディシジョン・ツリーのグループがディシジョン・ツリー・スコアラー・アーキテクチャ４００にロードされる。これらの実施形態では、各ＤＴＣ１２２には、１つ以上の特徴ベクトルの異なるグループがロードされる。ディシジョン・ツリーは、特徴ベクトルと対照して採点され、モデル・コンテキストの全てのディシジョン・ツリーに沿って流れ、特徴ベクトルを駆使して(past)全てのディシジョン・ツリーが実行されるに連れて、ときの経過と共に特徴ベクトル毎にスコアが蓄積される。これらの実施形態では、モデル・コンテキストの全てのディシジョン・ツリーがロードされ特徴ベクトルと対照して実行されるまで、ＤＴＣ１２２は特徴ベクトルに対するスコアを保持するように構成することができる。あるいは、個々のディシジョン・ツリー・スコアをホスト１０４に送信し、ホスト１０４が特定の特徴ベクトルに対するスコアを蓄積し処理する。
【００７７】
[0079]  更に他の実施形態では、ＤＴＣ１２２の異なるグループには異なるディシジョン・ツリー・ジョブがロードされる（例えば、モデル・コンテキストおよび特徴ベクトルの組み合わせ）。つまり、ディシジョン・ツリー・スコアラー・アーキテクチャ４００の第１部分が、第１特徴ベクトルに対するスコアを第１モデル・コンテキストと対照して判定し、ディシジョン・ツリー・スコアラー・アーキテクチャ４００の第２部分が、第２特徴ベクトルに対するスコアを第２モデル・コンテキストと対照して判定し、以下同様に、ディシジョン・ツリー・スコアラー・アーキテクチャ４００の第Ｎ部分が、第Ｎ特徴ベクトルに対するスコアを第Ｎモデル・コンテキストと対照して判定する。これらの実施形態では、各部分のＤＴＣ１２２にはモデル・コンテキストのディシジョン・ツリーがロードされ、特徴ベクトルは採点のための部分内で１つずつ分散され、または各部分のＤＴＣ１２２には異なる特徴ベクトルがロードされ、モデル・コンテキストのディシジョン・ツリーは、採点のための部分内部で１つずつ分散される。
【００７８】
[0080]  ディシジョン・ツリー・スコアラー・アーキテクチャ４００内にあるＤＴＣ１２２の数は、任意に大きな数まで、ディシジョン・ツリー・スコアラー・アーキテクチャ４００が実装される集積回路のサイズおよび能力に応じて、拡大する(scale up)ことができる。
【００７９】
[0081]  ある実施形態では、１つよりも多いディシジョン・ツリー・スコアラー・アーキテクチャ４００が利用され、各々には並列に実行するそれ自体の１組のＤＴＣ１２２がある。これらの実施形態では、１つのモデル・コンテキストを１つ以上のチップのＤＴＣ１２２上にロードすることができ、特徴ベクトルは、採点のために、異なるチップのＤＴＣ１２２に１つずつ分散される。他の実施形態では、異なる特徴ベクトルが異なるチップのＤＴＣ１２２にロードされ、モデル・コンテキストの異なるディシジョン・ツリーが、採点のために、ＤＴＣ１２２の各々に１つずつ分散される。種々の他の実施形態では、組み合わせたマルチチップ・ディシジョン・ツリー・スコアラー・アーキテクチャ４００の異なる部分に、これらの手法の組み合わせを利用することもできる。
【００８０】
[0082]  ある実施形態では、ディシジョン・ツリー・スコアラー・アーキテクチャ４００にロードされたモデル・コンテキストに対する全体的スコアまたは総合スコアの判定が、加算または乗算のような結合関数に基づき、この場合、スコアを纏める(group)順序が結末を決定することはない。つまり、特定の特徴ベクトルに対して、アーキテクチャ４００にロードされたモデル・コンテキストのディシジョン・ツリーと対照して、正しい最終的なまたは総合スコアを生成するためには、ＤＴＣ１２２の１つ１つにおけるディシジョン・ツリーの分散は必ずしも重要ではない。他の実施形態では、特徴ベクトルに対するスコア、およびモデル・コンテキスト・ディシジョン・ツリー採点ジョブの処理は、結合的(associative)ではなく、ディシジョン・ツリーおよび／または特徴ベクトルがアーキテクチャ全域に分散される順序は、特定の特徴ベクトルに対して最終的スコアまたは総合スコアを判定するために重要となる。
【００８１】
[0083]  特徴ベクトル１１２、モデル・コンテキスト１０８のディシジョン・ツリー・テーブル、および／またはスコア・データーは、特殊またはプログラミング・ロジック・デバイス１１６内部の１つ以上のネットワークを通じて、ＤＴＣ１２２および／またはディシジョン・ツリー・プロセッサー１２４に分散させることができる。ＤＴＣ１２２、ディシジョン・ツリー・プロセッサー１２４、および種々の特徴ストレージ１２６の内１つ以上が、パケット・ヘッダーを介して、アドレス可能であるとよい。ディシジョン・ツリー・プロセッサー１２４の共有または専用ストレージにロード可能なディシジョン・ツリー・テーブルの分散方法には関係なく、ディシジョン・ツリー・テーブルを個々に送信し（パケットによってというようにして）、ＤＴＣ１２２またはディシジョン・ツリー・プロセッサー１２４の１つ１つにアドレスすることもでき、またはディシジョン・ツリー・テーブルを一緒に分散してもよい。ホスト１０４および／またはディシジョン・ツリー・スコアラー１０２内部のロジックが、ＤＴＣ１２２およびディシジョン・ツリー・プロセッサー１２４間における個々のディシジョン・ツリー・テーブルの分散を決定することもできる。更に、ＤＴＣ１２２が、ディシジョン・ツリー・テーブルをディシジョン・ツリー・プロセッサー１２４の個々の１つずつに分散するロジックを含むこともできる。
【００８２】
[0084]  図４は、オンチップ・マルチプロセッサー・システムのディシジョン・ツリー・プロセッサーにスコアおよび特徴ベクトルを分散するネットワークの一例を示す。具体的には、ＤＴＣ１２２が、スコア・データーおよび特徴ベクトルを集計／処理するネットワーク・エレメントとして作用する。他の実施形態では、ディシジョン・ツリー・プロセッサーおよび／または特徴ストレージにスコアおよび／または特徴ベクトルを分散するために、他のネットワーク・タイプが採用される。これらの他の実施形態では、ディシジョン・ツリー・クラスター１２２がアーキテクチャの一部として含まれても、含まれなくてもよい。一実施形態では、判断プロセッサーがディシジョン・ツリー・プロセッサーのメッシュに配列されてもよく、スコアおよび／または特徴ベクトルが、ディシジョン・ツリー・プロセッサーを介して直接、そして最終的にディシジョン・ツリー・スコアラーまたは他のスコア集計エレメントに分散されてもよい。他の実施形態では、バス、メッシュ、二点間(point-to-point)、ハブおよびスポーク、または他のトポロジーであってもよいブロードキャスト・ネットワークがディシジョン・ツリー・プロセッサー（および／またはディシジョン・ツリー・クラスター１２２）を、ディシジョン・ツリー・スコアラー、あるいは特徴ベクトルを供給する、および／またはディシジョン・ツリー・プロセッサーからのスコアを受け取る／蓄積する／処理する他のエレメントに接続してもよい。他の実施形態では、構成データーをＦＰＧＡエレメントに分散するというような他の目的または他の機能を有するかもしれないチップ上のネットワーク（ＮＯＣ）が、特徴ベクトルを分散するため、および／またはディシジョン・ツリー・プロセッサーからのスコア・データーをディシジョン・ツリー・スコアラーまたは他のスコア集計エレメントに供給するために再利用されてもよい。
【００８３】
[0085]  スコア集計エレメントは、ディシジョン・ツリー・プロセッサーおよび／またはディシジョン・ツリー・クラスター１２２からのスコア・データーを受け取り蓄積することができる。スコア集計エレメントはスコア・データーを処理することができ、これには、スコア・データーを総計する、スコア・データーをリストまたはスコアのベクトルに添付する、あるいは受け取ったデーターに基づいてスコアを計算する他の何らかのアルゴリズムを実行する等を含むことができる。スコア集計エレメントは、スコア・データーを、処理後にまたは生の形態で、ホストまたは他の下流側エレメントに受け渡すことができる。
【００８４】
[0086]  実施形態は、別個のネットワークを、スコア・データーに１つ、特徴ベクトルに他の１つを含むこともできる。つまり、異なる実施形態では、ネットワークが特徴ネットワークであっても、スコア集計ネットワークであっても、または双方であってもよい。ある実施形態では、ディシジョン・ツリー・クラスター１２２が、特徴ネットワークまたはスコア・ネットワークの内一方または双方のためのネットワーク・エレメントとして作用することもできる。実施形態の範囲から逸脱することなく、他の例も可能である。
【００８５】
[0087]  図５は、種々の実施形態にしたがって、特殊集積回路またはプログラマブル集積回路上に実装されたディシジョン・ツリー・クラスター１２２のアーキテクチャ５００を示す。アーキテクチャ５００は、１つ以上のディシジョン・ツリー・プロセッサー１２４と１つ以上の特徴ストレージ１２６とを含む。図５に示すアーキテクチャ例５００は、５つのディシジョン・ツリー・プロセッサー１２４と１つの特徴ストレージ１２６とを含むが、種々の他の実施形態では、他の数のディシジョン・ツリー・プロセッサー１２４および特徴ストレージ１２６が使用される。
【００８６】
[0088]  ＤＴＣ１２２は、特徴ストレージ１２６における格納のために特徴ベクトルを受け取る特徴入力バス・レジスター、例えば、６４ビット特徴入力バス・レジスターを含む。ＤＴＣ１２２は、ＤＴＣ１２２の内近隣のものへの出力のためにスコアを蓄積し出力保持する(output hold)スコア出力レジスター、例えば、３３ビット固定小数点スコア出力レジスターを含む。ＤＴＣ１２２の加算器ツリーは、ディシジョン・ツリー・プロセッサー１２４および１つまたは２つ以上の近隣ＤＴＣ１２２からのスコアを合計する。ディシジョン・ツリー・プロセッサー１２４は、ここで実行される全てのディシジョン・ツリー・スレッドが完了したときに終了フラグを出力し、更にスコアを出力する。ＤＴＣ１２２は、終了フラグを蓄積し、加算器ツリーが近隣ＤＴＣ１２２からのスコアをディシジョン・ツリー・プロセッサー１２４からのスコアに加算するときに、ＤＴＣ１２２はスコアを１つ以上の近隣ＤＴＣ１２２に出力する。また、この時点で、ＤＴＣ１２２は完了信号ネットワークを通じてというようにして、完了信号をそれらの上流側ＤＴＣ１２２に出力する。完了信号ネットワークは、特徴ベクトル、スコア・データー、および／またはディシジョン・ツリー・テーブル・データーを分散するためのＤＴＳ１０２内部の相互接続ネットワークと同じであっても異なってもよい。最終ＤＴＣ１２２の場合、スコアおよび完了信号はＤＴＳ１０２に出力される。完了信号を受け取ったとき、ＤＴＣ１２２およびディシジョン・ツリー・スコアラー１０２は、上流側のＤＴＣ１２２がそれらのディシジョン・ツリー実行を完了したこと、全ての入手可能なスコアが入力バス上で受け取られたこと、受け取られることを待っているスコアが他にはないこと、そしてこれらのスコアがディシジョン・ツリー・プロセッサー１２４のスコアに加算され、下流側のＤＴＣ１２２および／またはディシジョン・ツリー・スコアラー１０２に伝搬される準備ができたことを判定する。
【００８７】
[0089]  特徴ストレージ１２６は、ある実施形態では、１組の特徴を特徴ストレージ１２６にロードし、一方他の１組の特徴をディシジョン・ツリー・プロセッサー１２４によって読み出すことを可能にするために二重バッファ型である。一例では、特徴ストレージ１２６は、２つの３２ビット書き込みポートを含み、特徴ストレージ１２６が２５０ＭＨｚで６４ビットの特徴データーを回収する(retire)ことを可能にする。一例では、特徴ストレージ１２６は２つの３２ビット読み取りポートを含み、特徴ストレージ１２６がサイクル当たり２つの８ビットの特徴を受け取ることを可能にする。特徴ストレージ１２６は、ディシジョン・ツリー・プロセッサー１２４から特徴識別子を受け取り、特徴値、例えば、８ビットの特徴値およびフラグで応答する。
【００８８】
[0090]  ある実施形態では、特徴ストレージ１２６上の格納空間は、特定のディシジョン・ツリー・クラスター１２２のディシジョン・ツリー・プロセッサー１２４によって使用される特徴ベクトルの部分集合の選択的取り込み(capture)によって減少する。特徴ベクトル１１２内部の全ての特徴が特定のディシジョン・ツリー・クラスター１２２のディシジョン・ツリーによって参照される訳ではない。したがって、ある実施形態では、特定のＤＴＣ１２２のディシジョン・ツリー・プロセッサー１２４によって実行されたディシジョン・ツリーによって実際に参照された特徴値のみを取り込むことによって、特徴ストレージ１２６上の格納空間を減らす。このため、特定の特徴ストレージ１２６によって格納される特徴ベクトルの部分は、特徴ストレージ１２６、または特定の特徴ストレージ１２６が含まれるＤＴＣ１２２にアドレスされたパケットにおいて参照される。特徴ストレージ１２６には、特徴ストレージ１２６またはＤＴＣ１２２にアドレスされるパケットにおけるように、特徴ベクトルの内選択的に格納する部分を識別するマスクを供給すればよい。
【００８９】
[0091]  以下で更に詳細に説明するように、ディシジョン・ツリー・プロセッサー１２４は、複数のディシジョン・ツリーを実行することができるマルチスレッド・ツリー探索エンジンである。ディシジョン・ツリーは、ディシジョン・ツリー・プロセッサー１２４内部にディシジョン・ツリー・テーブルとして格納される。種々の実施形態において、ディシジョン・ツリー・テーブルは、ダイナミック・ランダム・アクセス・メモリー（ＤＲＡＭ）、ブロック・ランダム・アクセス・メモリー（ＢＲＡＭ）、スタティック・ランダム・アクセス・メモリー（ＳＲＡＭ）等を含むランダム・アクセス・メモリーのような、種々のメモリー・ストレージ・タイプに格納される。ある実施形態では、ディシジョン・ツリー・プロセッサー１２４は、以下で更に詳細に説明するような５段階パイプラインを含む。つまり、少なくとも５つの実行可能なスレッドがある限り（実行が未だ完了していない５つのディシジョン・ツリーに対応する）、ディシジョン・ツリー・プロセッサー１２４は各クロック・サイクルにおいてディシジョン・ツリーの１つのノードを探索し始めることができる。
マルチステージ・ツリー探索パイプライン
[0092]  ある実施形態では、ディシジョン・ツリー・プロセッサーはパイプライン状アーキテクチャを含む。図６は、種々の実施形態による、ディシジョン・ツリー・プロセッサーのマルチステージ、マルチスレッド、パイプライン状ツリー探索回路６００を示す。回路６００は、ディシジョン・ツリー・プロセッサー内部のロジック回路上に実装される。スレッド回路（またはスレッド・ステージ）（図６では「ＴＨ」で示す）は、次のスレッドＴＨ＿ＴＨＤをＮＥＸＴ＿ＴＨＤＳテーブル６０２から受け取る。図６に示す例では、ＮＥＸＴ＿ＴＨＤＳテーブル６０２は３２×５ビットであり、つまり３２個までの５ビットの次位スレッド番号を格納し、したがって３２個までのスレッドを回路６００によって処理することができる。ＮＥＸＴ＿ＴＨＤＳテーブル６０２は、スレッドのリンク・リスト(linked list)であり、初期状態では全てのスレッドがＮＥＸＴ＿ＴＨＤＳテーブル６０２に列挙される。スレッドが完了するに連れて（リーフ値を出力することによって）、スレッドはＮＥＸＴ＿ＴＨＤＳテーブル６０２から解放される(de-linked)。一旦全てのスレッドがＮＥＸＴ＿ＴＨＤＳテーブル６０２から解放されると、ディシジョン・ツリー・プロセッサーは完了信号をディシジョン・ツリー・クラスターに出力し、全てのスレッドが終了したことを示す。スレッド回路は、ＮＥＸＴ＿ＴＨＤＳテーブル６０２からの次のスレッド識別子を使用して、ノード・アドレス・テーブル、ＮＯＤＥ＿ＡＤＳテーブル６０４およびリーフ・テーブル、ＬＥＡＦＳテーブル６０６から次のスレッドの次位ノード・アドレスのためにリード(read)を発行する。ＮＯＤＥ＿ＡＤＳテーブル６０４は３２×１３ビットであり、つまり３２個までの１３ビット次位ノード・アドレスをスレッド毎に１つずつ格納する。
【００９０】
[0093]  ＬＥＡＦＳテーブル６０６は、リーフ出力フラグを格納する。ＬＥＡＦＳテーブル６０６内部の特定のスレッドに対するエントリーが出力フラグ（例えば、１または０）を格納する場合、リーフ値がディシジョン・ツリー・クラスターに出力され、スレッドはＮＥＸＴ＿ＴＨＤＳテーブル６０２から解放される。
【００９１】
[0094]  リーフ出力フラグが、リーフ値が以前に選択されていないことを示す場合、次位ノード・アドレスがリード・ノード回路（またはリード・ステージ）（図６では「ＲＮ」で示す）に受け渡され、現在のスレッドに対応するノード・テーブルＮＴＡＢ６０８に対するリードが、次位ノード記述子(next node descriptor)のために回路６００によって発行される。実施形態では、ＮＴＡＢ６０８は、ディシジョン・ツリー・プロセッサーの回路内部にある専用メモリー、またそうでなければこれに関連する専用メモリーに格納される。他の実施形態では、ＮＴＡＢ６０８は、ディシジョン・ツリー・プロセッサーとは別個でありこれに通信可能に結合されたメモリーに格納される。ある実施形態では、ＮＴＡＢ６０８は複数のディシジョン・ツリー・プロセッサーによって共有されるメモリーに格納される。
【００９２】
[0095]  ノード記述子の１２ビット特徴アドレスＦ１＿ＦＥＡＴ＿ＡＤおよび１２ビットｉｎｆｏフィールドＦ１＿ＩＮＦＯは、ＮＴＡＢ６０８内に存在する場合にはオフセット値のような、次位ノード・データーと共に、回路６００のＦ１特徴回路（またはＦ１特徴ステージ）に読み出される。例えば、次位左および右ノード・アドレスならびに次位左および右リーフ・フラグ値が、ロジック６１０によってこのステージにおいて予め計算され、ノード・アドレス、ｉｎｆｏフィールド、および随意のｒｄｅｌｔａオフセット・フィールドの関数となる。ｉｎｆｏフィールドは、ノード１、２、または０、次のサブツリー・ノード、そして１つ、２つ、または０のリーフ値があるか否か判定する。次位左および右次位ノード・アドレスは、この詳細な説明において他のところで説明するように、ＮＴＡＢ６０８内部における隣接性に基づいて、Ｆ１＿ＲＤＥＬＴＡ値が存在する場合にはこれに基づいて、またはｉｎｆｏフィールドにおけるオフセット値のコード化から予め計算されている。ある実施形態では、現在のノードが左サブツリー・ノードである場合、次位左ノード・アドレスは、現在のノードに隣接する（直後の）ノードのアドレスとなり、次位左リーフ・フラグは偽となる。そうでない場合、現在のノードは左リーフ出力値を有し、次位左ノード・アドレスは、左リーフ値を収容する現在のノード内部のワード（１つまたは複数）のアドレスであり、次位左リーフ・フラグは真となる。事前計算は、次位右ノード・アドレスおよび次位右リーフ・フラグについても同様である。現在のノードが右サブツリー・ノードを有するが左サブツリー・ノードを有していないとき、次位右ノード・アドレスは、現在のノードに隣接する（直後の）ノードのアドレスとなり、次位右リーフ・フラグは偽となる。現在のノードが左サブツリー・ノードおよび右サブツリー・ノード双方を有するとき、次位右ノード・アドレスは、現在のノード・アドレスおよびオフセット（その値はｉｎｆｏフィールド内部においてエンコードされるか、または随意のｒｄｅｌｔａオフセット・フィールドにおいて明示的に表される）を加算することによって決定され、次位右リーフ・フラグは偽となる。そうでない場合、現在のノードは右リーフ出力値を有し、次位右ノード・アドレスは、右リーフ値を収容する現在のノード内部のワード（１つまたは複数）のアドレスであり、次位右リーフ・フラグは真となる。
【００９３】
[0096]  回路６００のＦ２特徴回路（またはＦ２特徴ステージ）において、Ｆ１＿ＦＥＡＴ＿ＡＤに関連する特徴値が特徴ストレージ６１２（例えば、特徴ストレージ１２６）から読み取られる。実施形態では、ＦＳＴ１２６は、２つの異なるディシジョン・ツリー・プロセッサーによって読み取られるように構成されており、したがって、特徴ストレージ１２６は２つの入力および２つの出力を有することが示されている。
【００９４】
[0097]  回路６００の実行回路（または実行ステージ）（図６では「ＥＸ」で示す）において、特徴ストレージ６１２から読み取られた特徴値（「ＥＸ＿ＦＥＡＴ」）は、ロジック６１４によって、現在実行中のノードの閾値（ＥＸ＿ＴＨ）と比較される。閾値ＥＸ＿ＴＨおよび特徴値ＥＸ＿ＦＥＡＴは、この詳細な説明において他のところで説明したように、閾値インデックス値および特徴インデックス値であってもよく、あるいはこれらは未圧縮の閾値および特徴値であってもよい。本開示の実施形態は一方または他方の使用に限定されることはない。ロジック６１４によって出力される比較の結末に基づいて、次位左ノード・アドレスまたは次位右ノード・アドレスが、ＮＯＤＥ＿ＡＤＳテーブル６０４内部のスレッドのエントリーに書き込まれる。また、ロジック６１４によって出力される比較の結末に基づいて、次位左リーフ・フラグまたは次位右リーフ・フラグのいずれかが、ＬＥＡＦＳテーブル６０６内部のスレッドのエントリーに書き込まれる。
【００９５】
[0098]  一旦実行回路が特定のスレッドに対してリーフ値を選択し、リーフ・フラグをセットしたなら、次にスレッドがパイプラインに発行されるとき、リーフ・フラグが読み取られ、ＮＯＤＥ＿ＡＤＳテーブル６０４内におけるノード・アドレスはノードのアドレスではなく、代わりに、ＮＴＡＢ６０８内部の以前のノード内部にあるリーフ値ワードのアドレスとなる。ＲＮ回路において、これらのリーフ値ワードはＮＴＡＢ６０８から読み取られることによって、特徴アドレスおよびｉｎｆｏフィールドの代わりに、特定のスレッドに対するリーフ値のスコア６２０が得られる。スコア６２０は、この詳細な説明において他のところで説明したように、ディシジョン・ツリー・クラスターに出力することができる。加えて、リーフ・フラグが真であるとき、スレッドはＮＥＸＴ＿ＴＨＤＳテーブル６０２から解除されるので、パイプラインによって再度読み込まれることはない。
【００９６】
[0099]  回路６００の部分（ＴＨ、ＲＮ、Ｆ１、Ｆ２、およびＥＸ）の各々は、同時にスレッドの異なるものを処理する。このように、いずれの一時点においても回路６００は５つまでの異なるスレッドのある部分を処理する。これは、クロックサイクロ毎に、５つまでの異なるディシジョン・ツリーのある部分を同時に処理することに対応する。
【００９７】
プロセス例
[00100]  図７は、種々の実施形態にしたがってディシジョン・ツリーを実行するプロセス例７００を示すフロー・グラフを表す。７０２において、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインのスレッド回路またはステージが、プロセッサーによって実行する次のスレッドを決定し、次のスレッドの次位ノード・アドレスを決定するために、ノード・テーブルにリードを発行する。
【００９８】
[00101]  ７０４において、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインのリード・ノード回路またはステージは、少なくとも特徴インディケータおよび閾値を含む、ディシジョン・ツリー・ノード・ワードのような、ディシジョン・ツリー・ノード・データーを、ディシジョン・ツリー・ノード・テーブルから引き出す。ディシジョン・ツリー・ノード・データーは、ディシジョン・ツリー・プロセッサー内に格納することができる。また、ディシジョン・ツリー・ノードの部分集合は、次位ノード・オフセット値のような、次位ノード・データーも含む。
【００９９】
[00102]  ディシジョン・ツリー・ノード実行の最終結末は、ディシジョン・ツリー・ノード実行の結果左リーフまたは右リーフ値が選択される場合のように、リーフ値の出力が、ディシジョン・ツリー探索スレッドの出力として得られる。７０６において、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサーのリード回路またはステージは、スレッドの前回のパイプライン通過の間等において、特定のスレッドに対してリーフ・フラグがセットされたか否か判定する。リーフ・フラグがセットされた場合、７０８において、特定のスレッドがスレッド・テーブルから解放される。７１０において、ディシジョン・ツリー・ノードの、１つ以上のリーフ値ワードのような、リーフ値データーが、ディシジョン・ツリー・プロセッサー・パイプラインのリード・ノード回路またはステージによって読み取られ、ディシジョン・ツリー・クラスターまたは他の何らかの出力ネットワークに出力される。
【０１００】
[00103]  ７１２において、リーフ・フラグ値がセットされていない場合、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインの特徴回路またはステージは、特徴インディケータによって識別された特徴値を特徴ストレージから読み取る。
【０１０１】
[00104]  ７１４において、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインの特徴回路またはステージは、オフセット値のような次位ノード・データー、および現在実行中のノードに隣接する次のディシジョン・ツリー・ノードに基づいて、可能な次のディシジョン・ツリー・ノード・アドレスを予め計算する。また、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインの特徴回路またはステージは、加えてまたは代わりに、現在のディシジョン・ツリー・ノードの右または左リーフ・ワードあるいは値のような、右または左リーフ・データーのアドレスを予め計算する。この詳細な説明において他のところで注記したように、ディシジョン・ツリー・ノード・テーブルのノードの部分集合は１つ以上のリーフ値を含む。リーフ・ノードの存在は、次にスレッドがパイプラインを通過するときにリーフ値を出力することを選択することが、ディシジョン・ノードの実行によって起こり得る結末であることを示す。つまり、ディシジョン・ツリー・プロセッサーは、左リーフまたは左次位ノードがあるか否かに応じて、そして実行中の特定のディシジョン・ノードにおいて右リーフ値または右次位ノードがあるか否かに基づいて、左リーフ・データー・アドレスまたは左次位ノード・アドレスの内１つ、および右リーフ・データー・アドレスまたは右次位ノード・アドレスの内１つを予め計算する。７１４における事前計算は、ディシジョン・ツリー・プロセッサーによるディシジョン・ノードの実行の前に行われる。
【０１０２】
[00105]  ある実施形態では、ディシジョン・ツリー・ノードのオフセット値のような次位ノード・データーを処理することによって、次のノードの位置に到達するためにオフセット値を現在のノードの位置に加算することによってというようにして、次のノード・アドレスの一部の事前計算が実行される。この詳細な説明において他のところで説明したように、オフセット値のような次位ノード・データーは、ディシジョン・ノード内部で供給されるオフセット値、またはディシジョン・ノードのｉｎｆｏフィールドによってコード化されるオフセット値のような、別個の次位ノード・データーである。また、次位ノード・アドレスの事前計算は、次位ノード・アドレスの一部に対する隣接性に基づく。
【０１０３】
[00106]  ７１６において、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインの実行回路またはステージは、ディシジョン・ツリー・ノードを実行する。ディシジョン・ツリー・ノードの実行は、ディシジョン・ツリー・ノードの閾値を、特徴ストレージから引き出された特徴値と比較することを含む。この詳細な説明において他のところで説明したように、閾値は閾値インデックス値でもよく、特徴値は特徴インデックス値でもよい。
【０１０４】
[00107]  ７１８において、ディシジョン・ツリー・プロセッサー、例えば、ディシジョン・ツリー・プロセッサー・パイプラインの実行回路またはステージは、次にスレッドがパイプラインに読み込まれるときに、引き出され実行されるスレッドのために次のディシジョン・ツリー・ノードを決定し、および／または出力されるリーフ値を収容するリーフ・データーのアドレスを決定する。次のディシジョン・ツリー・ノード、またはリーフ・データーのアドレスの選択は、ディシジョン・ツリー・ノードを実行した結末に基づいて決定される。比較のある結末では（特徴値が閾値以下である場合のように）、次位ノード・オフセット値のような次位ノード・データーに基づいて、次のディシジョン・ツリー・ノードを決定することになる。比較の他の結末では（特徴値が閾値よりも大きい場合というように）、ディシジョン・ツリー・プロセッサー内部のディシジョン・ツリーに関連付けられたディシジョン・ツリー・テーブル内部で現在実行中のノードに隣接する次のディシジョン・ツリー・ノードを決定することになる。
【０１０５】
[00108]  ７２０において、ディシジョン・ツリー・プロセッサーによって、例えば、ディシジョン・ツリー・プロセッサーのスレッド回路またはステージによって、全てのスレッドが回収されたか否か判定が行われる。７１０においてスレッドがリーフ値を出力し完了しているので、これらは７０８においてディシジョン・ツリー・スレッドのリンク・リストから解放される。全てのリンクが解放されたとき、このディシジョン・ツリー・プロセッサー１２４におけるディシジョン・ツリーの実行が完了する。各スレッドは１つのディシジョン・ツリーに対応し、つまり、一旦全てのスレッドが完了したなら、ディシジョン・ツリー・プロセッサーは完了信号を出力し、ディシジョン・ツリー実行からの１つ以上のスコアを出力する。
【０１０６】
[00109]  図８は、種々の実施形態にしたがって、ディシジョン・ツリー・スコアラーによって複数のディシジョン・ツリーに採点するプロセス８００を示す。８０２において、ディシジョン・ツリー・スコアラー１０２は、ホスト１０４または他の上流側処理システムからモデル・コンテキスト１０８を受け取る。８０４において、ディシジョン・ツリー・スコアラー１０２は、モデル・コンテキスト１０８を複数のディシジョン・ツリー・クラスター１２２にロードする。
【０１０７】
[00110]  ８０６において、ディシジョン・ツリー・スコアラー１０２は、ホスト１０４または上流側処理システムから特徴ベクトル１１２を受け取る。８０８において、ディシジョン・ツリー・スコアラー１０２は、特徴ベクトル１１２をディシジョン・ツリー・クラスター１２２の内第１ディシジョン・ツリー・クラスターに供給する。このように、ある実施形態では、共通の特徴ベクトルがディシジョン・ツリー・クラスター１２２およびディシジョン・ツリー・プロセッサー１２４に供給される。
【０１０８】
[00111]  ８１０において、ディシジョン・ツリー・スコアラー１０２は、最終的なスコア、およびディシジョン・ツリー・クラスターが複数のディシジョン・ツリーによる特徴ベクトルの採点を完了したことを示す完了信号をディシジョン・ツリー・クラスター１２２の内の１つから受け取る。８１２において、ディシジョン・ツリー・スコアラー１０２は、最終スコアをホスト１０４または下流側処理システムに供給する。ある実施形態では、下流側の処理システムが他のディシジョン・ツリー・スコアラーまたは他のシステムを含んでもよい。
【０１０９】
[00112]  図９は、種々の実施形態にしたがって、ディシジョン・ツリー・クラスターによって複数のディシジョン・ツリーを採点するプロセス９００を示す。９０２において、ディシジョン・ツリー・クラスター（ＤＴＣ）１２２はディシジョン・ツリー・スコアラー１０２または近隣ＤＴＣ１２２から特徴ベクトル（共通の特徴ベクトルのような）を受け取る。９０４において、ＤＴＣ１２２は特徴ベクトルを他の近隣ＤＴＣ１２２に供給する。このように、特徴ベクトルはディシジョン・ツリー・スコアラー内部の全てのＤＴＣに分散される。
【０１１０】
[00113]  ９０６において、ディシジョン・ツリー・クラスター１２２は、複数のＤＴＣ１２２内部の複数のディシジョン・ツリー・プロセッサー１２４に、ＤＴＣ１２２上にロードされたモデル・コンテキスト内で複数のディシジョン・ツリーの実行を開始させる。複数のディシジョン・ツリーの実行は、同時であってもよく、更にマルチスレッド、マルチステージ、パイプライン型ディシジョン・ツリー・プロセッサーによって実行されてもよい。ディシジョン・ツリーの実行は、とりわけ、閾値（または閾値インデックス値）の共通特徴ベクトルの特徴値（または特徴インデックス値）との比較、およびこの比較に基づく次のノードおよび／または出力値の選択を含む。ディシジョン・ツリーの実行により、複数のディシジョン・ツリーのそれぞれに対して対応する採点が得られる。
【０１１１】
[00114]  ９０８において、ＤＴＣ１２２は、ディシジョン・ツリー・プロセッサー１２４上におけるディシジョン・ツリーの実行から得られた、対応するスコアおよび完了信号をディシジョン・ツリー・プロセッサー１２４から受け取る。９１０において、ＤＴＣ１２２は、近隣ＤＴＣ１２２からスコアおよび完了信号を受け取る。
【０１１２】
[00115]  ９１２において、完了信号およびスコアの受け取りに基づいて、ＤＴＣ１２２は、ＤＴＣ１２２内部のディシジョン・ツリー・プロセッサー１２４からのスコアを、近隣ＤＴＣ１２２からのスコアと共に処理する。例えば、ＤＴＣ１２２はこれらのスコアを総計して、蓄積スコアを生成する。他の例では、ＤＴＣ１２２は、ＤＴＣ１２２内部のディシジョン・ツリー・プロセッサー１２４からのスコア、またはスコアの総計を、近隣ＤＴＣ１２２から受け取ったスコア・データーに添付することができる。
【０１１３】
[00116]  ９１４において、ＤＴＣ１２２は蓄積スコアおよび完了信号を近隣ＤＴＣ１２２に伝搬し、最終的にＤＴＣ１２２の内最後の１つに到達する。最後のＤＴＣ１２２は最終スコアをディシジョン・ツリー・スコアラー１０２に供給する。このように、ＤＴＣ１２２の各々の内部にあるディシジョン・ツリー・プロセッサー１２４上で実行するディシジョン・ツリーの各々からの個々のスコアが、ディシジョン・ツリー・プロセッサーの個々の１つずつからのスコアの最終的な総計あるいはスコアのリストまたは集合のような、最終スコア・データーに蓄積され、ディシジョン・ツリー・スコアラー１０２に伝搬される。
【０１１４】
[00117]  図１０は、種々の実施形態にしたがって複数のディシジョン・ツリーの閾値をコード化するプロセス１０００を示す。１００２において、ディシジョン・ツリー・コーダー１０６は、モデル・コンテキスト１００８内にあるものというような、特定の特徴に対応する複数のディシジョン・ツリーの全てのディシジョン・ノードにおいて参照された全ての閾値を識別する。
【０１１５】
[00118]  １００４において、ディシジョン・ツリー・コーダー１０６は、１つ以上のディシジョン・ツリーにおける特定の特徴に関連付けられた一意の閾値のリストを決定する。ある実施形態では、このリストは、昇順または降順でというように、並び替えられる。１００６において、ディシジョン・ツリー・コーダー１０６は、少なくとも部分的に、１つ以上のディシジョン・ツリーにおける特定の特徴に関連付けられた一意の閾値の並び替えリストにおける値の数に基づいて、閾値の閾値インデックス値を表すために使用されるビット数を決定する。
【０１１６】
[00119]  特定的な一例では、特定の特徴に関連付けられた閾値の総数の底を２とする対数(base-2-logarithm)が４未満である場合、閾値インデックスは４ビット・ワードとしてコード化され、特定の特徴に関連付けられた閾値の総数の底を２とする対数が８未満である場合、閾値インデックスは８ビット・ワードとしてコード化される。特定の特徴に関連付けられた閾値の総数の底を２とする対数が８よりも大きい場合、特定の特徴を表す特徴の数がｎ／２５５によって決定されるように、コード化ディシジョン・ツリーにおいて特定の特徴を表すために多数の特徴が使用される。ここで、ｎはこの詳細な説明において他のところで説明したように、特定の特徴に関連付けられた閾値の総数に等しい。これらの多数の特徴に対する閾値を表すために、８ビット・ワードが使用される。他の実施形態では、ディシジョン・ツリーは、一意の閾値の数が所定値を超える１つのノードの代わりに、多数のディシジョン・ノードを含むように変更される。実施形態の範囲から逸脱することなく、他の例も可能である。
【０１１７】
[00120]  １００８において、ディシジョン・ツリー・コーダー１０６は、一意の閾値のリストに対して、複数の閾値インデックス値を決定する。ある実施形態では、小さい閾値に関連付けられた閾値インデックス値の方が大きい閾値に関連付けられた閾値インデックス値よりも小さくなるように、インデックス値が並び替えリストに指定されるが、他の実施形態では、大きい方のインデックス値程、小さい方の閾値に指定される。特定的な一例では、一意の閾値の内最も小さい１つに、０の閾値インデックス値が指定され、最も大きな１つに、一意の閾値の総数から１を減じた値に等しい閾値インデックス値が指定される。実施形態の範囲から逸脱することなく、他の例も可能である。
【０１１８】
[00121]  １０１０において、ディシジョン・ツリー・コーダー１０６は、特定の特徴に関連付けられた１つ以上のディシジョン・ツリーのディシジョン・ノードが閾値インデクス値を含むように、１つ以上のディシジョン・ツリーを表す。プロセス１０００は、複数のディシジョン・ツリーにおける全ての閾値が閾値インデックス値でコード化されるまで、複数のディシジョン・ツリーの少なくとも１つのディシジョン・ノードにおいて参照された特徴毎に繰り返される。
【０１１９】
[00122]  図１１は、種々の実施形態にしたがって特徴値のベクトルをコード化するプロセス１１００を示す。図１０に関して先に説明したように、各特徴に対する閾値がコード化される。１組のコード化ディシジョン・ツリーと対照して採点される特徴ベクトルの特徴値は、特徴値がコード化閾値と共用できるようにコード化される。１１０２において、特徴ベクトル・コーダー１１０は、複数のディシジョン・ツリーによって採点されることになる特徴ベクトル１１２を受け取る。
【０１２０】
[00123]  １１０４において、特徴ベクトル・コーダー１１０は、特定の特徴に関連付けられた特徴値を、特定の特徴に対応する閾値（例えば、以上で説明したリストｔｓｉ）と比較する。１１０６において、特徴ベクトルにおける特定の特徴に対応する特徴値が、複数のディシジョン・ツリーにおいて特定の特徴に関連付けられた１組の閾値における最も大きな閾値よりも大きいか否かについて、特徴ベクトル・コーダー１１０によって判定が行われる。
【０１２１】
[00124]  １１０８において、特徴値が最も大きな閾値よりも大きくないと判定したとき（「ＮＯ」パス）、特徴ベクトル・コーダー１１０は、特徴値以上である一意の閾値のリストの中で最も小さい１つを識別する。
【０１２２】
[00125]  １１１０において、特徴ベクトル・コーダー１１０は、一意の閾値の並び替えリストの内最も小さな１つに対応する、並び替え閾値インデックス値の内の特定の１つに等しいコード化特徴値（例えば、特徴インデックス値）を生成するために、特徴値をコード化する。
【０１２３】
[00126]  １１１２において、特徴値が最も大きな閾値よりも大きいと判定したとき（「ＹＥＳ」パス）、特徴ベクトル・コーダー１１０は、特徴インデックス値を、最も大きな閾値インデックス値よりも大きくなるように設定する。特定的な一例では、特徴インデックス値は、特徴に関連付けられた一意の閾値の総数に等しく設定されるが、最も大きな閾値インデックス値より大きい任意の数を使用することができる。このように、ディシジョン・ツリー実行（ディシジョン・ツリー・プロセッサー１２４によるというような）中における閾値インデックス値の対応する特徴インデックス値との比較の結末が、対応する閾値の対応する特徴値との比較の結末と同等になるように、特徴インデックス値が設定される。
【０１２４】
[00127]  図７〜図１１のプロセス例の動作は、個別のブロックで示され、これらのブロックを参照して概説された。これらの動作を説明した順序は、限定と解釈されることは意図しておらず、任意の数の説明した動作を任意の順序で組み合わせることができ、下位動作に分けることができ、および／またはプロセスを実施するために並列に実行することができる。本開示の種々の実施形態によるプロセスは、論理フロー・グラフに表した動作の一部だけまたは全てを含むこともある。
【０１２５】
計算システム例
[00128]  図１２は、本明細書において説明した種々の方法を実行するために使用可能な計算システム例１２００のブロック図である。計算システム１２００は、ホスト１０４のようにな、ディシジョン・ツリー採点システムの全部または一部を実現することが可能な任意の適した計算デバイスとして構成することができる。非限定的な種々の例によれば、適した計算デバイスは、パーソナル・コンピューター（ＰＣ）、ハンドヘルド・デバイス、ウェアラブル・スマート・デバイス、スマートフォン、タブレット・コンピューター、ラップトップ・コンピューター、デスクトップ・コンピューター、ゲーミング・システム、電子メディア・プレーヤ（ｍｐ３プレーヤおよび電子書籍リーダーのような）、サーバー、サーバー・ファーム、データーセンター、特殊目的コンピューター、これらの組み合わせ、あるいは本明細書において説明したディシジョン・ツリー採点システムの全部または一部を格納および実行することができる任意の他の計算デバイス（１つまたは複数）を含むことができる。
【０１２６】
[00129]  一構成例では、計算システム１２００は１つ以上のプロセッサー１２０２とメモリー１２０４とを含む。また、計算システム１２００は、種々の他のシステムとの通信を可能にする通信接続（１つまたは複数）１２０６も内蔵することができる。また、計算システム１２００は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス等のような１つ以上の入力デバイス１２０８と、ディスプレイ、スピーカー、プリンター等のような１つ以上の出力デバイス１２１０とを含むことができ、これらはプロセッサー（１つまたは複数）１２０２およびメモリー１２０４に通信可能に結合される。
【０１２７】
[00130]  メモリー１２０４は、プロセッサー（１つまたは複数）１２０２上にロード可能および実行可能なプログラム命令、ならびにこれらのプログラムの実行中に生成されたデーター、および／またはこれらのプログラムと共に使用可能なデーターを格納することができる。図示する例では、メモリー１２０４は、計算システム１２００の基本システム機能を提供し、とりわけ、計算システム１２００の他のプログラムおよびプログラム・モジュールの動作を可能にする(provide for)オペレーティング・システム１２１２を格納する。
【０１２８】
コンピューター読み取り可能媒体
[00131]  使用する計算デバイスの構成およびタイプに応じて、図１２における計算システム１２００のメモリー１２０４は、揮発性メモリー（ランダム・アクセス・メモリー（ＲＡＭ）のような）および／または不揮発性メモリー（リード・オンリー・メモリー（ＲＯＭ）、フラッシュ・メモリー等のような）を含むことができる。また、メモリー１２０４は、追加のリムーバブル・ストレージおよび／または非リムーバブル・ストレージも含むことができ、フラッシュ・メモリー、磁気ストレージ、光ストレージ、および／またはコンピューター読み取り可能命令、データー構造、プログラム・モジュール、および計算システム１２００のための他のデーターの不揮発性格納を提供することができるテープ・ストレージを含むが、これらに限定されるのではない。
【０１２９】
[00132]  メモリー１２０４は、コンピューター読み取り可能媒体の一例である。コンピューター読み取り可能媒体は、少なくとも２つのタイプのコンピューター読み取り可能媒体、即ち、コンピューター記憶媒体および通信媒体を含む。コンピューター記憶媒体は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターのような情報の格納のための任意のプロセスまたは技術で実現される。コンピューター記憶媒体は、相変化メモリー（ＰＲＡＭ）、スタティック・ランダム・アクセス・メモリー（ＳＲＡＭ）、ダイナミック・ランダム・アクセス・メモリー（ＤＲＡＭ）、他のタイプのランダム・アクセス・メモリー（ＲＡＭ）、リード・オンリー・メモリー（ＲＯＭ）、電気的消去可能プログラマブル・リード・オンリー・メモリー（ＥＥＰＲＯＭ）、フラッシュ・メモリーまたは他のメモリー技術、コンパクト・ディスク・リード・オンリー・メモリー（ＣＤ−ＲＯＭ）、ディジタル・バーサタイル・ディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、あるいは計算デバイスによるアクセスのために情報を格納するために使用することができる任意の他の非伝送媒体を含むが、これらに限定されるのではない。対照的に、通信媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターを、搬送波のような変調データー信号、あるいは他の伝送メカニズムに具体化することができる。本明細書において定義する場合、コンピューター記憶媒体は通信媒体を含まない。
【０１３０】
結論
[00133]  本開示では、構造的特徴および／または方法論的アクトに特定的な文言を使用したが、本発明は、説明した具体的な特徴やアクトに限定されるのではない。逆に、具体的な特徴およびアクトは、本発明を実現する実証的な形態として開示したまでである。
【図１】
0006605573.tif 000013
【図２】
0006605573.tif 000014
【図３】
0006605573.tif 000015
【図４】
0006605573.tif 000016
【図５】
0006605573.tif 000017
【図６】
0006605573.tif 000018
【図７】
0006605573.tif 000019
【図８】
0006605573.tif 000020
【図９】
0006605573.tif 000021
【図１０】
0006605573.tif 000022
【図１１】
0006605573.tif 000023
【図１２】
0006605573.tif 000024