Hot spot (ohjelmointi)

Hotspot ( eng.  hotspot [1] ) - ohjelman koodin osa , joka vastaa suurimman osan suorittimen suoritettavista käskyistä [2] tai jonka suorittamiseen prosessori käyttää paljon aikaa [3] (jotkut ohjeet suoritetaan nopeammin, kun taas toiset ovat hitaampia) ). Hotspotit voivat olla ohjelman pullonkauloja , jos niillä on ylimääräistä kuormitusta koodin tehottomuuden vuoksi, jolloin ne voidaan optimoida [3] .

Tarpeettoman resurssiintensiivisiä koodin osia

Tarpeettoman resurssiintensiiviset koodiosat ( ohjelman "pullonkaulat" ) voivat johtua siitä, että valitaan hitaampi algoritmi ongelman ratkaisemiseksi, sovellusarkkitehtuuri ei ole täysin harkittu , mikroprosessorin toimintaominaisuudet , I/O -toimintojen odottaminen jne.

Esimerkki sovellusarkkitehtuurin virheestä johtuvasta resurssivaltaisesta koodinpätkästä on spinlockin käyttö ensimmäisessä säikeessä tulosten saamiseksi toisesta säikeestä, joka on mukana laskelmissa, edellyttäen, että ensimmäinen säie on määritetty korkein mahdollinen prioriteetti (käyttäjävuorovaikutus) ja toinen, korkein alhainen (taustalaskenta). Koska spinlock on loputon kyselysilmukka muuttujan arvolle ja prosessin prioriteetti on korkea, jolloin ajoittaja varaa suurimman osan ajasta ensimmäisen prosessin suorittamiseen ja toiselle prosessille varataan paljon vähemmän prosessoriaikaa . Tämän seurauksena suurin osa prosessorin ajasta menee hukkaan. Ratkaisu ongelmaan tässä tapauksessa olisi käyttää estävää semaforia spinlockin sijaan tai muuttaa säikeiden prioriteetteja.

Resurssiintensiivisten alueiden tunnistaminen

Ohjelman " kuumien pisteiden " tunnistaminen ja analysointi voi antaa ohjeita sen edelleen optimoimiseksi [2] .

Syväanalyysi voidaan suorittaa erikseen eri prosessoriarkkitehtuureille , ja se voi sisältää analyysin prosessorin eri välimuistitasojen kuormituksesta , muistin käyttökuvioiden analysoinnista, prosessorin käyttöjakson käyttölaskurin tutkimisesta jne. [2]

Ohjelman resurssiintensiivisten alueiden tunnistamiseen käytetään erityisiä ohjelmia, joita kutsutaan profiloijiksi (profiloijat).

Unix-käyttöjärjestelmäperheen tunnetuimmat profiloijat ovat gprof ja Callgrind . Linuxissa OProfile ja perf ovat lisäksi saatavilla . Monissa edistyneissä IDE :issä on sisäänrakennetut profiloijat, kuten Microsoft Visual Studio , NetBeans ja niin edelleen.

On olemassa kaksi pääprofilointimenetelmää: koodin suoritusaika-analyysi (Callgrind) ja prosessorin suorituskykylaskurit (OProfile). Ensimmäisen menetelmän avulla voit löytää koodin, jonka suorittaminen kestää kauan (esimerkiksi pitkäaikainen semaforilukko). Toisen menetelmän avulla voit löytää koodin osia, jotka kuormittavat prosessoria enemmän kuin muut (esimerkiksi resurssiintensiiviset laskelmat). Molempia menetelmiä käyttämällä voit analysoida koodin osia ymmärtääksesi syitä, miksi niiden suorittaminen kestää liian kauan. Jos funktion suorittaminen kestää kauan, mutta prosessorin suorituskykylaskurien mukaan se ei läheskään lataa prosessoria, sillä voi olla pitkä lohko tai pitkä järjestelmäkutsu käyttöjärjestelmän ytimeen.

Katso myös

Muistiinpanot

  1. Arvioi suorituskykyä Linuxille POWERilla  . www.ibm.com (12. kesäkuuta 2012). Haettu: 23.1.2016.
  2. ↑ 1 2 3 Linuxin suorituskyvyn mittaaminen POWER-tietokoneissa . www.ibm.com (17. tammikuuta 2013). Käyttöönottopäivä: 6.1.2016.
  3. ↑ 1 2 Rinnakkaisoptimoinnin suunnittelu | Intel® Developer Zone . software.intel.com. Käyttöönottopäivä: 6.1.2016.

Linkit