NVIDIA CUDA DLL einbinden - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: DLL & externer Code (/Forum-DLL-externer-Code) +---- Thema: NVIDIA CUDA DLL einbinden (/Thread-NVIDIA-CUDA-DLL-einbinden) |
NVIDIA CUDA DLL einbinden - joedoe1979 - 06.08.2009 12:17 Hallo @ all Ich möchte einen NVIDIA Grafikkarte als Co-Prozessor verwenden. Hierzu benötige ich einige Funktionen aus einen NVDIA DLL. Ich habe über den DLL-Import-Wizard von LabVIEW 8.6.1 versucht die DLL einzubinden. NVIDA stellt eine DLL und ein H-File zu Verfügung. Jedoch bekomme ich es mit dem DLL-Import-Wizard nicht hin. Ich habe beim DLL-Import-Wizard die DLL "cudart.dll" und die dazugehörige Datei "cuda_runtime_api.h" ausgewählt. Wenn ich dann auf weiter klicke, dann soll ich einige Präprozessordinge angeben. Diese lasse ich leer. Im nächsten Schritt kann der Wizard dann die Funktionen nicht importieren. Es fehlt die Datei limits.h und stddef.h. Außerdem soll ich noch eine menge Compilerschalter setzen. Kann mir einer ein Rat geben wie ich die Funktionen aus der Bibliothek doch noch importieren kann. NVIDIA CUDA DLL einbinden - rolfk - 06.08.2009 21:01 Suche auf der NI Site nach einer Cuda Implementation von NI selber. Die haben Beginn dieses Jahres damit gespielt und für spezifische Problemstellungen sagenhafte Schnellheiten damit erreicht, aber es ist kein Allerweltsheilmittel. Das Problem muss sich hochgradig parallelisieren lassen und Du musst verstehen wie Du das machen musst um es mit CUDA zu benützen. Ein grundsätzlich serieller Codeablauf wird mit CUDA absolut nicht schneller. Rolf Kalbermatter NVIDIA CUDA DLL einbinden - joedoe1979 - 07.08.2009 16:23 Die Implementierung in Cuda habe ich schon fertig. Für die Berechnung auf dem Quad Core benötige ich 133ms und auf der Grafikkarte 1ms Nur das kopieren der Messdaten in die Grafikkarte und wieder herraus dauert zu lange. Dies in C++ mehr als das 10 fache schneller. NVIDIA CUDA DLL einbinden - rolfk - 07.08.2009 19:58 ' schrieb:Die Implementierung in Cuda habe ich schon fertig. Für die Berechnung auf dem Quad Core benötige ich 133ms und auf der Grafikkarte 1ms Dann machst Du wahrscheinlich etwas falsch oder zumindest nicht ganz gut. Wenn Du die Daten als C Array Pointer übergibst hast du schnell mal extra Overhead da LabVIEW die Daten manchmal konvertieren muss. Wenn Du das anstelle davon als native LabVIEW Daten an eine C Wrapper DLL übergibst und dann die optimale Datenübertragung machst kannst Du die meisten Datenkopien ganz vermeiden und dann sollte es sehr schnell gehen. Das verlangt aber Wrapper Code in C und das ist was NI wahrscheinlich zum Teil getan hat (Dir also zumindest in dieser Hinsicht doch vor ist ). Rolf Kalbermatter NVIDIA CUDA DLL einbinden - rolfk - 08.08.2009 22:08 Hier der Link zu der CUDA Library von NI. Rolf Kalbermatter NVIDIA CUDA DLL einbinden - joedoe1979 - 12.08.2009 13:08 Das habe ich schon ausprobiert. Und es funktioniert besser als meine Lösung. Hast "LabVIEW GPU Computing" erstellt? Ich benutze zum Datenkopieren die memcopy() funktion die NVDIA in einer DLL bereitstellt. Auf die DLL greife ich mit einem Knoten zu. Die Funktiondeklaration sieht wie folgt aus: cudaError_t cudaMemcpy(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind); Dies bedeutet die Funktion will einmal die Adresse vom Ziel (void *dst) und zum anderen die Adresse von der Quelle (void *src) haben. Der 3. Parameter ist die Anzahl an Bytes die übertragen werden sollen. Der 4. Parameter (Kind) ist die Richtung. die Parameter für den DLL-Knoten gebe ich in LabVIEW wie folgendermaßen an: void *dst = array einen Hacken bei Konstante, vorzeichenloser 32 Bit-Integer, Dimension =1, Array Datenzeiger const void *src = Numerisches Element vorzeichenloser 32 Bit-Integer. Die Adresse für die Daten erhalte ich über die funktion cudaError_t cudaMalloc(void **devPtr, size_t size); Durch diese Funktion erhalte ich die Adresse wo die Daten auf der Grafikkarte gespeichert werden. Mache ich etwas falsch? |