2012-04-11 6 views
2

Ich habe über Nvidia Cuda gelesen und ich habe einige Fragen zu SO gesehen, dass Leute geantwortet haben, wo sie den Kommentar enthalten, dass "Ihr Problem nicht geeignet ist, auf einer GPU zu laufen".Nvidia Cuda Programm - ist mein Problem für die Cuda-Architektur geeignet?

In meinem Büro haben wir eine Datenbank mit einer enormen Anzahl von Datensätzen, die wir abfragen, und es kann ewig dauern. Wir haben SQL-Abfragen implementiert, die DISTINCT SELECT verwenden, oder sie wenden eine Großbuchstabe-Funktion für einen Wert an. Als Einführung zu Cuda dachte ich darüber nach, ein Programm zu schreiben, das alle Strings und Großbuchstaben auf der GPU aufnehmen könnte.

Ich habe ein Buch über Cuda gelesen, in dem der Autor darüber spricht, die GPU-Cores so weit wie möglich auszuführen, um die Latenz beim Lesen von Daten über den PCI-Bus oder beim Platzieren von Dingen im globalen Speicher zu verbergen. Da die Speichergrößen ziemlich klein sind und ich Millionen verschiedener Wörter habe, werde ich natürlich den Bus sättigen und die GPU-Kerne verhungern lassen.

Ist das ein Problem, das von einer Grafikkarte im Gegensatz zur CPU nicht einen fantastischen Leistungsschub erhalten würde?

Danke,

mj

+2

Wird der Großteil der Abfragezeit nicht durch die Geschwindigkeit der Datenträger-E/A verursacht? Wenn die Antwort "Ja" lautet, können Sie die Abfragezeit nur verringern, indem Sie den E/A-Durchsatz verbessern. Eine GPU kann damit nicht helfen. – talonmies

+0

Sie haben absolut Recht damit. Lassen Sie eine weitere Annahme hinzufügen, dass ich auf einem Server mit 64 GB RAM bin und versuche, alle meine Daten im Speicher zu behalten. –

+2

Immer noch keine. Ihre Aufgabe ist nicht rechenintensiv, aber teuer. Daher ist GPU keine gute Option. OpenMP ist möglicherweise besser geeignet, wenn Sie Ihre Daten bereits im Speicher haben. – Azrael3000

Antwort

1

Wir haben SQL-Abfragen implementiert, die SELECT DISTINCT SELECT oder sie wenden eine Großbuchstabe-Funktion für einen Wert an.

Haben Sie darüber nachgedacht, eine Spalte in Ihrer Tabelle mit vorberechneten Großbuchstabenversionen Ihrer Strings hinzuzufügen?

Ich bin geneigt zu denken, dass, wenn Ihre Datenbank vollständig im RAM ist und Abfragen immer noch "für immer" dauern, Ihre Datenbank möglicherweise nicht richtig strukturiert und indiziert ist. Untersuchen Sie Ihre Abfragepläne.

Ich denke, dass im Normalfall, wo Ihre Auswahlen ordentlich durch Indizes abgedeckt sind, Sie nicht in der Lage sein werden, mit der GPU zu optimieren. Aber vielleicht gibt es Dinge, die für die GPU optimiert werden könnten, wie Abfragen, die Tabellendurchsuchungen erfordern, wie LIKE-Abfragen mit Platzhaltern und Abfragen, die Zeilen basierend auf Berechnungen auswählen (Wert kleiner als usw.). Vielleicht sogar Dinge wie Abfragen mit vielen Joins, wenn Join-Spalten viele doppelte Werte haben.

Der Schlüssel zu einer solchen Implementierung wäre es, einige der Daten in Ihrer Datenbank auf der GPU zu spiegeln und sie mit der Datenbank synchron zu halten. Führen Sie dann Operationen wie parallele Reduzierungen für diese Daten aus, um Zeilen-IDs zu ermitteln, die dann für Selects in der regulären Datenbank verwendet werden.

Bevor ich jedoch einen solchen Schritt unternahm, würde ich die unzähligen Möglichkeiten für die Optimierung von Datenbankbasisabfragen untersuchen, die Raum-Zeit-Kompromisse verwenden.

+0

Ich würde sagen, dass das Berechnen von LIKE-Abfragen zu viel Verzweigung auf der GPU verursachen könnte, um sehr effektiv zu sein. –

1

Sie einen ziemlich großen Engpass in der globalen Speicherzugriff, da Ihr Betrieb/Übertragungsverhältnis ist O (1) haben.

Was wahrscheinlich lohnender wäre, die Vergleiche auf der GPU zu machen, da das Verhältnis Operation/Transfer viel größer ist.

Während Sie eine Zeichenfolge in den gemeinsamen Speicher laden, um dies zu tun, können Sie auch eine Groß-/Kleinschreibung eingeben, was auch das beinhaltet, was Sie vorher tun wollten, und ein bisschen mehr.

Ich kann nicht helfen, aber fühlen Sie eine CPU-basierte Implementierung würde Ihnen wahrscheinlich eine bessere Leistung geben. Es würde Ihnen zumindest weniger Kopfschmerzen bereiten ...

Verwandte Themen