WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

mex-File, Adresse einer Variablen an Matlab zurückgeben

 

PiV
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 12:19     Titel: mex-File, Adresse einer Variablen an Matlab zurückgeben
  Antworten mit Zitat      
Hallo zusammen,
ich habe ein Problem mit C-mex files in matlab und hoffe ihr könnt mir dabei helfen.
Ich möchte, das ein mex-File die Adresse einer Variablen an MAtlab zurückgibt um diese dann in ein weiteres mex-File zu laden.

Hintergrund ist folgender. In dem mex-File werden einige CUDA Funktionen aufgerufen. Zunächst werden einige Daten von der CPU (oder viel mehr Hostsystem) zu der Grafikkarte übertragen. Damit ich dies nicht mit jedem Aufruf des mex_files ausführen muss, soll dieser Dateitransfer in ein extra mex-file ausgelagert werden. In diesem wird also mittels
Code:
cudaMalloc((void**) &M_d, sizeof(float)*nnz);

Speicher auf der Grafikkarte reserviert. Danach folgt dann der Dateitransfer.
Jetzt muss ich aber dem anderen mex-File die Adresse des reservierten Speichers mitteilen. Und da weiß ich nicht wie ich das machen soll.

Das ganze soll also folgenden Ablauf haben:

Matlabcode
1.mex-file
Matlabcode
schleife
Matlabcode
2.mex-file
schleife ende

Ich hoffe ihr könnt mir bei meinem Problem helfen.
Private Nachricht senden Benutzer-Profile anzeigen


Achi
Forum-Guru

Forum-Guru


Beiträge: 250
Anmeldedatum: 14.04.10
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 28.10.2010, 14:22     Titel:
  Antworten mit Zitat      
Ich bin mir da jetzt nicht ganz sicher,
aber werden die Daten nicht bereinigt,
sobald ein mex-File beendet ist?

Klar, wenn sie nicht gelöscht werden, könnten noch die richtigen Daten an der Stelle stehen, aber wer weiss das schon?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
PiV
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 14:41     Titel:
  Antworten mit Zitat      
Ich habe in einem Tuturial zu Matlab+CUDA gelesen das die Daten solange gültig sind bis sie entweder manuell freigegeben werden oder Matlab beendet wird. Da stand folgendes:
Zitat:
The Second Situation is that when allocating space on the GPU from a mex function, e.g.,
"cudaMalloc((void **)&A, N * sizeof(A[0]));"
that allocated space does not clear by itself when the mex call terminates. (This property allows the allocation to be recovered on subsequent mex-file calls, as described above)...
In all cases, memory is freed when either Matlab is exited or the mex function is cleared as a variable in Matlab.
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 28.10.2010, 14:59     Titel:
  Antworten mit Zitat      
Hallo,
da gibt es mehrere Möglichkeiten:
- den Pointer auf den Speicherbereich in ein uint32 (uint64 auf 64 Bit Rechner) casten und den als Variable zurückgeben.
- schöner: ein übergeordnetes MEX-File schreiben, das als ersten Parameter ein action flag bekommt, aufgrund dessen es dann andere aufruft, z.B.
1. yourMexFunction(1, someData);
2. doSomethingInMatlab
3. yourMexFunction(2, someOtherData);

Die Mex-Funktion, solange nicht mit clear gelöscht. bleibt und damit "lebt" auch der Pointer von vorher ...

Ciao,
Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
PiV
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 28.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 15:30     Titel:
  Antworten mit Zitat      
Schonmal vielen Dank für deine Hilfe. Werde zunächst mal Möglichkeit 1 ausprobieren.
Ich denke die zweite Variante ist weniger praktikabel, da meine MexFunction eine Matlabfunktion in einer bereits bestehenden Simulationsumgebung ersetzen soll.
Wie verhält es sich eigentlich von der Ausführungszeit her, wenn Matlabfunktionen in mex-Files aufgerufen werden? Dauert das (spürbar) länger als wen ich diese einfach in einem m-File aufrufe?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.