2016-04-27 5 views
1

Wir printf jetzt in Kernel tun,cuda sprintf global/Shared-Memory-Puffer

aber ist es möglich, die sprintf (Puffer, Format, arg, ...) Funktion zu tun?

Ich mache Cuda beschleunigte OBJ-Datei schreiben, und ich muss Floats in ASCII-Strings zum Schreiben konvertieren.

edit: Cuda tut nicht das eigentliche Schreiben natürlich =) Nur die Obj Char Puffer aus einer Liste von Floats zu generieren.

+2

CUDA wird den eigentlichen Prozess des Schreibens von Dateien wahrscheinlich nicht beschleunigen. In jedem Fall gibt es kein 'sprintf' - Sie müssten Ihr eigenes implementieren, wenn Sie es von einem CUDA-Kernel aus tun wollten. Ältere Cuda-Toolkits (z. B. CUDA 6.5 und früher) enthalten einen Beispielcode "simplePrintf", der nützlich sein könnte. –

+0

Ich bin mir auch ziemlich sicher, dass die meisten String-Übersetzungsarbeiten, die mit printf verbunden sind, auf dem Host ausgeführt werden, nachdem ein Kernel fertiggestellt ist. – talonmies

Antwort

1

Neben der va_list sollte der Code von Georges Menie Ihnen den Einstieg erleichtern. Auch für die einfache Argumentliste hat simplePrintf ein paar als @RobertCrovella genannte erwähnt. C++ 11 Features der letzten CUDA-Distributionen könnten ebenfalls hilfreich sein.

jedoch Parallelisierung dieser Aufgabe auf der GPU und die Konsistenz in Objektliste Indizes und konsistente Formatierung von Zeichenfolge (floatting Punkt vor allem) könnten Ihr größtes Problem sein.

+0

Vielen Dank. Was Ihren zweiten Punkt angeht, habe ich Glück, dass ich nur Dreieckslisten schreibe. Die 'Gesichter' sind nur > f 1 2 3 > f 4 5 6 > f 7 8 9 – randyrand

+0

Mein Denken ist, da ich eine schnelle ~ 500 MB pro Sekunde SSD haben, wird der Flaschenhals wahrscheinlich die CPU-Konvertierung sein Ihre Floats werden in das Format "v x.xxxx y.yyyy z.zzzz" geschrieben - vorausgesetzt, dass 500 MB pro Sekunde 62 500 000 Float-Conversions pro Sekunde ergeben. Die GPU sollte in der Lage sein, diese Aufgabe des Konvertierens einer Float-Liste in einen Zeichenpuffer "v x.xxxx y.yyyy z.zzzz" problemlos zu bewältigen. Das heißt, es wird wahrscheinlich fast die SDD Schreibgeschwindigkeit in beide Richtungen sättigen. – randyrand

+0

Ich habe der entsprechenden Frage, wie man direkt von der GPU auf die Festplatte zugreifen kann, einen Code hinzugefügt. Ich glaube, das könnte helfen: http://Stackoverflow.com/a/36899573/6218300. Dies gilt für Ihren Anwendungsfall als Engpass String Formatierung ist, und CPU würde für Paging-Management allein verantwortlich. –