この例では、ブルームフィルターがアプリケーションのパフォーマンスにどう役立つかの事例を提供します。
ドキュメントのフィルタリングには、受信するドキュメント配信を検討して、ユーザーの関心事に最適なものを見つけることが関係しています。こうしたシステムの例として、フィルタリング・メカニズムを使用し、ニュースフィードを監視して、ユーザーのメールアカウントに関連記事を送ることが挙げられます。一般的に、このアプリケーションは、テキストファイル、HTML ページ、メール、動画ファイルなど、非構造化データの分析実行例です。企業関連のデータ全体のうち 80% に上るデータが、非構造化フォームのものだと推定されています。
このアルゴリズムは、特定の検索プロファイルに最も一致するドキュメントの検索を試行します。検索プロファイルは、ユーザーの関心事であるトピックと一致するドキュメントをフィルタリングします。このために、各ドキュメントは、ドキュメント内に各ワードが出現するフリークエンシーで、一連のワードに短縮されます。ドキュメント内の各用語フリークエンシー・ペア (ti、fi)は、24 ビットの用語 ID および 8 ビットの出現フリークエンシーを含む、32 ビットの整数として表されます。用語とは、一般的にドキュメント内のワードです。24 ビットの ID では、1600 万語以上のボキャブラリーが利用可能です。検索プロファイルは、より小さな用語のセット、および検索プロファイル内で各用語の相対的重要性を特定するウェイトで構成されています。ウェイトは、固定小数点表記の 64 ビットナンバーで構成されています。非構造化検索の実行にあたり、すべてのドキュメントのスコアが計算され、指定プロファイルに対する関連度を判定します。
カーネルへの入力データは、以下のとおりです。
- docWordFrequents は、カーネル経由で実行したいすべてのドキュメントを表します。各 32 ビットの整数は、ドキュメント内の用語またはワードを表します。前半の 24 ビットは用語 ID で、後半の 8 ビットは、ドキュメント内でこの用語が出現するフリークエンシーです。
- profileWeights は、検索プロファイルです。これは、より小さな用語のセット、および検索プロファイル内で各用語の相対的重要性を特定するウェイトで構成されています。ウェイトは、固定小数点表記の 64 ビットナンバーで構成されています。
- isWordInProfileHash は、ブルームフィルターです。profileWeights アレイに存在する、ウェイトがゼロ以外の各用語 ID については、ホスト上でそこから 2 つのハッシュ値を計算します。次にその計算値をブルームフィルターに挿入します。その後、カーネル・エグゼキューション中に、ドキュメント内に存在するすべての用語 ID について、2 つのハッシュ値が計算されます。これらのハッシュ値をブルームフィルターで検索します。いずれのハッシュ値も存在しない場合、そのワード ID が検索プロファイル内にないことを意味します。両方のハッシュ値が検索された場合、profileWeights アレイへのメモリーアクセスを実行します。
カーネルへの出力データは、以下のとおりです。
- profileScorePerGroup_highbits は、計算した各ドキュメントのスコアで、高いほうの 32 ビットです。
- profileScorePerGroup_lowbits は、計算した各ドキュメントのスコアで、低いほうの 32 ビットです。
これらを組み合わせたものが、指定プロファイルに対するドキュメントの関連度を示すスコアを表します。このアプリケーションのスループットをさらに改善するため、入力を 2 つの均等なサイズに分け、各 DDR メモリーバンクに存在するようにしました。これは、カーネルのパラメーターに追加で、_dimm1 (1 つ目の DIMM 用)、および _dimm2 (2 つ目の DIMM 用) により示されます。2 つの利用可能なメモリーバンクを活用することで、パフォーマンスがさらに向上します。
ダウンロード
このデザイン例は、OpenCL™ デバイス (.cl) およびホスト・アプリケーション用のソースコードを提供します。ホスト・アプリケーションをコンパイルするため、Linux* パッケージには Makefile が含まれており、Windows* パッケージには Microsoft* Visual Studio* 2010 プロジェクトが含まれています。
以下のダウンロードは、この例のために提供されています。
このデザインの使用には、ハードウェア・リファレンス・デザイン・ライセンス契約の使用条件が適用されます。
インテル® のデザインツールをダウンロードするには、OpenCL™ ダウンロードページをご覧ください。基盤となるオペレーティング・システムの要件は、インテル® FPGA SDK for OpenCL™ の要件と同じです。
OpenCL および OpenCL ロゴは Apple Inc. の商標であり、Khronos の許可を得て使用しています。
* 製品は Khronos 公開の仕様に基づいており、Khronos コンフォーマンス・テスト・プロセスに合格しています。現在のコンフォーマンス条件は、www.khronos.org/conformance で確認できます。
ソフトウェア要件とハードウェア要件
要件 | バージョン | OpenCL™ カーネル | ホストプログラム | ||||
---|---|---|---|---|---|---|---|
ハードウェア・コンパイル | エミュレーション・コンパイル | ハードウェア・コンパイル | ハードウェア実行 | エミュレーション・コンパイル | エミュレーション実行 | ||
インテル® FPGA ソフトウェア (インテル® Quartus® Prime) | 17.1 以降 | ✓ | ✓ | ||||
インテル® FPGA SDK for OpenCL™ | 17.1 以降 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
OpenCL™ 用インテル® ランタイム・エンバイロメント | 17.1 以降 | ✓ | ✓ | ✓ | ✓ | ||
ボード・サポート・パッケージ | 17.1- 互換 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
ボード・ハードウェア | - | ✓ | ✓ | ||||
gcc | 4.8.4 以降 | ✓ | ✓ | ✓ | ✓ | ||
GNU Make | 4.8.4 以降 | ✓ |