Strona 1 z 1

Własny benchmark - 32b i 64b

: 29 gru 2008, 10:26
autor: imported_Tomasz_K
Witam

Jakiś czas temu znalazłem ciekawy artyków w którym autor porównuje wydajnosć systemów 32b z 64b,
było tam też porównanie szybkości łamania hasła metodą brute force w Phytonie,

Zainspirowany tym napisałem własny program do tego porównania ale w C,

pierwszy program:
MD5_1 - wykorzystuje jeden rdzeń
i dla systemu 32b wykonuje się w 24s a dla 64b w 29s.
Trochę byłem zaskoczony tymi wynikami więc napisałem kolejny program ale wielowątkowy.

drugi program:
MD5_wielowatkowy - podczas łamania hasła wykorzystuje oba rdzenie procesora, oto wyniki:
32b: 14s a 64b: 16s,
juz lepiej ale nadal nieciekawie.

Czy ktoś mi może wytłumaczyć czemu system 64b jest wolniejszy??

Komputer: (istotne elementy)
procesor: AMD 64 X2 4200+
pamięć: 2GB 800MHz
Ubuntu 8.10

P.S. Mój program w C szybciej łamie hasło od autora artykułu który to pisał w Pythonie,

P.S. S. Gdyby ktoś chciał sprawdzić swój komp to dodaje źródła programu,
będę też wdzięczny za ewentualne uwagi lub znalezione błędy w programie.

Odp: Własny benchmark - 32b i 64b

: 04 sty 2009, 15:33
autor: pinochet
Dzieje się tak dlatego że piszesz w C i więcej zależy od systemu operacyjnego niż od Ciebie. Napisz to w ASM i wtedy testuj. Co do pierwszego programu to wydaje mi się że operacje wykonywane przez drugi rdzeń mogą spowalniać program w szczególności współdzielony cache procesora.

Odp: Własny benchmark - 32b i 64b

: 04 sty 2009, 19:07
autor: el.pescado
Czy ktoś mi może wytłumaczyć czemu system 64b jest wolniejszy??
A dlaczego niby miałby być szybszy? System 64 bitowy używa dwa razy większych rejestrów (64 bitowych w miejsce 32 bitowych) i w zasadzie na tym się różnice kończą. Główna korzyść z systemu 64 bitowego jest taka, że potrafi wykorzystać więcej pamięci. Prędkość nie ma nic do tego.
P.S. Mój program w C szybciej łamie hasło od autora artykułu który to pisał w Pythonie,
Programy w C zwykle są szybsze od tych w Pythonie.

Odp: Własny benchmark - 32b i 64b

: 06 sty 2009, 18:49
autor: PL_kolek
Hmmm... pogubiłem się. jedyna różnica między 64bit a 32bit jest w ilości pamięci do zaadresowania? To czemu AMD stworzyło procesory 64bitowe (po to żeby obsłużyć te 64bitowe rejestry?). Idąc tym tropem siedzę na 64bitowym Ubuntu, robię to niepotrzebnie, bo mam 2GB RAMu, a tyle to i 32bit wykorzysta?

Pytam z ciekawości czystej

Odp: Własny benchmark - 32b i 64b

: 06 sty 2009, 21:35
autor: el.pescado
Hmmm... pogubiłem się. jedyna różnica między 64bit a 32bit jest w ilości pamięci do zaadresowania?
Wydaje mi się, że taka jest główna przyczyna powstania procesorów 64-bitowych.
To czemu AMD stworzyło procesory 64bitowe (po to żeby obsłużyć te 64bitowe rejestry?).
Dokładnie, żeby były 64-bitowe rejestry, żeby w takim 64-bitowym rejestrze dało się przechować 64-bitowy adres komórki pamięci. W 32-bitach da się zapisać tylko 4 miliardy różnych adresów (czyli da się zaadresować 4GB pamięci).
Idąc tym tropem siedzę na 64bitowym Ubuntu, robię to niepotrzebnie, bo mam 2GB RAMu, a tyle to i 32bit wykorzysta?
Prawdopodobnie.


W zasadzie jeśli chodzi o wydajność, to procesory 64-bitowe mają jedną przewagę jeśli chodzi o arytmetykę na dużych liczbach (takich, które się nie mieszczą w 32 bitach). Tak więc możesz spróbować w benchmarku porównać wydajność w arytmetyce na zmiennych 64-bitowych (w nagłówku stdint.h jest zdefiniowany typ int64_t, który ma zawsze 64 bity).

Odp: Własny benchmark - 32b i 64b

: 06 sty 2009, 22:07
autor: Hauleth
int64_t = long long int

Odp: Własny benchmark - 32b i 64b

: 07 sty 2009, 00:36
autor: pinochet
Dlaczego [s]IA64[/s]x86-64 jest "wolniejsze" ?
Po pierwsze nie mamy kompilatorów które wykorzystują w pełni [s]IA64[/s]x86-64. W [s]IA64[/s]x86-64 przekazujemy parametry ( pierwsze 3 ) przez rejestry oprócz tego jest 8 dodatkowych rejestrów ogólnego użytku, więc @el.pescado programy skompilowane specjalnie dla [s]IA64[/s]x86-64 generalnie powinny chodzić szybciej
Po drugie: z przeprowadzonych doświadczeń wynika że około 70 % operacji wykonywanych przez procesor to operacje MOV ponieważ przesłanie i propagacja TTL * 64 jest wolniejsze niż * 32 :craz: to jest różnia prędkości "lim->0" ale przy 70% operacji może być juz odczuwalna.

Odp: Własny benchmark - 32b i 64b

: 07 sty 2009, 13:39
autor: el.pescado
int64_t = long long int
Na 32 bitach tak, ale byłem pewny czy na 64 bitach też tak jest (na 64 bitach już long int ma 64 bity). A int64_t zawsze i wszędzie ma 64 bity.

Odp: Własny benchmark - 32b i 64b

: 07 sty 2009, 15:47
autor: Hauleth
to sobie podejrzyj źródła :P

Kod: Zaznacz cały

typedef long long int		int64_t;

Odp: Własny benchmark - 32b i 64b

: 08 sty 2009, 00:32
autor: el.pescado
to sobie podejrzyj źródła
Nie miałem akurat pod ręką 64-bitowego OS (wiem wiem, w necie mogłem sprawdzić).
W każdym razie, na 64-bitowym IRIX typ long long int też ma 64 bity (tyle mogę sprawdzić empirycznie) ;) W każdym razie, używając int64_t mamy pewność, że nasz kod się nie zdezaktualizuje w momencie wejścia na rynek procesorów 128-bitowych ;)

Odp: Własny benchmark - 32b i 64b

: 08 sty 2009, 13:55
autor: adrian5632
@Hauleth:
lepiej się tak nie mądrzyj i sam sobie zobacz źródła na 64-bitowym systemie (chociaż w 32-bitowym powinieneś mieć to samo, bo wątpię żeby pliki nagłówkowe miały inną terść, skoro są ifdefy)... Wyraźnie jest tam napisane:

Kod: Zaznacz cały

# if __WORDSIZE == 64
typedef long int		int64_t;
# else
__extension__
typedef long long int		int64_t;
# endif
Więc el.pescado ma rację. I nie zaśmiecaj wątku wypowiedziami typu 'to = tamto', jeśli nikomu nie jest potrzebne (czyt. nie pytał o to).

Odp: Własny benchmark - 32b i 64b

: 08 sty 2009, 20:34
autor: Riklaunim
Procesory 64 bitowe są wydajniejsze przy operacjach na dużych liczbach (np. podwójnej precyzji) - co często występuje w obróbce multimediów itp. plus w przypadkach gdy aplikacja/kod alokuje dużo pamięci/danych, choć i tak różnice widać jeżeli robisz testy tego typu - obciążasz w całości procesor i mierzysz czas...

Porównaj może wyniki testów dostępnych w HardInfo http://hardinfo.berlios.de/HomePage dla 32 i 64 łubuntu.

Odp: Własny benchmark - 32b i 64b

: 08 sty 2009, 21:34
autor: pinochet
Riklaunim pisze: plus w przypadkach gdy aplikacja/kod alokuje dużo pamięci/danych,
Oczywiście to nie ma żadnego związku z architekturą [s]IA64[/s]x86-64.

co do procków 128bit to myśle, że jeżeli wogóle takie powstaną to najszybciej za + 50 lat ... dlaczego? - RISK
el.pescado pisze:Wydaje mi się, że taka jest główna przyczyna powstania procesorów 64-bitowych.
hehe dokładniej mówiąc to główną przyczyną powstania tych procesorów była niekompatybilność wsteczna systemów operacyjnych. I choć niestety cały czas nie przeprowadziłem testów (z braku czasu) wydaje mi się że na procesorach 32 bit można z powodzeniem zaadresować więcej niż 4 Gb pamięci. tak jak na procesorach 8 i 16 bitowych adresowano więcej niż 1MB ... wykorzystuje się do tego skoki "typu FAR" (nie wiem czy tak można to określić ale mnemonik w asmie jest :] )
Oczywiście dodatkowym powodem była presja ze strony firm tworzących software aby zwiększyć ilość rejestrów

Odp: Własny benchmark - 32b i 64b

: 08 sty 2009, 22:20
autor: Riklaunim
pinochet pisze:Oczywiście to nie ma żadnego związku z architekturą IA64
Procesory Intela (Core * Duo) itd. mimo iż obsługują 64 bitowe systemy operacyjne nie są rzeczywiście procesorami 64 bitowymi - jest to rodzaj emulacji 64bitów i nawet w 32 bitowych systemach mogą używać więcej RAMu :) tylko AMD sprzedaje dla masowego odbiorcy 64 bitowe procesory.

Odp: Własny benchmark - 32b i 64b

: 08 sty 2009, 23:40
autor: el.pescado
Procesory Intela (Core * Duo) itd. mimo iż obsługują 64 bitowe systemy operacyjne nie są rzeczywiście procesorami 64 bitowymi - jest to rodzaj emulacji 64bitów i nawet w 32 bitowych systemach mogą używać więcej RAMu tylko AMD sprzedaje dla masowego odbiorcy 64 bitowe procesory.
Jakież jest źródło tych rewelacji? Abstrahując, oczywiście, od tego, że IA64 to zupełnie inna architektura (Itanium), która z x86-64 nie ma nic wspólnego.

nawet w 32 bitowych systemach mogą używać więcej RAMu
To jest coś zupełnie innego - PAE - i znajduje się w procesorach od Pentium Pro. Poza tym PAE obsługuje "tylko" 64 GB pamięci, podczas gdy 64 bitowe architektury aż 16 EB.

wydaje mi się że na procesorach 32 bit można z powodzeniem zaadresować więcej niż 4 Gb pamięci. tak jak na procesorach 8 i 16 bitowych adresowano więcej niż 1MB ... wykorzystuje się do tego skoki "typu FAR" (nie wiem czy tak można to określić ale mnemonik w asmie jest :] )
Jak wspomniałem wyżej, korzystając z PAE można na "32 bitowym" procesorze korzystającym z PAE zaadresować 64GB pamięci. Uzyskano to wydłużając szynę pamięci do 36 bitów, tak więc do końca nie wiadomo czy procesor rzeczywiście liczy się jako 32 bitowy;) Pamiętać trzeba jednak o tym, że PAE musi być wspierane przez system operacyjny (który musi dokonywać przeliczania adresów 32-bitowych używanych przez aplikacje na 36-bitowe, używane przez sprzęt), ponadto aplikacje w 32-bitowym systemie wciąż mają ograniczenie 4GB.

Odp: Własny benchmark - 32b i 64b

: 09 sty 2009, 00:37
autor: pinochet
masz rację - nie wiem co mi strzeliło do głowy z tym IA64 może dlatego ze czasami architektura x86-64 nazywana jest IA-32e ?

Apropos emulacji ja bym zastosowanych rozwiązań aż tak bardzo nie degradował :] Procesory x86-64 mogą w zależności od konkretnej implementacji zaadresować fizycznie od 1 - 256 TB. Natomiast procesor działający w trybie chronionym w systemie 32 bitowym nie powinien pozwalać na operacje 64 bitowe i nie pozwalają ale jak się okazuje gdyby chciały to by mogły: ograniczenie to obchodzi się przez wprowadzenie dodatkowego tryb pracy procesora - long mode.

el.pescado wydaje mi się że mówimy tutaj o różnych poziomach "abstrakcji" :] wydaje mi się oczywistem, że pisząc program do sprawdzenia czy da się więcej pamięci zaadresować nie będę używać Javy tylko asma i w dodatku trzeba kombinować z trybem rzeczywistym bo jak wspomniałeś nie znajdę systemu 36 bitowego. BTW Pytanie co na to płyta główna gdyz to one są bardzo często wąskim gardłem :P (chodzi mi o osobistą )

Odp: Własny benchmark - 32b i 64b

: 09 sty 2009, 23:27
autor: el.pescado
wydaje mi się oczywistem, że pisząc program do sprawdzenia czy da się więcej pamięci zaadresować nie będę używać Javy tylko asma
Asm ci nic nie da, jeżeli będziesz korzystał z normalnego systemu operacyjnego, chyba żę napiszesz swój moduł do jądra. Programy z przestrzeni użytkownika mają 32-bitową przestrzeń adresową i chyba ciężko to przeskoczyć.

Odp: Własny benchmark - 32b i 64b

: 10 sty 2009, 01:18
autor: pinochet
Oczywiście system operacyjny nie ma tu żadnego znaczenia - może nie zauważyłeś ale wszedłem w swoim poście na jeszcze niższy poziom abstrakcji - tryb procesora. Aczkolwiek nie jestem pewny czy istnieje możliwość zmiany tego trybu w programie wywołanym przez system - raczej nie :] dlatego napisałem że będę próbował czytaj: w wolnej chwili poużywam googla :D