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()
|