Dieses Beispiel liefert ein Beispiel dafür, wie ein Filter die Leistung einer Anwendung unterstützen kann.
Die Dokumentenfilterung umfasst die Suche nach einem eingehenden Datenstrom von Dokumenten und das Auffinden der Dokumente, die dem Interesse des Benutzers am besten entsprechen. Ein Beispiel für ein solches System wäre der Einsatz eines Filtermechanismus, der Newsfeeds überwacht und relevante Artikel an das E-Mail-Konto eines Benutzers sendet. Im Allgemeinen ist diese Anwendung ein Beispiel für die Analyse unstrukturierter Daten, wie Textdateien, HTML-Seiten, E-Mails und Videodateien. Schätzungen sind bis zu 80 % aller für Unternehmen relevanten Daten unstrukturiert.
Der Algorithmus versucht, die besten passenden Dokumente für ein bestimmtes Suchprofil zu finden. Das Suchprofil ist der Filter, der Dokumente mit dem vom Benutzer interessanten Thema abgleichen kann. Zu diesem Zweck wird jedes Dokument auf eine Reihe von Wörtern reduziert, und die Häufigkeit des Erscheinens jedes Wortes im Dokument. Jedes Frequenzpaar (t_i; f_i) im Dokument wird als 32-Bit-Integer mit einer 24-Bit-Term-ID und einer 8-Bit-Häufigkeit des Auftretens dargestellt. Begriffe sind im Allgemeinen Worte im Dokument. Eine 24-Bit-ID ermöglicht eine Laufzeit von über 16 Millionen Bedingungen. Das Suchprofil besteht aus einem kleineren Satz von Begriffen und einem Gewicht für jeden Begriff, der seine relative Bedeutung im Suchprofil angibt. Die Gewichte besteht aus einer 64-Bit-Nummer in Fixpunktdarstellung. Zur Durchführung einer unstrukturierten Suche wird für jedes Dokument ein Ergebnis berechnet, um seine Relevanz für das jeweilige Profil zu bestimmen.
Die Eingabedaten zum Kernel lauten wie folgt:
- docWordFrequencies stellt alle Dokumente dar, die Sie über den Kernel ausführen möchten. Jede 32-Bit-Integer steht für einen Begriff oder ein Wort im Dokument. Die ersten 24 Bits ist der Begriff ID, und die letzten 8 Bits ist die Häufigkeit des Auftretens dieses Begriffs im Dokument.
- ProfilGewichte ist das Suchprofil. Sie besteht aus einem kleineren Satz von Begriffen und einem Gewicht für jeden Begriff, der seine relative Bedeutung im Suchprofil angibt. Die Gewichte besteht aus einer 64-Bit-Nummer in Fixpunktdarstellung.
- isWordInProfileHash ist der Filter. Für jeden Begriff, der im Profilgewichts-Array vorhanden ist und ein Gewicht von nicht Null hat, berechnen wir zwei Hash-Werte daraus auf dem Host. Wir fügen dann die berechneten Werte in den "Unseren Filter" ein. Dann werden während der Kernel-Ausführung die beiden Hash-Werte für jeden Begriff, der im Dokument vorhanden ist, berechnet. Wir sehen uns diese Hash-Werte im "Unseren Filter". Wenn entweder ein Hash-Wert nicht vorhanden ist, bedeutet dies, dass das Wort ID nicht im Suchprofil vorhanden ist. Wenn beide Hash-Werte gefunden werden, führen wir einen Speicherzugriff auf das ProfilWeights-Array durch.
Die Ausgabedaten für den Kernel lauten:
- profileScorePerGroup_highbits sind die 32-Bit höheren Punkte für jedes von uns berechnete Dokument.
- profileScorePerGroup_lowbits sind die unteren 32 Bit des Ergebniswertes für jedes von uns berechnete Dokument.
In Kombination stellt dies das Ergebnis des Dokuments dar, das auf seine Relevanz für das jeweilige Profil hinweist. Um den Durchsatz dieser Anwendung weiter zu verbessern, haben wir die Eingänge in zwei gleich große Teile aufgeteilt, einen, der auf jeder DDR-Speicherbank residiert. Dies wird durch den _dimm1 (für das erste DIMM) und _dimm2 (für das zweite DIMM) an die Parameter des Kernels angehängt. Dies verbessert unsere Leistung weiter, indem wir die beiden verfügbaren Speicherbanken nutzen.
Downloads
Das Design-Beispiel liefert den Quellcode für das OpenCL™ Gerät (.cl) sowie die Host-Anwendung. Zum Kompilieren der Host-Anwendung enthält das Linux* Paket eine Makefile und das Windows-Paket enthält ein Microsoft Visual Studio 2010-Projekt.
Die folgenden Downloads werden für dieses Beispiel bereitgestellt:
Die Verwendung dieses Designs unterliegt den Bedingungen der Hardware-Referenzdesignlizenzvereinbarung.
Um die Intel Design-Tools herunterzuladen, besuchen Sie die OpenCL-Download-Seite. Die Anforderungen für das zugrunde liegende Betriebssystem sind dieselben wie die des Intel® FPGA SDK für OpenCL.
OpenCL und das OpenCL-Logo sind Marken von Apple Inc., die mit Genehmigung von Khronos verwendet werden.
* Das Produkt basiert auf einer veröffentlichten Khronos-Spezifikation und hat den Khronos-Konformitätstest bestanden. Der aktuelle Konformitätsstatus finden Sie unter www.khronos.org/conformance.
Software- und Hardware-Anforderungen
Anforderungsversion | OpenCL Kernel | Host-Programm | |||||
---|---|---|---|---|---|---|---|
Hardware-Kompilierung | Emulation-Kompilierung | Hardware-Kompilierung | Hardware-Komponenten | Emulationen-Compoile | Emulations-Ausführung | ||
Intel FPGA-Software (Intel® Quartus® Prime) | 17.1 oder neuer | ✓ | ✓ | ||||
Intel FPGA SDK für OpenCL | 17.1 oder neuer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Intel Runtime Environment für OpenCL | 17.1 oder neuer | ✓ | ✓ | ✓ | ✓ | ||
Mainboard-Support-Paket | 17.1-kompatibel | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Mainboard-Hardware | - | ✓ | ✓ | ||||
Gcc | 4.8.4 oder neuer | ✓ | ✓ | ✓ | ✓ | ||
GNU-Make | 4.8.4 oder neuer | ✓ |