(57)【要約】【課題】データ並列性を保つことで、検索速度の向上を実現する。【解決手段】検索対象データ２と、複数の記憶値５０を有する記憶構造５とを格納した記憶手段と、キーデータに基づいて検索処理を行う演算手段と、を備える検索装置１であって、検索対象データ２は、複数の検索値３１を含む検索グループ３と、複数の評価データ４１を有するアルファデータ４と、を有し、演算手段は、ＳＩＭＤ命令を用いて評価データ４１のそれぞれとキーデータとの大小関係を同時に算出した結果から選択値Ｓ１を導出し、選択値Ｓ１に基づいて複数の選択検索値３１ｓを選択するベクタ比較手段Ｓ１１０と、ＳＩＭＤ命令を用いて選択検索値３１ｓのそれぞれとキーデータとの大小関係を同時に算出した結果から特定値Ｓ２を導出し、特定値Ｓ２に基づいて第１検索値３１ｆを選択する最終検索手段Ｓ１２０と、第１記憶値を取得する取得手段Ｓ１３０と、を有する。【選択図】図１
2018196075.tif 000002
【特許請求の範囲】
【請求項１】
範囲検索表で形成された検索対象データと、複数の記憶値を有する記憶構造とを格納した記憶手段と、
キーデータに基づいて検索処理を行う演算手段と、
を備える検索装置であって、
前記検索対象データは、
前記複数の記憶値のそれぞれに紐づく複数の検索値を含む検索グループと、
前記キーデータとの比較対象となる複数の評価データを有するアルファデータと、
を有し、
前記演算手段は、
前記複数の評価データを取得し、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いて前記評価データのそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から選択値を導出し、前記選択値に基づいて前記検索グループから複数の選択検索値を選択するための上限値、下限値、及び選択幅を導出するベクタ比較手段と、
前記下限値及び前記選択幅に基づいて前記選択検索値を取得し、前記ＳＩＭＤ命令を用いて前記選択検索値のそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から特定値を導出し、前記特定値に基づいて前記選択検索値から第１検索値を選択する最終検索手段と、
前記第１検索値に基づいて前記複数の記憶値から第１記憶値を取得する取得手段と、
を有すること
を特徴とする検索装置。
【請求項２】
前記演算手段は、前記ベクタ比較手段のあと、前記選択幅と、予め設定されたバイナリ範囲の値とを比較し、前記選択幅が前記バイナリ範囲の値よりも大きい場合に、前記選択幅を減少させるバイナリ範囲検索手段を有すること
を特徴とする請求項１記載の検索装置。
【請求項３】
前記アルファデータは、前記複数の検索値の一部に紐づく複数のインデックスデータを有し、
前記ベクタ比較手段は、
前記選択値に基づいて、前記インデックスデータの有する第１データを前記下限値として設定し、
前記選択値に基づいて、前記インデックスデータの有する第２データを前記上限値として設定し、
前記上限値から前記下限値を減算した値を選択幅として設定すること
を有し、
前記最終検索手段は、前記検索グループのうち、前記第１データに紐づく下限検索値から前記選択幅に対応する検索値までを、前記複数の選択検索値として取得すること
を有すること
を特徴とする請求項１又は２記載の検索装置。
【請求項４】
前記複数の記憶値は、
ＩＰアドレスのプレフィックスを含む複数のインターバルベースと、
ＩＰアドレスのインデックスを含む複数のネクストホップインデックスベースと、
を有し、
前記記憶構造は、前記複数のインターバルベース及び前記ネクストホップインデックスベースを並列に配置した構造であること
を特徴とする請求項１〜３の何れか１項記載の検索装置。
【請求項５】
コンピュータを、請求項１〜４の何れか１項に記載の前記検索装置における各手段として機能させることを特徴とする検索プログラム。
【請求項６】
範囲検索表で形成された検索対象データと、複数の記憶値を有する記憶構造とを格納した記憶手段と、
キーデータに基づいて検索処理を行う演算手段と、
を備える検索装置が実行する検索方法であって、
前記検索対象データは、
前記複数の記憶値のそれぞれに紐づく複数の検索値を含む検索グループと、
前記キーデータとの比較対象となる複数の評価データを有するアルファデータと、
を有し、
前記演算手段は、
前記複数の評価データを取得し、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いて前記評価データのそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から選択値を導出し、前記選択値に基づいて前記検索グループから複数の選択検索値を選択するための上限値、下限値、及び選択幅を導出するベクタ比較手段と、
前記下限値及び前記選択幅に基づいて前記選択検索値を取得し、前記ＳＩＭＤ命令を用いて前記選択検索値のそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から特定値を導出し、前記特定値に基づいて前記選択検索値から第１検索値を選択する最終検索手段と、
前記第１検索値に基づいて前記複数の記憶値から第１記憶値を取得する取得手段と、
を有すること
を特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索装置、検索プログラム、及び検索方法に関する。
【背景技術】
【０００２】
高速ＩＰネットワークを実現するためには、高速なＩＰネットワークの検索が不可欠である。また、このようなＩＰネットワークの検索技術は、ルータだけでなくFirewallや侵入検知システム、ネットワークトラフィック監視装置等にも幅広く利用される基盤技術である。ハードウェアとしては、ＴＣＡＭ（Ternary Content Addressable Memory）を用いた専用ハードウェアが一般的であるが、回路ゲート数の問題から、規模と速度の向上には電源消費、回路密度、コストに関する課題が挙げられる。また、専用ハードウェアでは、他のソフトウェアと組み合わせられる柔軟性を備えていない。上記に加え、近年では、ＮＦＶ（Network Functions Virtualization：ネットワーク機能仮想化）との組み合わせの観点等からもソフトウェアとの組み合わせが求められている。このような状況に対し、汎用の計算機ハードウェア（ＰＣ等）を用いて、ソフトウェアによりＩＰネットワーク等における経路検索を実行する技術として、例えばＤＸＲ、ＳＡＩＬ、Ｐｏｐｔｒｉｅ等が提案されている。特に、検索対象データの高速検索方法等として、特許文献１及び特許文献２が提案されている。
【０００３】
特許文献１では、検索対象データを格納した記憶手段と、キーデータに基づき前記検索対象データに対する検索処理を行う演算手段と、を備える検索装置に関する技術が開示されている。前記記憶手段に格納される前記検索対象データは、内部ノード配列とリーフノード配列を有する多進木構造のデータであり、前記検索対象データにおける各内部ノードは、遷移先が内部ノードであるかリーフノードであるかをビットで表したビットベクトルを含む。前記演算手段は、キーデータから所定ビット長のチャンクを取得し、アクセスしている内部ノードの前記ビットベクトルにおける当該チャンクの値に対応するビットに基づき、当該内部ノードからの遷移先が内部ノードであるか、リーフノードであるかを判定し、遷移先のノードにアクセスする処理を、遷移先がリーフノードになるまで繰り返し実行する。
【０００４】
特許文献２では、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための技術が開示されている。ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築すること、及び、検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索することを含む。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−１７０５２６号公報
【特許文献２】特開２０１５−１１８６０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、汎用ハードウェアのＣＰＵには、決められたビット幅の複数データに対し、１つの命令で同一処理を同時に適用するＳＩＭＤ（Single Instruction Multiple Data）命令を備えていることがある。このＳＩＭＤ命令を用いることで、検索対象データの高速検索が期待されている。しかしながら、特許文献１及び特許文献２のような木構造で表現される検索対象データに対してＳＩＭＤ命令を用いた場合、データハザードや分岐ハザード等の発生が懸念として挙げられる。このため、データ並列性を保つことが困難となり、検索速度の向上の妨げとなる恐れがある。
【０００７】
そこで本発明は、上述した問題点に鑑みて案出されたものであり、その目的とするところは、データ並列性を保つことで、検索速度の向上を実現できる検索装置、検索プログラム、及び検索方法を提供することにある。
【課題を解決するための手段】
【０００８】
本発明者らは、上述した問題点を解決するために、範囲検索表で形成された検索対象データと、複数の記憶値を有する記憶構造とを格納した記憶手段と、キーデータに基づいて検索処理を行う演算手段と、を備え、検索対象データは、複数の記憶値のそれぞれに紐づく複数の検索値を含む検索グループと、キーデータとの比較対象となる複数の評価データを有するアルファデータと、を有し、演算手段は、複数の評価データを取得し、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いて評価データのそれぞれの値とキーデータの値との大小関係を同時に算出した結果から選択値を導出し、選択値に基づいて検索グループから複数の選択検索値を選択するための上限値、下限値、及び選択幅を導出するベクタ比較手段と、下限値及び選択幅に基づいて選択検索値を取得し、ＳＩＭＤ命令を用いて選択検索値のそれぞれの値とキーデータの値との大小関係を同時に算出した結果から特定値を導出し、特定値に基づいて選択検索値から第１検索値を選択する最終検索手段と、第１検索値に基づいて複数の記憶値から第１記憶値を取得する取得手段と、を有する検索装置、各手段としてコンピュータを機能させるための検索プログラム、及び検索装置が実行する検索方法を発明した。
【０００９】
請求項１に記載の検索装置は、範囲検索表で形成された検索対象データと、複数の記憶値を有する記憶構造とを格納した記憶手段と、キーデータに基づいて検索処理を行う演算手段と、を備える検索装置であって、前記検索対象データは、前記複数の記憶値のそれぞれに紐づく複数の検索値を含む検索グループと、前記キーデータとの比較対象となる複数の評価データを有するアルファデータと、を有し、前記演算手段は、前記複数の評価データを取得し、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いて前記評価データのそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から選択値を導出し、前記選択値に基づいて前記検索グループから複数の選択検索値を選択するための上限値、下限値、及び選択幅を導出するベクタ比較手段と、前記下限値及び前記選択幅に基づいて前記選択検索値を取得し、前記ＳＩＭＤ命令を用いて前記選択検索値のそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から特定値を導出し、前記特定値に基づいて前記選択検索値から第１検索値を選択する最終検索手段と、前記第１検索値に基づいて前記複数の記憶値から第１記憶値を取得する取得手段と、を有することを特徴とする。
【００１０】
請求項２に記載の検索装置は、請求項１記載の発明において、前記演算手段は、前記ベクタ比較手段のあと、前記選択幅と、予め設定されたバイナリ範囲の値とを比較し、前記選択幅が前記バイナリ範囲の値よりも大きい場合に、前記選択幅を減少させるバイナリ範囲検索手段を有することを特徴とする。
【００１１】
請求項３に記載の検索装置は、請求項１又は２記載の発明において、前記アルファデータは、前記複数の検索値の一部に紐づく複数のインデックスデータを有し、前記ベクタ比較手段は、前記選択値に基づいて、前記インデックスデータの有する第１データを前記下限値として設定し、前記選択値に基づいて、前記インデックスデータの有する第２データを前記上限値として設定し、前記上限値から前記下限値を減算した値を選択幅として設定することを有し、前記最終検索手段は、前記検索グループのうち、前記第１データに紐づく下限検索値から前記選択幅に対応する検索値までを、前記複数の選択検索値として取得することを有することを特徴とする。
【００１２】
請求項４に記載の検索装置は、請求項１〜３の何れか１項記載の発明において、前記複数の記憶値は、ＩＰアドレスのプレフィックスを含む複数のインターバルベースと、ＩＰアドレスのインデックスを含む複数のネクストホップインデックスベースと、を有し、前記記憶構造は、前記複数のインターバルベース及び前記ネクストホップインデックスベースを並列に配置した構造であることを特徴とする。
【００１３】
請求項５に記載の検索プログラムは、コンピュータを、請求項１〜４の何れか１項に記載の前記検索装置における各手段として機能させることを特徴とする。
【００１４】
請求項６に記載の検索方法は、範囲検索表で形成された検索対象データと、複数の記憶値を有する記憶構造とを格納した記憶手段と、キーデータに基づいて検索処理を行う演算手段と、を備える検索装置が実行する検索方法であって、前記検索対象データは、前記複数の記憶値のそれぞれに紐づく複数の検索値を含む検索グループと、前記キーデータとの比較対象となる複数の評価データを有するアルファデータと、を有し、前記演算手段は、前記複数の評価データを取得し、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いて前記評価データのそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から選択値を導出し、前記選択値に基づいて前記検索グループから複数の選択検索値を選択するための上限値、下限値、及び選択幅を導出するベクタ比較手段と、前記下限値及び前記選択幅に基づいて前記選択検索値を取得し、前記ＳＩＭＤ命令を用いて前記選択検索値のそれぞれの値と前記キーデータの値との大小関係を同時に算出した結果から特定値を導出し、前記特定値に基づいて前記選択検索値から第１検索値を選択する最終検索手段と、前記第１検索値に基づいて前記複数の記憶値から第１記憶値を取得する取得手段と、を有することを特徴とする。
【発明の効果】
【００１５】
上述した構成からなる本発明によれば、ベクタ比較手段は、ＳＩＭＤ命令を用いて、評価データのそれぞれの値とキーデータの値との大小関係を同時に算出した結果から選択値を導出し、最終検索手段は、ＳＩＭＤ命令を用いて選択検索値のそれぞれの値とキーデータの値との大小関係を同時に算出した結果から特定値を導出する。このため、木構造で表現される検索対象データに対してＳＩＭＤ命令を用いた場合等に比べて、データハザードや分岐ハザード等の発生を抑制した状態で、記憶値を取得することができる。これにより、データ並列性を保つことができ、検索速度の向上を実現することが可能となる。
【００１６】
また、上述した構成からなる本発明によれば、バイナリ範囲検索手段は、選択幅がバイナリ範囲の値よりも大きい場合に、選択幅を減少させる。このため、最終検索手段における選択検索値のそれぞれの値とキーデータの値との大小関係を同時に算出するとき、選択検索値の個数をＳＩＭＤ命令におけるレジスタサイズに適合させることができる。これにより、選択検索値の選択数が多い場合においても、データ並列性を保つことができ、検索速度の向上を容易に実現することが可能となる。
【００１７】
また、上述した構成からなる本発明によれば、記憶構造は、インターバルベース及びネクストホップインデックスベースを並列に配置した構造である。このため、一対のインターバルベース及びネクストホップインデックスベースを１つの小構造として複数並列に配置した構成に比べて、ＳＩＭＤ命令におけるレジスタサイズを拡大させることができる。これにより、検索速度のさらなる向上を実現することが可能となる。
【図面の簡単な説明】
【００１８】
【図１】本実施形態における検索装置の一例を示す模式図である。
【図２】図２（ａ）は、本実施形態における検索対象データの一例を示す模式図であり、図２（ｂ）は、本実施形態における記憶構造の一例を示す模式図であり、図２（ｃ）は、本実施形態における記憶構造の変形例を示す模式図である。
【図３】本実施形態における検索装置の変形例を示す模式図である。
【図４】本実施形態における検索装置の演算手段の一例を示すフローチャートである。
【図５】本実施形態におけるベクタ比較手段の一例を示す模式図である。
【図６】本実施形態における最終検索手段の一例を示す模式図である。
【図７】本実施形態における検索装置の演算手段の変形例を示すフローチャートである。
【図８】図８（ａ）及び図８（ｂ）は、本実施形態における検索装置の実施例を示すグラフである。
【図９】図９（ａ）及び図９（ｂ）は、本実施形態における検索装置の実施例を示すグラフである。
【発明を実施するための形態】
【００１９】
実施形態
以下、本発明の実施形態としての検索装置について詳細に説明する。図１は、本実施形態の検索装置１の一例を示す模式図である。図２は、図１の記憶部１２に記憶される各データ（情報）の一例を示す模式図である。
【００２０】
＜検索装置１＞
検索装置１は、図１に示すように、演算部１１と、記憶部１２と、入力部１３と、出力部１４と、インターフェース１３ｉ、１４ｉとを備える。検索装置１として、例えばＰＣ等の汎用の計算機ハードウェアが用いられる。この場合、演算部１１及び記憶部１２が、ＣＰＵを構成する。このとき、演算部１１は、ＳＩＭＤ命令を用いた演算等を実行する。また、記憶部１２は、ＣＰＵのキャッシュメモリに相当するほか、例えば記憶部１２の一部がＣＰＵ外のメモリでもよい。このＣＰＵは、本実施形態における各演算のアルゴリズムを有するプログラムに従って動作する。プログラムは、記憶部１２に格納されるほか、例えば記憶部１２以外に設置された任意のメモリ等に格納されてもよい。
【００２１】
演算部１１は、検索するキーデータに基づき、図２に示す検索対象データ２に対して検索処理を実行する演算手段を有する機能部である。記憶部１２は、検索対象データ２と、記憶構造５とを格納する記憶手段を有する機能部である。入力部１３は、インターフェース１３ｉを介して入力されたキーデータ等を入力する機能部である。出力部１４は、演算部１１により検索処理を実行した結果等を、インターフェース１４ｉを介して出力する機能部である。
【００２２】
＜検索装置１の変形例＞
検索装置１として、例えば図３に示すルータ等が用いられてもよい。この場合、検索装置１は、処理部１５と、設定部１６と、複数のインターフェース１５ｉとを備える。処理部１５は、インターフェース１５ｉを介してパケットを受信し、設定部１６により決定された宛先（ネクストホップ）に対応するインターフェース１５ｉからパケットを出力する。
【００２３】
設定部１６は、ルーティングテーブルを格納する記憶部を備え、処理部１５からパケットの宛先アドレスをキーデータとして受け取る。その後、キーデータに基づいてルーティングテーブルを検索することにより、パケットのネクストホップを決定し、ネクストホップの情報を処理部１５に出力する。設定部１６として、例えば図１に示した演算部１１、記憶部１２、入力部１３、及び出力部１４が用いられてもよい。
【００２４】
＜検索対象データ２＞
検索対象データ２は、図２（ａ）に示すように、検索グループ３と、アルファデータ４（Alpha Data）とを有する。検索対象データ２は、検索グループ３及びアルファデータ４を並列した範囲検索表で形成される。なお、検索グループ３及びアルファデータ４は、ベーステーブルポイント（Base Table Point）を境にして配置される。
【００２５】
検索グループ３は、複数の検索値３１を含む。検索値３１の個数（サイズ）は任意であり、例えば図２（ａ）では１７個である。各検索値３１は、記憶構造５の有する記憶値５０に紐づいている。
【００２６】
アルファデータ４は、複数の評価データ４１（k-aryed Data）と、複数のインデックスデータ４２（Index Data）とを有する。評価データ４１は、キーデータとの比較対象として用いられる。インデックスデータ４２は、複数の検索値３１の一部に紐づいている。
【００２７】
評価データ４１及びインデックスデータ４２の個数並びに評価データ４１のビット幅は、ＳＩＭＤ命令におけるレジスタサイズに応じて任意に変更することができ、ＣＰＵのキャッシュメモリの使用容量を調整できる。このため、本実施形態における検索装置１では、ＣＰＵのキャッシュメモリを有効に用いることができる。なお、ＳＩＭＤ命令におけるレジスタサイズは、１つの命令で同一処理を同時に適用できるサイズを示す。
【００２８】
例えば、ＳＩＭＤ命令に１２８ｂｉｔのレジスタが用いられ、レジスタサイズを４とした場合、図２（ａ）のように４個の評価データ４１及び５個のインデックスデータ４２が設定され、各評価データ４１のビット幅は３２ｂｉｔで設定される。また、ＳＩＭＤ命令に２５６ｂｉｔのレジスタが用いられ、レジスタサイズを１６とした場合、１６個の評価データ４１及び１７個のインデックスデータ４２が設定され、各評価データ４１のビット幅は１６ｂｉｔで設定される。
【００２９】
＜記憶構造５＞
記憶構造５は、図２（ｂ）に示すように、複数の記憶値５０を有する。記憶値５０は、検索処理の実行により取得される。記憶値５０は、複数のインターバルベース５ａと、複数のネクストホップインデックスベース５ｂとを有する。インターバルベース５ａは、例えばＩＰアドレスのプレフィックス情報を含む。ネクストホップインデックスベース５ｂは、例えばＩＰアドレスのインデックス情報を含む。
【００３０】
記憶構造５は、例えば複数のインターバルベース５ａを並列に配置したインターバルベースアレイ５１、及び、複数のネクストホップインデックスベース５ｂを並列に配置したネクストホップインデックスベースアレイ５２が、並列に配置された構造である。このとき、各記憶値５０のビット幅は、１６ｂｉｔで設定される。
【００３１】
＜記憶構造５の変形例＞
記憶構造５は、例えば図２（ｃ）に示すように、一対のインターバルベース５ａ及びネクストホップインデックスベース５ｂを１つの小構造５３として複数並列に配置した構造でもよい。このとき、各小構造５３のビット幅は、３２ｂｉｔで設定される。
【００３２】
＜検索装置１の演算手段＞
次に、本実施形態における検索装置１の演算手段の一例について説明する。図４は、本実施形態における検索装置１の演算手段の一例を示すフローチャートである。
【００３３】
＜ベクタ比較手段Ｓ１１０（ＶＣＩ）＞
先ず、ベクタ比較手段Ｓ１１０について説明する。演算部１１は、記憶部１２に格納された複数の評価データ４１を取得する（ステップＳ１１１）。複数の評価データ４１として、例えば図５に示すように、「０」、「４０」、「８０」、「１４０」の４個が取得される。
【００３４】
演算部１１は、入力部１３に入力された、又は、予め記憶部１２に格納されたキーデータ（RS-Key）を取得する。キーデータとして、例えば「５０」が取得される。なお、キーデータの値は、ユーザ等によって任意に設定される。演算部１１は、このキーデータに基づいて検索処理を行い、対応する値を取得する。
【００３５】
その後、演算部１１は、ＳＩＭＤ命令を用いて、取得した評価データ４１のそれぞれの値とキーデータの値との大小関係を同時に算出した結果から選択値Ｓ１を導出する（ステップＳ１１２：SIMD Calculation）。演算部１１は、ＳＩＭＤ命令におけるレジスタサイズ（本実施形態では４）に合わせて、大小関係を同時に算出し、ビット列で算出結果を示す。例えばキーデータの値が評価データ４１の値以上の場合に、「１」を算出結果として示し、キーデータの値が評価データ４１未満の場合に、「０」を算出結果として示す。図５に示す例では、評価データ４１の「０」、「４０」、「８０」、及び「１４０」のそれぞれと、キーデータの「５０」との大小関係を同時に算出した結果として、「１」、「１」、「０」、及び「０」を示す。
【００３６】
演算部１１は、ＳＩＭＤ命令を用いて算出した結果から、選択値Ｓ１を導出する。選択値Ｓ１は、算出された各値を加算することによって導出される。図５に示す例では、選択値Ｓ１（Popcnt）として、「１」、「１」、「０」、及び「０」を加算した「２」が導出される。選択値Ｓ１は、検索グループ３から、選択対象となる複数の選択検索値３１ｓを選択するために用いられる。
【００３７】
その後、演算部１１は、選択値Ｓ１に基づいて、検索グループ３から複数の選択検索値３１ｓを選択するための上限値、下限値、及び選択幅を導出する（ステップＳ１１３）。演算部１１は、選択値Ｓ１に基づいてインデックスデータ４２の有する第１データ４２ａを下限値として設定し、選択値Ｓ１に基づいてインデックスデータ４２の有する第２データ４２ｂを上限値として設定する（Selected Range）。また、演算部１１は、上限値から下限値を減算した値を選択幅として設定する。
【００３８】
例えばインデックスデータ４２の左端のデータ（評価データ４１と隣接するデータ）を０番目のデータとした場合、「選択値（Ｓ１）−１」番目のデータ（第１データ４２ａ）が下限値として設定され、「選択値（Ｓ１）」番目のデータ（第２データ４２ｂ）が上限値として設定される。図５に示す例では、選択値Ｓ１が「２」を示すため、１番目のデータ「４」（第１データ４２ａ）が下限値として、２番目のデータ「８」（第２データ４２ｂ）が上限値として設定される。また、「８」から「４」を減算した「４」が、選択幅として設定される。
【００３９】
演算部１１は、検索グループ３から、第１データ４２ａに紐づく下限検索値３１ｂと、第２データ４２ｂに紐づく上限検索値３１ｕとを指定する。図５に示す例では、下限検索値３１ｂとして「４０」が指定され（Lower）、上限検索値３１ｕとして「８０」が指定される（Upper）。
【００４０】
＜最終検索手段Ｓ１２０（ＶＣＦ）＞
次に、最終検索手段Ｓ１２０について説明する。演算部１１は、下限値及び選択幅に基づいて複数の選択検索値３１ｓを取得する（ステップＳ１２１：Load to SIMD Register）。演算部１１は、下限値（第１データ４２ａ）に紐づく下限検索値３１ｂから選択幅に対応する検索値３１までを、複数の選択検索値３１ｓとして取得する。図６の例では、下限検索値３１ｂの「４０」から選択幅「４」に対応する検索値３１の「５０」、「６０」、及び「７０」までを、複数の選択検索値３１ｓとして取得する。
【００４１】
その後、演算部１１は、ＳＩＭＤ命令を用いて、取得した選択検索値３１ｓのそれぞれの値とキーデータの値との大小関係を同時に算出した結果から特定値Ｓ２を導出する（ステップＳ１２２：SIMD Calculation）。演算部１１は、ＳＩＭＤ命令におけるレジスタサイズ（本実施形態では４）に合わせて、大小関係を同時に算出し、ビット列で算出結果を示す。例えばキーデータの値が選択検索値３１ｓの値以上の場合に、「１」を算出結果として示し、キーデータの値が選択検索値３１ｓ未満の場合に、「０」を算出結果として示す。図６に示す例では、選択検索値３１ｓの「４０」、「５０」、「６０」、及び「７０」のそれぞれと、キーデータ「５０」との大小関係を同時に算出した結果として、「１」、「１」、「０」、及び「０」を示す。
【００４２】
演算部１１は、ＳＩＭＤ命令を用いて算出した結果から、特定値Ｓ２を導出する。特定値Ｓ２は、算出された各値を加算することによって導出される。図６に示す例では、特定値Ｓ２（Popcnt）として、「１」、「１」、「０」、及び「０」を加算した「２」が導出される。特定値Ｓ２は、選択検索値３１ｓから、選択対象となる検索値３１（第１検索値３１ｆ）を特定するために用いられる。
【００４３】
その後、演算部１１は、特定値Ｓ２に基づいて選択検索値３１ｓから第１検索値３１ｆを選択する（ステップＳ１２３）。演算部１１は、例えば上述した下限値を用いることで、選択検索値３１ｓから第１検索値３１ｆを選択できる。
【００４４】
例えば検索グループ３の左端の検索値３１（インデックスデータ４２と隣接する検索値３１）を０番目の検索値３１とした場合、「下限値＋特定値（Ｓ２）−１」番目の検索値３１が、第１検索値３１ｆとして選択される（Lower + Popcnt - 1）。図６に示す例では、特定値Ｓ２に基づいて、「４（下限値）＋２（特定値Ｓ２）−１＝５」番目の「５０」が、第１検索値３１ｆとして選択される。
【００４５】
＜取得手段Ｓ１３０＞
次に、取得手段Ｓ１３０について説明する。演算部１１は、選択された第１検索値３１ｆに基づいて、複数の記憶値５０から第１記憶値を取得する（ステップＳ１３１：Read Nexthop Index Base）。第１記憶値は、例えば図２（ｂ）に示した複数のネクストホップインデックスベース５ｂのうちの１つである。
【００４６】
上述した各手段を実行することにより、検索装置１の演算手段が終了する。なお、上記ではベクタ比較手段Ｓ１１０を実行したあと、最終検索手段Ｓ１２０を実行する説明をしたが、例えばベクタ比較手段Ｓ１１０を実行したあと、さらにベクタ比較手段Ｓ１１０を実行してもよい。また、上記ではキーデータとして「５０」を用いて説明したが、キーデータとして「５１」〜「５９」を用いた場合においても、第１検索値３１ｆとして「５０」を選択することができる。これにより、プレフィックス検索が可能となる。
【００４７】
＜検索装置１の演算手段の変形例＞
次に、本実施形態における検索装置１の演算手段の変形例について説明する。図７は、本実施形態における検索装置１の演算手段の変形例を示すフローチャートである。
【００４８】
検索装置１の演算手段の変形例と、上述した検索装置１の演算手段の一例との違いは、バイナリ範囲検索手段Ｓ１４０を有する点である。その他の構成に関しては、上述した内容と同様のため説明を省略する。
【００４９】
＜バイナリ範囲検索手段Ｓ１４０（ＶＥＬＭ）＞
バイナリ範囲検索手段Ｓ１４０は、ベクタ比較手段Ｓ１１０を実行したあとに必要に応じて実行される。演算部１１は、予め設定されたバイナリ範囲の値を記憶部１２等から取得する。バイナリ範囲の値は、例えば格納されたベクトルの要素の数を示し、ＳＩＭＤ命令のレジスタサイズに依存する。例えばＳＩＭＤ命令に２５６ｂｉｔのレジスタが用いられ、レジスタサイズを１６とした場合、バイナリ範囲の値は、１６である。
【００５０】
演算部１１は、選択幅と、バイナリ範囲の値とを比較する（ステップＳ１４１）。このとき、選択幅がバイナリ範囲の値よりも大きい場合には、演算部１１は、選択幅を減少させ（ステップＳ１４２）、再び選択幅と、バイナリ範囲の値とを比較する。
【００５１】
選択幅がバイナリ範囲の値よりも大きい場合、例えば演算部１１は、上述した上限値及び下限値における平均値「（上限値＋下限値）／２」を算出する。その後、検索グループ３の左端の検索値３１を０番目の検索値３１として、「平均値」番目の検索値３１を平均検索値として選択する。
【００５２】
次に、演算部１１は、平均検索値とキーデータの値とを比較する。このとき、キーデータの値が平均検索値以上の場合、下限値として「平均値＋１」を設定する。他方、キーデータの値が平均検索値未満の場合、上限値として「平均値」を設定する。
【００５３】
その後、上記で設定された下限値又は上限値を用いて、選択幅として「上限値−下限値」を設定する。これにより、バイナリ範囲検索手段Ｓ１４０を実行する前後において、選択幅を狭めることができる。これにより、選択検索値３１ｓの個数をＳＩＭＤ命令におけるレジスタサイズに適合させることができる。
【００５４】
なお、選択幅がバイナリ範囲の値以下の場合には、演算部１１はバイナリ範囲検索手段Ｓ１４０を終了し、最終検索手段Ｓ１２０を実行する。その後、上述した最終検索手段Ｓ１２０及び取得手段Ｓ１３０を実行することにより、検索装置１の演算手段が終了する。
【００５５】
本実施形態によれば、ベクタ比較手段Ｓ１１０は、ＳＩＭＤ命令を用いて、評価データ４１のそれぞれの値とキーデータの値との大小関係を同時に算出した結果から選択値Ｓ１を導出し、最終検索手段Ｓ１２０は、ＳＩＭＤ命令を用いて選択検索値３１ｓのそれぞれの値とキーデータの値との大小関係を同時に算出した結果から特定値Ｓ２を導出する。このため、木構造で表現される検索対象データに対してＳＩＭＤ命令を用いた場合等に比べて、データハザードや分岐ハザード等の発生を抑制した状態で、記憶値５０を取得することができる。これにより、データ並列性を保つことができ、検索速度の向上を実現することが可能となる。
【００５６】
また、本実施形態によれば、バイナリ範囲検索手段Ｓ１４０は、選択幅がバイナリ範囲の値よりも大きい場合に、選択幅を減少させる。このため、最終検索手段Ｓ１２０における選択検索値３１ｓのそれぞれの値とキーデータの値との大小関係を同時に算出するとき、選択検索値３１ｓの個数をＳＩＭＤ命令におけるレジスタサイズに適合させることができる。これにより、選択検索値３１ｓの選択数が多い場合においても、データ並列性を保つことができ、検索速度の向上を容易に実現することが可能となる。
【００５７】
また、本実施形態によれば、記憶構造５は、インターバルベース５ａ及びネクストホップインデックスベース５ｂを並列に配置した構造である。このため、一対のインターバルベース５ａ及びネクストホップインデックスベース５ｂを１つの小構造５３として複数並列に配置した構成に比べて、ＳＩＭＤ命令におけるレジスタサイズを拡大させることができる。これにより、検索速度のさらなる向上を実現することが可能となる。
【００５８】
実施例
次に、本発明の実施形態における検索装置１の実施例について説明する。図８及び図９は、本実施例及び参考例におけるルックアップ速度を比較したグラフを示す。図８及び図９の横軸は、条件別の本実施例及び参考例を示し、縦軸は、ルックアップ速度（Ｍｌｐｓ：Mega lookup per second）を示す。
【００５９】
図８及び図９は、２０１６年９月１日時点のRouteViewsアーカイブのLINX（図８（ａ）、プレフィックスｒ：６２９５３０、ネクストホップｎ：４４１）、SAOPAULO（図８（ｂ）、プレフィックスｒ：６３７３１９、ネクストホップｎ：８８９）、SYDNEY（図９（ａ）、プレフィックスｒ：６３１０２０、ネクストホップｎ：１１４）、DIXIE（図９（ｂ）、プレフィックスｒ：６０６４６５、ネクストホップｎ：１５）の経路表（RIB）データセットを使い、repeated traffic（同じ経路ばかり牽く、楽天的なケース）と、random traffic（違う経路ばかり牽く、最悪のケース）の２種類のパターンにより、参考例１〜３及び本実施例のルックアップ速度について比較したものである。
【００６０】
参考例１では従来技術のＳＡＩＬを用いており、参考例２ではＤＸＲを用いており、参考例３ではＰｏｐｔｒｉｅを用いている。参考例１は、ダイレクトポインティングテーブルのビット幅Ｘについて、１つの条件（Ｘ＝１７）について測定し、参考例２、３及び本実施例は、ダイレクトポインティングテーブルのビット幅Ｘを５つの条件（Ｘ＝１７、１８、１９、２０、２１）について測定した。
【００６１】
図８及び図９に示す結果より、本実施例の検索速度は、参考例１よりも約１２６．４％高速であり、参考例２よりも約４７．１％高速であり、参考例３よりも約２３．９％高速であることを確認した。このため、本実施例は、参考例１〜３に比べて、様々な経路及び条件において高いルックアップ速度を示した。これにより、本実施例を用いることで、より高速な経路表等の検索を行えることを確認した。
【００６２】
上述した本実施形態によれば、データ並列性を保つことができ、検索速度の向上を実現できる。このため、実施形態における検索装置１、又は検索プログラムを備える汎用ハードウェアを用いたソフトウェアルータ、又はＮＦＶを構成することによって、これまでより高速なルーティングやルックアップ性能を有することが可能となる。
【００６３】
なお、上述した検索装置１に格納されたプログラムは、例えば可搬メモリ等の記憶媒体に格納されてもよい。この場合、例えば可搬メモリから汎用の計算機ハードウェアにプログラムを格納させることで、任意の汎用の計算機ハードウェア（コンピュータ）を、検索装置１における各手段として機能させることで、上述した内容と同様に、データ並列性を保つことができ、検索速度の向上を実現することが可能となる。
【００６４】
また、本実施形態における検索方法は、上述した検索装置１が実行する記憶手段と演算手段とを備えることで、上述した内容と同様に、データ並列性を保つことができ、検索速度の向上を実現することが可能となる。
【符号の説明】
【００６５】
１        ：検索装置
２        ：検索対象データ
３        ：検索グループ
４        ：アルファデータ
５        ：記憶構造
５ａ      ：インターバルベース
５ｂ      ：ネクストホップインデックスベース
１１      ：演算部
１２      ：記憶部
１３      ：入力部
１３ｉ    ：インターフェース
１４      ：出力部
１４ｉ    ：インターフェース
１５      ：処理部
１５ｉ    ：インターフェース
１６      ：設定部
３１      ：検索値
３１ｂ    ：下限検索値
３１ｆ    ：第１検索値
３１ｓ    ：選択検索値
３１ｕ    ：上限検索値
４１      ：評価データ
４２      ：インデックスデータ
４２ａ    ：第１データ
４２ｂ    ：第２データ
５０      ：記憶値
５１      ：インターバルベースアレイ
５２      ：ネクストホップインデックスベースアレイ
５３      ：小構造
Ｓ１      ：選択値
Ｓ２      ：特定値
Ｓ１１０  ：ベクタ比較手段
Ｓ１２０  ：最終検索手段
Ｓ１３０  ：取得手段
Ｓ１４０  ：バイナリ範囲検索手段
【図１】
2018196075.tif 000003
【図２】
2018196075.tif 000004
【図３】
2018196075.tif 000005
【図４】
2018196075.tif 000006
【図５】
2018196075.tif 000007
【図６】
2018196075.tif 000008
【図７】
2018196075.tif 000009
【図８】
2018196075.tif 000010
【図９】
2018196075.tif 000011