Měření rychlosti jednotlivých instrukcí

Měření počtu tiků

Operace rdtsc uloží do registru EDX:EAX interní čas procesoru, typicky počítadlo tiků. Lze použít k odhadu, jak dlouho která operace trvá -- problém s přerušením, významem tiků, vykonáváním operací mimo pořadí, atd.

unsigned long long measure_time()
{
	_asm {
		rdtsc;
		push edx
		push eax;

		... mereny kod ...
		... idealne smycka ...

		rdtsc;
		sub eax, [esp];
		sbb edx, [esp + 4];
		add esp, 8;
	}
}

Instrukce LEA

Výpočet adres se provádí během fáze dekódování instrukce. Jedná se tedy o nejrychlejší možný výpočet. Instrukce lea umožnuje efektivně vypočítat adresu místa v paměti. Tuto instrukci je možné použít i pro rychlé násobení. Např. násobení devíti:

mov eax, a
lea eax, [eax + 8 * eax]
Operaci lea jde použít i ke sčítání ve tvaru A := B + C.

Úkoly

  • Srovnejte rychlosti jednotlivých operací, soustřeďte se na operace ADD, MUL, SHL, LEA, PUSH, POP, MOV, atd.
  • Srovnejte rychlosti násobení konstantou s použitím operace MUL, SHL (+ADD) a LEA.
  • Napište funkci int strtoint(char * str), která převede dekadický zápis čísla na jeho celočíselnou hodnotu. Tuto funkci optimalizujte na rychlost. Jednotlivé varianty programu si uschovávejte.

Last update on 2. 5. 2017 16:03
Powered by Schemik.

© Petr Krajča, 2010, 2012
petr.krajca (at) upol.cz