Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2018-04-18, 18:59
  #13
Medlem
lasternassummas avatar
Citat:
Ursprungligen postat av boghalamon
temp är ok, aldrig över 50 grader

Kul också att du kör Octave/Matlab på en gammal burk, med så lite minne!

Python säger du...
Interpreteras (dvs. lite långsamt). Tydligen ingen multithreading, så bara en kärna utnyttjas.

Jag vet inte om du nämnt vad du har för OS, men jag gissar på Windows men garderar med Linux.
Även om tråden finns under hårdvara så skulle jag, baserat på att du säger att temperaturen inte ökar, säga att det inte är hårdvaran som blir långsammare. Om man inte räknar trashing och referensmönster som hårdvara.

Vad menar du när du säger "plottar"? Är det på skärmen eller på någon typ av plotter? Om det är en plotter, hur är den ansluten?

Hur stora arrayer har du i programmet? Hur refereras dom, kolumnvis eller radvis?
Här finns lite om matrislagring i Python:
https://www.johnny-lin.com/cdat_tips...rray_refs.html

Jag börjar med att gå igenom tänkbara alternativ, även om dom redan nämnts:
– Trashing. Något steg i minnescachning, typiskt virtuellt minne, går över en gräns.
– CPU-temperatur gör att datorn klockas ner.

Det där har du redan räknat bort.
Vilka alternativ återstår?

– Något fel i koden som gör att effektiviteten avtar, t.ex. referensmönster.

Ett sätt att få lite mer kunskap om vad som händer är att sätta in tidsmätning i loopen, särskilja olika avsnitt och sedan se vilken del av koden det är som tar mer tid.

Jag skulle nästan gissa på arrayhantering, utgående från vad som framkommit hittills. Om du inte har en bug som gör att antalet beräkningar ökar under exekveringens gång...

Kanske kan den inre loopen effektiviseras?

Har det någon betydelse om det är 32- eller 64-bitarsmiljö?
Det låter ju inte så om du kan köra i 1 GB utan trashing.

Citera
2018-04-19, 12:16
  #14
Medlem
Citat:
Ursprungligen postat av lasternassumma
Kul också att du kör Octave/Matlab på en gammal burk, med så lite minne!

Python säger du...
Interpreteras (dvs. lite långsamt). Tydligen ingen multithreading, så bara en kärna utnyttjas.

Jag vet inte om du nämnt vad du har för OS, men jag gissar på Windows men garderar med Linux.
Även om tråden finns under hårdvara så skulle jag, baserat på att du säger att temperaturen inte ökar, säga att det inte är hårdvaran som blir långsammare. Om man inte räknar trashing och referensmönster som hårdvara.

Vad menar du när du säger "plottar"? Är det på skärmen eller på någon typ av plotter? Om det är en plotter, hur är den ansluten?

Hur stora arrayer har du i programmet? Hur refereras dom, kolumnvis eller radvis?
Här finns lite om matrislagring i Python:
https://www.johnny-lin.com/cdat_tips...rray_refs.html

Jag börjar med att gå igenom tänkbara alternativ, även om dom redan nämnts:
– Trashing. Något steg i minnescachning, typiskt virtuellt minne, går över en gräns.
– CPU-temperatur gör att datorn klockas ner.

Det där har du redan räknat bort.
Vilka alternativ återstår?

– Något fel i koden som gör att effektiviteten avtar, t.ex. referensmönster.

Ett sätt att få lite mer kunskap om vad som händer är att sätta in tidsmätning i loopen, särskilja olika avsnitt och sedan se vilken del av koden det är som tar mer tid.

Jag skulle nästan gissa på arrayhantering, utgående från vad som framkommit hittills. Om du inte har en bug som gör att antalet beräkningar ökar under exekveringens gång...

Kanske kan den inre loopen effektiviseras?

Har det någon betydelse om det är 32- eller 64-bitarsmiljö?
Det låter ju inte så om du kan köra i 1 GB utan trashing.


Xubuntu är OS. Det är plotten, alltså en graf på skärmen. När jag tar bort plotten går skriptet snabbt rakt igenom och jag tror det är som tidigare nämndes att plotfunktoinen plottar alla punkter trots att jag bara lägger till en.
Citera
2018-04-19, 13:09
  #15
