Profilointi perfillä, vtunella ja Sanitizereilla
Profiloi ohjelmia perfillä ja Intel VTunella ja löydä virheitä AddressSanitizerilla.
Profilointi perfillä, vtunella ja Sanitizereilla on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Miksi profiloida
Suorituskykyä koskeva intuitio on yleensä väärässä. Profiloikaa todellisten pullonkaulojen löytämiseksi ja optimoikaa vasta sitten.
Linux: perf
perf on Linuxin mukana toimitettava, vähän yleiskustannuksia aiheuttava otantaan perustuva profiloija. Suorittakaa se millä tahansa debug-tiedoilla rakennetulla binäärillä.
g++ -O2 -g main.cpp -o main
perf record ./main
perf reportperf stat
Tulostaa suorituksesta yhteenvetomittarit: kellojaksot, käskyt, välimuistihäiriöt ja haarojen väärät ennustukset.
perf stat -e cycles,instructions,cache-misses,branch-misses ./mainLiekkikaaviot
Muuntaa perf-tiedot liekkikaavioksi, joka näyttää, mihin aika kuluu.
perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svgmacOS: Instruments
Applen Instruments tarjoaa suoritusajan profilointia, varausten ja muistivuotojen tarkastelua sekä paljon muuta. Se on ilmainen Xcoden mukana.
Windows: VTune Profiler
Intel VTune (ilmainen henkilökohtaiseen käyttöön) tarjoaa yksityiskohtaisen mikroarkkitehtuurianalyysin: suoritusputken pysähdykset, välimuistihäiriöt ja kuumat lohkot. Se toimii useilla alustoilla.
Sanitizerit löytävät virheitä
Sanitizerit ovat clangiin ja gcc:hen sisäänrakennettuja ajonaikaisia tarkistimia. Kääntäkää ohjelma uudelleen sopivalla valitsimella:
-fsanitize=address— AddressSanitizer muistivirheille-fsanitize=thread— ThreadSanitizer datakilpailuille-fsanitize=undefined— UB Sanitizer allekirjoitettujen kokonaislukujen ylivuodoille ja muulle määrittelemättömälle toiminnalle-fsanitize=memory— MSan alustamattomien tietojen lukemiseen
AddressSanitizer-esimerkki
Havaitsee puskurin ylivuodot, vapautetun muistin käytön ja muistin kaksoisvapautuksen pinojälkien avulla.
g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bugKäännösaika ja ajonaika
Staattinen analyysi (clang-tidy, cppcheck) löytää virheitä ilman ohjelman ajamista. Sanitizerit löytävät ajonaikaisia virheitä. Käyttäkää molempia, sillä ne löytävät erilaisia ongelmia.
Varausten profilointi
Kekomuistivaraukset ovat hitaita. Käyttäkää työkaluja perf, Valgrindin massifia tai Heaptrackia kuumien varauskohtien löytämiseen ja vähentämiseen.
Profiilien lukeminen
Keskittykää profiilin tärkeimpiin funktioihin. Tarkastelkaa sitten kutsupuuta ymmärtääksenne asiayhteyden. Muutaman prosentin erot eivät yleensä ole optimoinnin arvoisia.
Jatkuva profilointi
Tuotantokäytössä Pyroscope- tai Pixie-työkalujen kaltaiset otantaan perustuvat profiloijat keräävät tietoja jatkuvasti vähäisin yleiskustannuksin. Näin regressiot voidaan havaita ennen kuin ne haittaavat käyttäjiä.
Työnkulku
Optimointisilmukka:
- Mitatkaa pullonkaulan tunnistamiseksi
- Muodostakaa hypoteesi
- Muuttakaa yhtä asiaa
- Mitatkaa uudelleen
Ilman mittausta arvaatte.
Pikatarkistus
Mikä kääntäjän valitsin ottaa AddressSanitizerin käyttöön?
Kertaus
Profiloikaa työkaluilla perf (Linux), Instruments (macOS) tai VTune (useilla alustoilla) pullonkaulojen löytämiseksi. Käyttäkää sanitizereita muisti- ja säievirheiden havaitsemiseen ajoissa. Mitatkaa, muodostakaa hypoteesi, muuttakaa yhtä asiaa ja mitatkaa uudelleen.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Profilointi perfillä, vtunella ja Sanitizereilla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Profilointi perfillä, vtunella ja Sanitizereilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Profilointi perfillä, vtunella ja Sanitizereilla”?
Profiloi ohjelmia perfillä ja Intel VTunella ja löydä virheitä AddressSanitizerilla. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Profilointi perfillä, vtunella ja Sanitizereilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Välimuistiystävälliset tietorakenteet
- Haarautumisen ennustaminen ja kuumat silmukat
- Profilointi perfillä, vtunella ja Sanitizereilla
- Mikrovertailut Google Benchmarkilla