Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Cvičení 13: Optimalizace

Pokud se zajímáte o C++, nejspíše vás zajímá výkon vašeho programu. Dosáhnout vysokého výkonu je v C++ možné, ale ne vždy snadné; jediné špatné rozhodnutí může dělit efektivní kód od plazícího se slimáka.

  • Stáhněte si výchozí kód, postavte ho a seznamte se s obsahem jednotlivých souborů.
  • Spusťte program s parametry “40 200”. Porovnejte obrázky in.png a out.png. Zapište si, jaký počet milisekund program vypsal.
  • Upravte program tak, abyste dosáhli co nejvyššího výkonu.

Obecné rady pro efektivnější program

  • Zapněte release build, příp. použijte nastavení kompilátoru -O3.
  • Vždy si ověřte, že změna programu způsobila zrychlení výpočtu.
  • Vždy si ověřte, že po změně programu výpočet proběhl správně.
  • Pokud nevíte, co zrychlit, použijte profiler. Ve Visual Studiu je profiler vestavěný, alternativou je program VerySleepy. Na Linuxu použijte např. příkaz perf:

    perf record a.out
    perf report -g "graph,0.5,caller"

Konkrétní rady pro tento program

  • Opravdu jste nezapomněli zapnout release build?
  • Co je rychlejší, dělení nebo násobení? Jak by toho šlo využít v tomto programu? Řešení
  • Je možné, že se v podmínce cyklu něco vyhodnocuje zbytečně?
  • Dal by se provést takový předvýpočet, aby se v náročném cyklu vůbec nepoužívaly proměnné typu double? Řešení
  • Co je rychlejší, násobení nebo sčítání? Jak by se toho dalo využít pro zrychlení iterace v cyklu? Řešení
courses/b6b36pjc/cviceni/cviceni-13.txt · Last modified: 2018/09/30 16:09 by horenmar