Własny benchmark - 32b i 64b

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
imported_Tomasz_K
Piegowaty Guziec
Piegowaty Guziec
Posty: 10
Rejestracja: 02 wrz 2007, 12:03
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Własny benchmark - 32b i 64b

Post 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.
Załączniki
md5-c.tar.gz
(7.9 KiB) Pobrany 94 razy
pinochet
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 24 lut 2008, 15:28
Płeć: Mężczyzna
Wersja Ubuntu: 8.10

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

Post 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.
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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.
Awatar użytkownika
PL_kolek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 30 sty 2008, 21:46
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

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

Post 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
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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).
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

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

Post autor: Hauleth »

int64_t = long long int
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
pinochet
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 24 lut 2008, 15:28
Płeć: Mężczyzna
Wersja Ubuntu: 8.10

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

Post 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.
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

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

Post autor: Hauleth »

to sobie podejrzyj źródła :P

Kod: Zaznacz cały

typedef long long int		int64_t;
Jeśli problem rozwiązany dodaj na początku tematu [SOLVED].

Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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 ;)
adrian5632
Przyjaciel
Przyjaciel
Posty: 259
Rejestracja: 17 gru 2006, 16:07
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

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

Post 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).
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
Riklaunim
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 07 sie 2005, 18:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Kontakt:

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

Post 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.
pinochet
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 24 lut 2008, 15:28
Płeć: Mężczyzna
Wersja Ubuntu: 8.10

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

Post 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
Riklaunim
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 07 sie 2005, 18:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Kontakt:

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

Post 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.
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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.
pinochet
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 24 lut 2008, 15:28
Płeć: Mężczyzna
Wersja Ubuntu: 8.10

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

Post 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ą )
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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ć.
pinochet
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 24 lut 2008, 15:28
Płeć: Mężczyzna
Wersja Ubuntu: 8.10

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

Post 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
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości