2017-12-19 3 views
1

Ich habe diese MEX-Funktion erstellt, die in den Argumenten wie dies geschieht:Warum werden Daten von MATLAB so langsam an mex übergeben?

toSolve(domain, model.one, model.two, model.three, model.four, bc, model.T, model.dt, [start model.five])

Wo model ist ein MATLAB struct mit Matrizen one, two, three, five und eine 1x3-Zelle four, die drei Matrizen haben.

Die Matrizen sind riesig (~ 500.000 x 3). Wenn ich die Daten in die mex-Funktion übergebe (d. H. toSolve), dauert es ewig, um geladen zu werden. In meiner mex-Funktion ist die erste Zeile ein Ausdruck:

void 
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) 
{ 

/* Start */ 
mexPrintf("\n About to start"); 

//CODE// 

} 

Es immer diese Linie About to start drucken nimmt. Der Code selbst läuft sehr schnell. Ich bin mir nicht sicher, warum es ewig dauert, die Daten in Mex zu übergeben? Was habe ich falsch gemacht?

Antwort

3

Es ist wahrscheinlich Ihre Berechnung, die die Zeit braucht, und der Grund, warum Sie die print-Anweisung nicht schnell sehen, ist aufgrund der Puffer nicht zwangsweise gelöscht (d. H. Das tatsächliche Schreiben auf dem Bildschirm). Weitere Informationen finden Sie unter this question and answers. Kurz

In, wenn Sie hinzufügen:

mexEvalString("drawnow;") 

nach dem mexPrintf Befehl. Wenn Sie sehen, dass der Text schnell auf den Bildschirm geschrieben wird, und das Ihnen helfen soll zu bestätigen, ob es die Berechnung ist, die Zeit braucht, und nicht die Daten in MEX übergibt.

Verwandte Themen