View Full Version : [matlab] pc si blocca chiamando una funzione
mattia_polimi
14-10-2013, 12:30
Ciao a tutti, avrei un problemino curioso con matlab e il pc: ieri ho scritto una function.m da chiamare durante una simulazione, e tutto andava benone. MA oggi incredibilmente, senza aver modificato, aperto, cambiato nulla quando la simulazione arriva al punto di chiamare quella function il pc mi saluta:si blocca e non si può far nulla, ne task-manager ne nulla, il tutto senza messaggi di errore da matlab. La cosa anche più divertente è che se apro la function e in modo ignorantissimo la valuto blocco per blocco funziona tranquillamente, anche ora mentre sto navigando e facendo altro con il pc...qualcuno ha idea di cosa può accadere, oltre ad avere un triangolo delle bermuda inscritto nel nome della funzione che appena chiamata risucchia l'anima del pc?
Ciao e grazie in anticipo!
ps tengo a sottolineare che matlab non da errori, ne compare la scritta busy o continuing enter statement o simili, semplicemente tutto resta la fotografia di ciò che era quando ho lanciato la function.
pps mi correggo: intanto che scrivevo ho riprovato a lanciare tutto insieme, e ora va: come se aspettare 5 minuti dall'apertura di matlab poi va tutto bene: non capisco ora se era un mio problema nella programmazione a livello di richiamo della funzione e/o tempi da concedere al software tra richiamo di funzioni successive,di software matlab(e allora avrei sbagliato sezione) o di hardware mio poco adatto agli scopi(avrei di nuovo sbagliato sezione allora).
in ogni caso mi scuso già da ora se ho sbagliato sezione ma ero un pò preoccupato e ansioso di soluzione visto che fa parte del lavoro di tesi.
Ciao a tutti, avrei un problemino curioso con matlab e il pc: ieri ho scritto una function.m da chiamare durante una simulazione, e tutto andava benone. MA oggi incredibilmente, senza aver modificato, aperto, cambiato nulla quando la simulazione arriva al punto di chiamare quella function il pc mi saluta:si blocca e non si può far nulla, ne task-manager ne nulla, il tutto senza messaggi di errore da matlab. La cosa anche più divertente è che se apro la function e in modo ignorantissimo la valuto blocco per blocco funziona tranquillamente, anche ora mentre sto navigando e facendo altro con il pc...qualcuno ha idea di cosa può accadere, oltre ad avere un triangolo delle bermuda inscritto nel nome della funzione che appena chiamata risucchia l'anima del pc?
Ciao e grazie in anticipo!
ps tengo a sottolineare che matlab non da errori, ne compare la scritta busy o continuing enter statement o simili, semplicemente tutto resta la fotografia di ciò che era quando ho lanciato la function.
pps mi correggo: intanto che scrivevo ho riprovato a lanciare tutto insieme, e ora va: come se aspettare 5 minuti dall'apertura di matlab poi va tutto bene: non capisco ora se era un mio problema nella programmazione a livello di richiamo della funzione e/o tempi da concedere al software tra richiamo di funzioni successive,di software matlab(e allora avrei sbagliato sezione) o di hardware mio poco adatto agli scopi(avrei di nuovo sbagliato sezione allora).
in ogni caso mi scuso già da ora se ho sbagliato sezione ma ero un pò preoccupato e ansioso di soluzione visto che fa parte del lavoro di tesi.
Purtroppo mi viene da pensare a guasti hardware... probabilmente a seconda di cosa fai il pc inizia ad utilizzare aree di memoria guaste e quindi si blocca. Oppure sale troppo la temperatura della CPU...
mattia_polimi
14-10-2013, 18:37
mmm dici?il problema è che ho formattato una settimana fa perchè avevo win 32bit e allocava poca memoria, ma andava senza problemi...nel senso rapido si ovunque e pure con matlab tranne che finiva subito la memoria allocabile e mi attaccavo. Dici che dopo una formattazione in cui ho caricato win 64 sia saltato fuori qualche guasto hardware?ho provato a fare il check-disk(non da terminale...) e anche dopo quello non è migliorato...ho tolto tutta la grafica di windows 7(sembra di lavorare su '95:( ) e un pò ha sistemato: ora gira più tranquillo anche se lentino, facendo ciò che gli chiedo...Tu cosa mi consiglieresti di fare per controllare l'hard? diciamo che ti do qualche info di base: me ne intendo non tanto quindi ti chiedere di parlare più facile che puoi:D ...è un hp pavillion dv6 5132 di base(la ram non l'ho toccata dal 4 GB di base)...e il programma che ho scritto deve elaborare 2 matrici tridimensionali dell'ordine del 1561x100x1224, più altre diciamo 5 matrici da 1561x1224, un pò di interfaccia grafica,e a breve 3 o 4 plot presenti in contemporanea sull'interfaccia.
Ora son tutto orecchie per imparare!
mattia_polimi
15-10-2013, 09:40
Be diciamo infinito no, però 3 for a cascata uno dentro l'altro che lavorano sulle due matricine si...però ahimè quello è il codice in termini di for multipli, non posso cambiarlo...le matrici le pre-alloco per non rallentarlo ulteriormente. Nella mia linea di pensiero stavo così ragionando: se pre alloco tutto e non mi da problemi di out-of memory vuol dire che ce la dovrebbe fare,ma il fatto che già solo per pre-allocarle ci mette un pò, con tutto il pc che si pianta per qualche minuto(adesso senza grafica di windows7 perchè prima col cavolo che poi si smuoveva) e poi pian piano si fa i suoi for,significa che la ram è alla frutta? Sbaglio totalmente o ci siamo?
ps se così fosse come sposto la discussione alla sezione hardware? Grazie ancora
mattia_polimi
15-10-2013, 13:14
Si blocca tutto il pc...quando ho detto che togliendo la grafica un pò andava meglio intendevo che matlab fa tutti i suoi conti, poi appena arriva a quella funzione maledetta TUTTO il pc si blocca così come era per 2-3minuti poi iniziano ad evidenziarsi le icone quando ci passo sopra e matlab inizia a lavorare(me ne accorgo perchè ci ho messo una waitbar e inizia a girare), però se tocco qualcosa è di una lentezza mostruosa...per aprire una cartella qualsiasi ci vuole un 20 secondi buoni. Mentre prima con attiva la grafica di windows 7 appena partiva quella function TUTTO il PC si bloccava ma neanche dopo 5 minuti potevo far nulla...ne matlab, ne cartelle,ne task manager, ne icone che si evidenziavano passandoci sopra...tipo "stato congelato" e niente messaggi BSOD. Grazie!
mattia_polimi
15-10-2013, 19:02
puoi postare il codice che lo faccio girare sul mio matlab? credo sia un problema del codice, non del PC..
Scusa se rispondo ora, ma oggi pomeriggio stava simulando e non ho osato affaticarlo con internet in aggiunta, anche se andava molto meglio di stamattina. Si il problema era il codice a quanto pare: ho rimosso 5 vecchie matrici da 1561x1224 inutili(credevo di averle tolte già ieri...) e ho calato l'uso delle waitbar da 3 contemporanee a solo una...meno bello ma ho notato che gira più veloce matlab e "probabilmente richiede meno memoria" alla RAM e ne beneficia anche il resto.
mattia_polimi
17-10-2013, 09:56
Ma ad ogni modo è normale che se matlab lavora in modo pesante possa rallentare comunque un pò il funzionamento del resto del computer?
Ma ad ogni modo è normale che se matlab lavora in modo pesante possa rallentare comunque un pò il funzionamento del resto del computer?
non dovresti avere particolari problemi anche se matlab occupa una valangata di ram, un minimo di rallentamento generale del sistema si ma niente di troppo trascendentale
epimerasi
18-10-2013, 18:21
Ma ad ogni modo è normale che se matlab lavora in modo pesante possa rallentare comunque un pò il funzionamento del resto del computer?
Da come hai descritto il problema hai esaurito la RAM fisica e Matlab comincia ad usare la memoria virtuale (leggi: swappa sul disco). In questo modo rallenta tutto perché il Sistema Operativo deve trafficare coi dati fra memoria fisica e memoria virtuale attraverso un collo di bottiglia. Più ci fai cose contemporaneamente e peggio andrà (e più lenta sarà l'esecuzione del programma).
mattia_polimi
19-10-2013, 13:00
Ok ok ora ho capito...siccome sto inziando solo ora a capirci anche un pò del pc in se, avevo il sospetto che fosse normale il rallentamento e che fosse collegato alla "fine" della ram e all'uso della swap...ad ogni modo il primo blocco della simulazione è andato, al prossimo non tocco il pc e vedo quindi quanto tempo riesco a guadagnare. Grazie a tutti per il contributo!
ps a breve vedrete in giro altre mie domande da niubbissimo :D
mattia_polimi
23-10-2013, 15:27
Ciao, scusate se chiedo ancora aiuto: il professore mi ha accennato all'uso di una funzione che traccia la simulazione e che poi può essere richiamata alla fine per visualizzare dove la simulazione impiega più tempo a girare...Però non ho ben capito che funzione sia, voi ne sapete qualcosa? Grazie!
mattia_polimi
26-10-2013, 17:20
http://www.mathworks.nl/help/matlab/ref/profile.html
Giusto mi insulto da solo per non aver usato la funzione cerca ma sto un pò impazzendo per la tesi e mi ero spaventato subito...grazie!
Però questa cosa invece non me la so spiegare...perchè se scrivo un pezzo dl programma come una funzione che ha in input alcune matrici e poi in output quelle 2 bombe di matrici ci impiega una vita a girare mentre se lo faccio come copia e valuta( alla script e non come funzione) ci impiega un nonnulla??Grazie ancora
mattia_polimi
06-11-2013, 17:32
senza vedere il codice è difficile dare qualsiasi spiegazione...
Ciao scusa se rispondo ora ma dovevo attendere la risposta dal prof se potevo postare il codice o meno. La function che ho creato e che chiamo è la seguente:
function [V, I] = IV_cell (Ipv_adjusted, Voc_T_EOL_C, Vmp_T_EOL_C, Isc_T_EOL_C, Imp_T_EOL_C, Ctemperatures)
%initialization
V = ones(size(Voc_T_EOL_C,2),140,size(Voc_T_EOL_C,1));
Vod = ones(size(Voc_T_EOL_C));
Rd = Vod;
C = (Vmp_T_EOL_C-Voc_T_EOL_C)./(log(1-Imp_T_EOL_C./Isc_T_EOL_C));
B = (Isc_T_EOL_C-Imp_T_EOL_C).*exp(-Vmp_T_EOL_C./C);
I=V;
w=waitbar(0,'Vod and Rd elaboration over time');
for i=1:size(Voc_T_EOL_C,1)
for j=1:size(Voc_T_EOL_C,2)
Vod(i,j) = -7.52-0.00428*Ctemperatures(i,j) -3*(10^(-6))*(Ctemperatures(i,j)).^2;
Rd(i,j) = (0.469-0.00277*Ctemperatures(i,j)-8.3*(10^(-6))*(Ctemperatures(i,j)).^2).^(-1);
V1 = linspace(-9,Vod(i,j)*1.05,10);
V2 = linspace(Vod(i,j)*1.0499,Vod(i,j),25); %the shape is hardly defined around Vod, but to the left of it because on the right the curve is horizontal.
V3 = linspace(Vod(i,j)*0.9999,0,5);
V4 = linspace(0.001,Vmp_T_EOL_C(i,j)*0.85,20);
V5 = linspace(Vmp_T_EOL_C(i,j)*0.86,(1.5*Vmp_T_EOL_C(i,j)+0.5*Voc_T_EOL_C(i,j))/2,45);
V6 = linspace((1.5*Vmp_T_EOL_C(i,j)+0.5*Voc_T_EOL_C(i,j))/2*1.01,Voc_T_EOL_C(i,j),35);
V(j,:,i) = [V1 V2 V3 V4 V5 V6];
clear V1 V2 V3 V4 V5 V6
end
waitbar(i/size(Voc_T_EOL_C,1),w);
end
clear Ctemperatures
waitbar(0,w,'Cell IV construction over time..');
for i=1:size(Voc_T_EOL_C,1)
for k=1:1224
for j=1:size(V,2)
if (V(k,j,i)<0 && V(k,j,i)>= Vod(i,k))
I(k,j,i)=Ipv_adjusted(i,k);
elseif (V(k,j,i)<0 && V(k,j,i)<Vod(i,k))
I(k,j,i)=Ipv_adjusted(i,k)-(V(k,j,i)-Vod(i,k))/Rd(i,k);
elseif V(k,j,i)>=0
I(k,j,i)=Ipv_adjusted(i,k)-B(i,k)*(exp(V(k,j,i)/C(i,k))-1);
end
end
end
waitbar(i/size(Voc_T_EOL_C,1),w);
end
close(w);
end
spero di aver postato nel modo corretto. Ad ogni modo anche lanciandolo come script(o copia incolla del corpo della function e valutando su command window) il pc si pianta sempre 3 minuti, poi parte e va. Il problema è che anche dopo che ha finito(in qualsiasi modo sia stato lanciato) va lento a far qualsiasi cosa anche aprire una cartella!dopo circa 3-4 minuti la velocità torna quella normale: cavolo sembra una persona che si deve riprendere dopo una maratona...
ps si pianta per quei 3 minuti appena arriva al primo for, cioè subito dopo il primo messaggio della waitbar come se i linspace avesse paura di farli...
@mattia
So che é una cosa banale e probabilmente ci hai giá pensato, ma scriverlo non costa nulla.
La fisica del problema che stai affrontando ti permette ridurre le dimensioni delle matrici per vedere gli effetti sui tempi di calcolo osservando poi la congruenza dei risultati?
Almeno avresti un indizio se il problema é sul lato programma o sul lato HW, in qualche modo.
Saluti
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.