[LUGOS] Hitrost in RAM

Andraz Tori Andraz.tori1 na guest.arnes.si
Sre Apr 7 10:12:33 CEST 2004


On Wed, 2004-04-07 at 06:19, igor wrote:
> Uporabljam nek program, ki cele noci obraca velikanske matrike in
> podobno.
> Letos sem dobil tudi verzijo istega programa, ki tece pod linuxom in
> zdaj
> presenecen ugotavljam, da zadeva dela 5 (pet) krat hitreje kot prej na
> windowsih.  

Ta razlika je zelo drasticna, tako da vprasanje kaj tocno je njen vzrok.
Ce je RAM res tako mocan dejavnik, samo ... ce imas pod linuxom tudi
x-windows pognane s parimi programi, ni nic manj pomnilniško požrešen od
ms windows (po mojem občutku je celo bolj).

> Opazil sem, da v tekstovnem nacinu dela zadeva se malenkost hitreje in
> bolje (= vedno izpise rezultate, ni megle na zaslonu).  Zdaj pa me
> zanima,
> ali je mozno (na stopnji zacetnika v Linuxu) doseci, da bi zadeva
> delala
> se hitreje?  Pravzaprav mi ni toliko bistvena hitrost.  Bolj bi me
> veselilo, 
> ce bi uspel v RAM spraviti vecje matrike, saj se vedno (ceprav je
> precej
> bolje kot prej) opazam precejsnjo razliko med fizicno velikostjo
> pomnilnika 
> in velikostjo mojih matrik.  

Seveda, glej naprej...

> Verjamem, da bi zadeva tekla hitreje, ce bi si ustrezno oklestil
> jedro,
> vendar tega ne znam, pa me zanima, ali bi zadoscal "killing demons".
> ps -A mi namrec izpise kaksnih 80 procesov.   Bi smel kaksnega 
> ubiti? Npr. spamd, sshd, automount, X, gnome-terminal ...  Bi to 
> povecalo razpolozljiv RAM za moj program, ali so te zadeve itak v
> swapu in ne motijo ?  Skratka, zanima me, kako bi (na enostaven
> nacin) iz masine iztisnil cimvec?  

Če boš mašino uporabljal le za to stvar v textovnem načinu, potem sploh
nastavi, da se ti ne bodo štartala X-okna (ne vem kje je to pod
redhatom, pri debianu editiraš /etc/init.d/gdm (ali kdm ali xdm) in
napišeš v drugo vrstico exit pa je ...

sshd, če se ne boš logiral na mašino od drugod lahko mirno odstraniš,
spamd sploh ne vem kaj je...

no skratka, popucaš čisto vse ven, ... tako dobiš nekaj rama več. vendar
tako ali tako, če se drugi programi ne uporabljajo, jih bo kernel počasi
swapal na disk ... ampak vseeno je priporočljivo, da je čim manj
deamonov pognanih. tako ni niti teoretičnih šans, da bi se kak deamon
zbudil...

če imaš program v izvorni kodi in je veliko kode (da že sam zaseda
pomnilnika velik), se ti morda splača prevesti s switchom -Os (in ne -O2
ali neka taka neumnost, ki je enkrat pisala v Monitorju... števke so za
količino optimizacij, s je pa za code size) 

seveda ni treba omenjat, da v programu ni dobro imet debugging symbols
vključeno (ne sme biti opcije -g)

če ti pa ne gre za hitrost pa prevedeš z -O2 (oziroma lahko probaš 3 ali
več, ki ni dokumentiran, lahko pa da so gccjevci mu že kaj pripisali)

poleg tega pri matematičnih operacijah zelo pohitri celo zadevo, če
dejansko compilerju poveš za katero platformo prevajaš ...
to narediš z ukazom -march=pentium4 ali -march=athlonxp (in _ne_ -mcpu
...)

potem pa se lahko igraš še z nekaterimi drugimi optimizacijami, recimo
če imaš SSE arhitekturo lahko poskusiš z "-mfpmath sse,387"

potem če se v matematičnih funkcijah ravno ne zanašaš na detajle ieee
specifikacije za floating point.... lahko vklopiš -ffast-math


seveda, pa so vse te stvari skrajno zanemarljive, če lahko z eno manjšo
optimizacijo v kodi eno notranjo zanko pospešiš za nekaj deset
procentov... glede na to, da praviš da je stvar matematična itak ne
dvomim, da je algoritem izbran kar se da premišljeno...

Čao
andraž




Dodatne informacije o seznamu lugos-list