INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

NVIDIA CUDA DLL einbinden



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

06.08.2009, 12:17
Beitrag #1

joedoe1979 Offline
LVF-Grünschnabel
*


Beiträge: 40
Registriert seit: Sep 2006

8.5.1
2005
de

23654
Deutschland
NVIDIA CUDA DLL einbinden
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.


Angehängte Datei(en)
Sonstige .rar  include.rar (Größe: 149,76 KB / Downloads: 248)

Sonstige .dll  cudart.dll (Größe: 279 KB / Downloads: 289)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
06.08.2009, 21:01
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
NVIDIA CUDA DLL einbinden
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

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.08.2009, 16:23
Beitrag #3

joedoe1979 Offline
LVF-Grünschnabel
*


Beiträge: 40
Registriert seit: Sep 2006

8.5.1
2005
de

23654
Deutschland
NVIDIA CUDA DLL einbinden
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 Big Grin

Nur das kopieren der Messdaten in die Grafikkarte und wieder herraus dauert zu lange. Dies in C++ mehr als das 10 fache schneller.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.08.2009, 19:58
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
NVIDIA CUDA DLL einbinden
' 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 Big Grin

Nur das kopieren der Messdaten in die Grafikkarte und wieder herraus dauert zu lange. Dies in C++ mehr als das 10 fache schneller.

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 Big Grin).

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.08.2009, 22:08
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
NVIDIA CUDA DLL einbinden
Hier der Link zu der CUDA Library von NI.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.08.2009, 13:08
Beitrag #6

joedoe1979 Offline
LVF-Grünschnabel
*


Beiträge: 40
Registriert seit: Sep 2006

8.5.1
2005
de

23654
Deutschland
NVIDIA CUDA DLL einbinden
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?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Mehrere Cuda DLLs Context-Übergabe grey 2 6.121 17.06.2010 19:50
Letzter Beitrag: rolfk

Gehe zu: