|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
[matlab] pc si blocca chiamando una funzione
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. Ultima modifica di mattia_polimi : 14-10-2013 alle 12:48. |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jan 2001
Città: Livorno
Messaggi: 1352
|
Quote:
|
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
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
![]() ![]() Ora son tutto orecchie per imparare! |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
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 |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
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!
|
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
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.
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
Ma ad ogni modo è normale che se matlab lavora in modo pesante possa rallentare comunque un pò il funzionamento del resto del computer?
Ultima modifica di mattia_polimi : 17-10-2013 alle 10:00. |
![]() |
![]() |
![]() |
#8 |
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21782
|
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
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Apr 2013
Messaggi: 247
|
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).
|
![]() |
![]() |
![]() |
#10 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
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 ![]() |
![]() |
![]() |
![]() |
#11 |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
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!
|
![]() |
![]() |
![]() |
#12 | |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
Quote:
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 |
|
![]() |
![]() |
![]() |
#13 | |
Junior Member
Iscritto dal: Sep 2013
Messaggi: 12
|
Quote:
Codice:
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... Ultima modifica di mattia_polimi : 06-11-2013 alle 17:34. |
|
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Nov 2003
Città: Moro num pais tropical Abençoado por Deus Bonito por natureza
Messaggi: 102
|
@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
__________________
TIRANNIDE indistintamente appellare si debbe ogni qualunque governo, in cui chi è preposto alla esecuzion delle leggi, può farle, distruggerle, infrangerle, interpretarle, impedirle, sospenderle; od anche soltanto deluderle, con sicurezza d'impunità. Vittorio Alfieri 1777 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:37.