Medlem
lasternassummas avatar
Citat:
Ursprungligen postat av boghalamon
Xubuntu är OS. Det är plotten, alltså en graf på skärmen. När jag tar bort plotten går skriptet snabbt rakt igenom och jag tror det är som tidigare nämndes att plotfunktoinen plottar alla punkter trots att jag bara lägger till en.

Det är ju svårt att reproducera det du beskriver utan koden.
Om du inte vill publicera koden, kanske du kan visa avsnittet runt där du skickar den grafiska informationen till skärmen, så kanske någon kan se något tveksamt eller t.o.m. testa lite på sin egen dator?

Jag kan ju kontra med lite octave-grafik. Det går att göra mer effektivt, men att jämföra tiden kan vara intressant. 40 000 punkter plottas.

Det här tar totalt ca 5 sekunder på min 10 år gamla MacBook, ca 100µs per punkt, om man så vill, inklusive plottning och beräkningar av bl.a. exponentialfunktionen, 40 000 gånger.
Hur lång tid tar det på din dator?

Så här blir resultatet:

https://s14.postimg.cc/s4ertp07l/180419_3d-graph.png

Här är koden:
Kod:
%
% Curves for those who appreciate them...
%

tic;
clear;

fxy = @(x,y) exp(-5.0*x-y*y);

xysize = 200;
xmin = 0.0; xmax = 1.0;
ymin = -4.0; ymax = 4.0;

xstep = (xmax-xmin)/xysize;
ystep = (ymax-ymin)/xysize;

X = zeros(xysize,1);
Y = zeros(xysize,1);
Z = zeros(xysize,xysize);

for i = 1:xysize
  X(i) = xmin + xstep*i;
  Y(i) = ymin + ystep*i;
end

for ix = 1:xysize
  for iy = 1:xysize
    Z(iy,ix) = fxy(X(ix),Y(iy));
  end
end

  
% surface in 3D
figure;
clf('reset'); % Clear current figure window

surf(X, Y, Z,'EdgeColor','None');

title('A Distribution','Fontsize',14,'FontWeight','Bold');
xlabel('0 <= x <= 1.0'...
    ,'Fontsize',12,'FontWeight','Normal');
ylabel('-4.0 <= y <= 4.0'...
    ,'Fontsize',12,'FontWeight','Normal');
zlabel('f(x,y)'...
    ,'Fontsize',14,'FontWeight','Normal');

usedTime = toc; 
 
fprintf('Done! It took %d s\n', usedTime);

PS. Vad har du för grafikkort?
Har du kört en benchmark på grafikkortet? På datorn?

__________________
Senast redigerad av lasternassumma 2018-04-19 kl. 13:11. Anledning: PS.
Citera
2018-04-19, 20:03
  #16
Medlem
Citat:
Ursprungligen postat av lasternassumma
Det är ju svårt att reproducera det du beskriver utan koden.
Om du inte vill publicera koden, kanske du kan visa avsnittet runt där du skickar den grafiska informationen till skärmen, så kanske någon kan se något tveksamt eller t.o.m. testa lite på sin egen dator?

Jag kan ju kontra med lite octave-grafik. Det går att göra mer effektivt, men att jämföra tiden kan vara intressant. 40 000 punkter plottas.

Det här tar totalt ca 5 sekunder på min 10 år gamla MacBook, ca 100µs per punkt, om man så vill, inklusive plottning och beräkningar av bl.a. exponentialfunktionen, 40 000 gånger.
Hur lång tid tar det på din dator?

Så här blir resultatet:

https://s14.postimg.cc/s4ertp07l/180419_3d-graph.png



Här är koden:
Kod:
%
% Curves for those who appreciate them...
%

tic;
clear;

fxy = @(x,y) exp(-5.0*x-y*y);

xysize = 200;
xmin = 0.0; xmax = 1.0;
ymin = -4.0; ymax = 4.0;

xstep = (xmax-xmin)/xysize;
ystep = (ymax-ymin)/xysize;

X = zeros(xysize,1);
Y = zeros(xysize,1);
Z = zeros(xysize,xysize);

for i = 1:xysize
  X(i) = xmin + xstep*i;
  Y(i) = ymin + ystep*i;
