Hotspot ( angl. hotspot [1] ) - část kódu v programu , která tvoří většinu spustitelných instrukcí procesoru [2] nebo jejímž provedením procesor stráví spoustu času [3] (některé instrukce jsou prováděny rychleji, zatímco jiné jsou pomalejší) ). Hotspoty mohou být úzkými hrdly programu , pokud mají extra zátěž kvůli neefektivitě kódu, v takovém případě je lze optimalizovat [3] .
Zbytečně náročné části kódu ( „úzká místa“ programu) mohou být důsledkem volby pomalejšího algoritmu pro řešení problému, ne zcela promyšlené architektury aplikace , funkcí mikroprocesoru , čekání na I/O operace atd.
Příkladem kódu náročného na zdroje kvůli chybě v architektuře aplikace je použití spinlocku v prvním vláknu k získání výsledku z druhého vlákna, které se zabývá výpočty, za předpokladu, že bylo přiřazeno první vlákno. nejvyšší možnou prioritu (interakce uživatele) a druhou, nejvyšší nízkou (výpočet na pozadí). Protože spinlock je nekonečná smyčka dotazování na hodnotu proměnné a priorita procesu je vysoká, pak plánovač přidělí většinu času na provedení prvního procesu a druhému procesu bude přiděleno mnohem méně času procesoru . V důsledku toho bude většina času procesoru promarněna. Řešením problému by v tomto případě bylo použití blokovacího semaforu místo spinlocku nebo změna priorit vláken.
Identifikace a analýza „ horkých míst “ programu může naznačit směry jeho další optimalizace [2] .
Hloubková analýza může být provedena samostatně pro různé architektury procesorů a může zahrnovat analýzu zátěže na různých úrovních mezipaměti procesoru , analýzu vzorců přístupu do paměti, studium počítadla využití procesorového cyklu atd. [2]
K identifikaci oblastí náročných na zdroje v programu se používají speciální programy, nazývané profilery (profilery).
Nejznámější profilery v rodině operačních systémů Unix jsou gprof a Callgrind . V Linuxu jsou navíc k dispozici OProfile a perf . Mnoho pokročilých IDE má vestavěné profily, jako je Microsoft Visual Studio , NetBeans a tak dále.
Existují dvě hlavní metody profilování: pomocí analýzy doby provádění kódu (Callgrind) a pomocí čítačů výkonu procesoru (OProfile). První metoda umožňuje najít kód, jehož provedení trvá dlouho (například dlouhodobý zámek semaforu). Druhá metoda umožňuje najít části kódu, které zatěžují procesor více než ostatní (například výpočty náročné na zdroje). Pomocí obou metod můžete analyzovat části kódu, abyste pochopili důvody, proč jejich provedení trvá příliš dlouho. Pokud funkce trvá dlouho, než se provádí, ale podle čítačů výkonu procesoru téměř nezatěžuje procesor, může mít dlouhý blok nebo dlouhé systémové volání jádra operačního systému.