Warning
This page is located in archive.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:b6b36pjc:cviceni:cviceni_13 [2017/09/25 17:17] (current)
richta created
Line 1: Line 1:
 +===== 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 {{:​courses:​a7b36pjc:​cviceni:​cviceni_13_init.zip|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'':​
 +
 +<​code>​
 +    perf record -g ./a.out 40 200
 +    perf report -g "​graph,​0.5,​caller"​
 +</​code>​
 +
 +==== 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? {{:​courses:​a7b36pjc:​cviceni:​cviceni_13_mult.zip|Ř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''?​ {{:​courses:​a7b36pjc:​cviceni:​cviceni_13_lut.zip|Řešení}}
 +  * Co je rychlejší,​ násobení nebo sčítání?​ Jak by se toho dalo využít pro zrychlení iterace v cyklu? {{:​courses:​a7b36pjc:​cviceni:​cviceni_13_iter.zip|Řešení}}
  
courses/b6b36pjc/cviceni/cviceni_13.txt · Last modified: 2017/09/25 17:17 by richta