end

for ix = 1:xysize
  for iy = 1:xysize
    Z(iy,ix) = fxy(X(ix),Y(iy));
  end
end

  
% surface in 3D
figure;
clf('reset'); % Clear current figure window

surf(X, Y, Z,'EdgeColor','None');

title('A Distribution','Fontsize',14,'FontWeight','Bold');
xlabel('0 <= x <= 1.0'...
    ,'Fontsize',12,'FontWeight','Normal');
ylabel('-4.0 <= y <= 4.0'...
    ,'Fontsize',12,'FontWeight','Normal');
zlabel('f(x,y)'...
    ,'Fontsize',14,'FontWeight','Normal');

usedTime = toc; 
 
fprintf('Done! It took %d s\n', usedTime);

PS. Vad har du för grafikkort?
Har du kört en benchmark på grafikkortet? På datorn?



Detta är tider det tog att köra ditt skript när jag har ett pyhton-skript som maxar den andra CPU-kärnan, håller på med ett projekt.

Citat:
>> testtestttttt

Done! It took 5.7664 s
>> testtestttttt

Done! It took 4.13725 s
>> testtestttttt

Done! It took 4.03734 s
>> testtestttttt

Done! It took 3.85376 s
>> testtestttttt

Done! It took 3.79407 s
>> testtestttttt

Done! It took 3.80317 s
>> testtestttttt

Done! It took 4.06506 s
>> testtestttttt

Done! It took 4.01555 s

Ditt skript är dock skrivet på ett annat sätt än när jag får problem. Jag håller på med geometri och vill se vad som händer när jag utvecklar algoritmerna, sen när det är klart tar jag bort plotterna och gör som du, då går det snabbt.
Så här:

for-loop
beräkningar,
låt oss säga en cirkel på 360 x-y-punkter roterar och flyttas runt nånstans
plot(cirkeln)


Detta segar ned efter ett tag som beskrivet

grafikkort är geforce 7600 gs
Citera
2018-04-19, 20:04
  #17
Medlem
benchmark ger rimliga resultat
Citera
2018-04-19, 22:06
  #18
Medlem
för att förtydliga är kommandot i loopen detta:

octave:

plot(punkter)
pause(0.01)

det blir en animation alltså

i python

plt.plot(punkter)
plt.pause(0.01)


Detta blir segare och segare
Citera
2018-04-19, 22:59
  #19
Medlem
Livshacks avatar
Kanske för att du har en 2kärnig cpu som är 10 år gammal?
Citera
2018-04-20, 02:44
  #20
Medlem
lasternassummas avatar
Citat:
Ursprungligen postat av boghalamon
för att förtydliga är kommandot i loopen detta:

octave:

plot(punkter)
pause(0.01)

det blir en animation alltså

i python

plt.plot(punkter)
plt.pause(0.01)


Detta blir segare och segare

Om man summerar med att:
– Du har de prestanda man bör förvänta sig för beräkningar och grafik, utom när du kör dina egna program. Då går det extremt långsamt, både i octave och python.

Låter inte det som att man borde titta närmare på dina program?

Citera
2018-04-20, 11:19
  #21
Medlem
Citat:
Ursprungligen postat av lasternassumma
Om man summerar med att:
– Du har de prestanda man bör förvänta sig för beräkningar och grafik, utom när du kör dina egna program. Då går det extremt långsamt, både i octave och python.

Låter inte det som att man borde titta närmare på dina program?


Det var en allmän hårdvarufråga där jag undrade varför detta beteende skedde. Min kod är en loop där detta segar ned allteftersom:

plot()
hold on
pause(0.01)
Citera
2018-04-20, 11:45
  #22
Medlem
Gynekologstols avatar
Citat:
Ursprungligen postat av boghalamon
Det var en allmän hårdvarufråga där jag undrade varför detta beteende skedde. Min kod är en loop där detta segar ned allteftersom:

plot()
hold on
pause(0.01)
Det är ingen hårdvarufråga, det är en mjukvarufråga. Eftersom att datorn fungerar normalt i övrigt så är det givetvis ditt program det är fel på.

Gamla datorer är fortfarande snabba om man kör mjukvara som är avsedd för dem.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback