Portál AbcLinuxu, 1. května 2025 07:22
Tyhle hromady čísel sou pro mě (asi nebudu sám) težko stravitelný.
gnuplot
by měl být na ty správné grafy.
Konečně bych měl na čem počítat BOINC přes CUDA na grafice a skóre by mi rostlo 10x rychlejš! A ten účet za elektriku potom No ještě si budu muset na takovej luxus chvíli počkat ...
Není problém v tom, že jsou v těch distribucích libcompat librarys z 32bit systému?
To je docela dobře možné. Směrodatnější by bylo porovnání konkrétní aplikace se stejnou konfigurací a stejnými daty, třeba právě toho prohlížeče.
(IA64 32bit neumí)
Spíš konkrétní distribuce, architektura jako taková ano (i když v SW emulaci).
Nejen instrukce, ale hlavně registry. Takhle třeba vypadá funkce sčítající čtyři čísla na x86_64:
0x0000000000400560 <+0>: add %rsi,%rdi 0x0000000000400563 <+3>: add %rdi,%rdx 0x0000000000400566 <+6>: lea (%rdx,%rcx,1),%rax 0x000000000040056a <+10>: retq
a takhle na i586:
0x08048450 <+0>: mov 0x4(%esp),%edx 0x08048454 <+4>: mov 0x8(%esp),%eax 0x08048458 <+8>: add %edx,%eax 0x0804845a <+10>: mov 0xc(%esp),%ecx 0x0804845e <+14>: add %ecx,%eax 0x08048460 <+16>: mov 0x10(%esp),%edx 0x08048464 <+20>: add %edx,%eax 0x08048466 <+22>: ret
a=b+c+d+e
?
V reegistrech bych očekával hlavní nárust zisku. Mohu přehazovat na jeden takt 2x více dat.
Jde hlavně o to, že jich je víc, takže se spousta věcí dá udělat v registrech a nemusí se tak často sahat do paměti. Třeba v případě celočíselných nebo pointerových parametrů se na x86_64 se prvních šest parametrů předává v registrech, zatímco na i586 jen 0-3.
Ty uvodní čísla jsou program counter? add na 64 bitech jsou 3 bytové instrukce?
Ano, jsou to adresy, na kterých je příslušná instrukce. Délka instrukce bude IMHO záviset na tom, co s čím se sčítá.
A ještě tohle je standardní funkce kterou kompilátor zařadí do kódu z přiřazení a=b+c+d+e?
Je to reálně přeložený prográmek
#include <stdio.h> long sum4(long a, long b, long c, long d) { return a + b + c + d; } int main() { printf("%ld\n", sum4(1,2,3,4)); return 0; }
pomocí
gcc -O3 -fomit-frame-pointer -fno-inline -m64 -march=k8 -o reg-64 reg.c gcc -O3 -fomit-frame-pointer -fno-inline -m64 -march=i586 -o reg-32 reg.c
Výpis funkce byl získán pomocí gdb (disassemble sum4
). Samotné přiřazení uprostřed funkce by bylo implementováno různě podle toho, kam zrovna optimalizátor uloží příslušné proměnné; obecně ale platí, že na x86_64 je větší šance, že proměnná bude v registru.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.