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 

externe Malloc Funktion benutzen



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!

28.06.2012, 16:22 (Dieser Beitrag wurde zuletzt bearbeitet: 28.06.2012 16:25 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: externe Malloc Funktion benutzen
(28.06.2012 15:54 )pimbolie1979 schrieb:  Hallo Jungs,

ich benutzte eine NVIDIA Grafikkarte als Co-Prozessor. Ich habe mit Visual Studio ein C Klasse geschrieben und dann eine DLL erzeugt. Diese habe ich jetzt in Labview eingebunden. Dies funktioniert auch alles super.

Jetzt zu meinem Problem:

Ich habe in Labview ein Array bereitsgestellt. Dieses Array enthält meine Daten. Wenn ich jetzt den DLL Knoten aufrufe, dann werden meine Daten aus dem PC-Speicher in den Grafikkarten Speicher kopiert. Dies dauert viel zu lange.

Daher gibt es von NVDIA eine eigene Malloc Funktion. Die normale Malloc Funktion benutzt "pageable memory". Die von NVIDA bereitgestellte Funktion benutzt "pinned memory" diese ist 2 bis 3 mal schneller als die pageable memory malloc funktion. Wie kann ich in Labview die schnelle "pinned memory" benutzen?

Ich könnte in Labview die NVIDA DLL aufrufen und dann die pinned memory malloc funktion benutzen, jedoch macht dies in Labview große Probleme. Gibt es in Labview nicht die Möglichkeit die Speicherbereitstellung auf pinned umzustellen?

Nein!! Du kannst den Memory Manager von LabVIEW nicht einfach umbiegen, und das willst Du auch nicht. Deine Grafikkarte hat nicht genügend Speicher um ein ganzes LabVIEW Programm zu enthalten. Und wenn die Daten dann im Host nötig sind, etwa zum Darstellen als Grafik oder was auch immer muss es wieder in den Hauptspeicher kopiert werden was einen Grossteil des Performancegewinns wieder kaputt macht. Du kannst CUDA Memory benützen aber musst das kategorisch vom LabVIEW Memory trennen. Grundsätzlich solltest Du entsprechende Memorybereiche mit CUDA Funktionen anlegen und manipulieren und innerhalb von LabVIEW nur als opaque Handles (refnums) behandeln. Wenn die Daten in LabVIEW schliesslich nötig sind, musst Du einen Heapblock allozieren und mit CUDA Funktionen diese aus dem Handle in diesen Block kopieren.

Aber bevor Du Dir hier einen Bruch holst solltest Du auf NI nach einer CUDA Library suchen. Ein entsprechendes Forum ist hier. Die haben sowas schon implementiert und als Download verfügbar, aber CUDA Memory ist immer ein spezielles Speicherobjekt in LabVIEW. Etwas anders ist nur machbar mit direkten Änderungen im LabVIEW Source Code selber und das ist nur etwas das NI tun kann. Aber grundsätzlich lässt sich damit keine Eierlegende Wollmilchsau konstruieren. Die möglichen Anwendungsgebiete sind sehr spezifisch und bedingt durch die physikalische Trennung der verschiedenen Speicherbereiche nur mit extra Aufwand zu implementieren.

Wenn Du eine komplexe mathematische Operation hast die Du ganz auf dem GPU ausführen kannst dann macht das eventuel Sinn, aber die typische LabVIEW Applikation benötigt die Daten immer auch auf dem Host fürs Display und zum Beispiel während dem Debuggen, und das dabei ständig nötige Kopieren der Daten zwischen GPU und Hostspeicher würde jeglichen Performancegewinn mehr als zunichte machen.

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
Antwort schreiben 


Nachrichten in diesem Thema
RE: externe Malloc Funktion benutzen - rolfk - 28.06.2012 16:22

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  DLL Import externe Struktur in Header bekommen hansi9990 15 24.484 30.09.2016 17:20
Letzter Beitrag: hansi9990
  Aufruf externe DLL Fehler 1097 Lars_Tragl 1 9.494 11.08.2016 16:13
Letzter Beitrag: Freddy
  externe DLL verstehen sarah.bla 7 13.806 05.07.2016 08:19
Letzter Beitrag: sarah.bla
  Fehlende externe Funktion galilio 4 13.117 28.04.2016 12:42
Letzter Beitrag: rolfk
  fehlende externe Funktion DLL nic74 6 11.867 08.05.2012 05:20
Letzter Beitrag: nic74
  LabVIEW (externe Bib) Eclipse MinGW - WIN XP Donald 4 8.546 29.07.2010 07:20
Letzter Beitrag: Dennis.Moser

Gehe zu: