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

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 28.10.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.10.2010, 12:19
Titel: mex-File, Adresse einer Variablen an Matlab zurückgeben
|
 |
|
 |
|
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
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.
|
|
|
|
|
Achi |

Forum-Guru
|
 |
Beiträge: 250
|
 |
|
 |
Anmeldedatum: 14.04.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2007a
|
 |
|
|
 |
|
Verfasst am: 28.10.2010, 14:22
Titel:
|
 |
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?
|
|
|
PiV |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 28.10.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.10.2010, 14:41
Titel:
|
 |
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. |
|
|
|
Titus |

Forum-Meister
|
 |
Beiträge: 871
|
 |
|
 |
Anmeldedatum: 19.07.07
|
 |
|
 |
Wohnort: Aachen
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.10.2010, 14:59
Titel:
|
 |
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
|
|
|
PiV |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 3
|
 |
|
 |
Anmeldedatum: 28.10.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.10.2010, 15:30
Titel:
|
 |
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?
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|