Nic se dělá pomaleji než něco?   zodpovězená otázka

VB.NET, Optimalizace

Ve VB.NET 2008 EE jsem dělal pokusy s rychlostí matematických operací (především s Doublem) a objevil jsem přitom zvláštní věc.

Když jsem nechal běžet prázdný cyklus, tak vycházel čas na jednu smyčku asi 3,2 ns (měřeno několikrát, rozptyl cca +- 0,2 ns). Když jsem však vy cyklu provedl operaci přiřazení jedné proměnné do druhé (a dokonce i v případě přiřazení druhé mocniny původní proměnné), byl čas na jednu smyčku cyklu asi 2,7 ns (podobný rozptyl).

Měření jsem provedl několikrát, na stejném počítači a pokaždé mi vyšlo to samé, takže nejde o náhodu.

Nevíte někdo, čím to je? Nějaká "optimalizace" z překladače?

Na závěr přikládám ukázku kódu, jímž jsem prováděl měření:

        ' l jsem zadával 1e9, měření pak trvalo 2-3 s
        Dim l As Integer = Console.ReadLine()
        Dim startTime, endTime As Date
        Dim c As Double
        Dim a As Double = Rnd()
        startTime = Date.Now

        For i As Integer = 1 To l
            'c = a * a  ' druhá mocnina
            'c = a      ' přiřazení
            '           ' nic
        Next

        endTime = Date.Now

        Dim duration As TimeSpan = endTime.Subtract(startTime)
        Dim one As Double = duration.TotalMilliseconds / l
        Console.WriteLine(one.ToString)
        Console.ReadLine()

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přesnost DateTime je v rozmezí 10-55 ms v závislosti na hardwaru vašeho počítače. Tudíž pokoušet se něco přesně měřit tímto způsobem je naprostý nesmysl. Pro přesnější měření se používá System.Diagnostics.Stopwatch, ale ani ten není dost přesný. Nejpřesnější je použití API funkce QueryPerformanceCounter s přesností na nanosekundy, viz. http://msdn.microsoft.com/en-us/library/...

Mimochodem v režimu ladění (konfigurace Debug) kompilátor neprovádí žádné optimalizace, ty jsou prováděny pouze ve verzi pro uvolnění (konfigurace Release).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, za odpověď.

Použil jsem QueryPerformanceCounter a pomocí něj již získávám přesnější (a reálnější) data.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback