Własny benchmark - 32b i 64b
-
- 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
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.
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
-
- 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
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.
- el.pescado
- 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
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.Czy ktoś mi może wytłumaczyć czemu system 64b jest wolniejszy??
Programy w C zwykle są szybsze od tych w Pythonie.P.S. Mój program w C szybciej łamie hasło od autora artykułu który to pisał w Pythonie,
- PL_kolek
- 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
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
Pytam z ciekawości czystej
- el.pescado
- 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
Wydaje mi się, że taka jest główna przyczyna powstania procesorów 64-bitowych.Hmmm... pogubiłem się. jedyna różnica między 64bit a 32bit jest w ilości pamięci do zaadresowania?
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).To czemu AMD stworzyło procesory 64bitowe (po to żeby obsłużyć te 64bitowe rejestry?).
Prawdopodobnie.Idąc tym tropem siedzę na 64bitowym Ubuntu, robię to niepotrzebnie, bo mam 2GB RAMu, a tyle to i 32bit wykorzysta?
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).
- Hauleth
- 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
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/
Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
-
- 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
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
to jest różnia prędkości "lim->0" ale przy 70% operacji może być juz odczuwalna.
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

- el.pescado
- 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
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.int64_t = long long int
- Hauleth
- 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
to sobie podejrzyj źródła

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/
Biblioteka do C++ - Bust Lib: http://code.google.com/p/bust/
- el.pescado
- 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
Nie miałem akurat pod ręką 64-bitowego OS (wiem wiem, w necie mogłem sprawdzić).to sobie podejrzyj źródła
W każdym razie, na 64-bitowym IRIX typ long long int też ma 64 bity (tyle mogę sprawdzić empirycznie)


-
- 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
@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:
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).
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
[IMG]http://www.ubudsl.com/media/UbuDSL.png[/IMG]
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
Masz problem z UbuDSL? Nie zapomnij wygenerować i załączyć loga do postu!
-
- 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
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.
Porównaj może wyniki testów dostępnych w HardInfo http://hardinfo.berlios.de/HomePage dla 32 i 64 łubuntu.
-
- 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
Oczywiście to nie ma żadnego związku z architekturą [s]IA64[/s]x86-64.Riklaunim pisze: plus w przypadkach gdy aplikacja/kod alokuje dużo pamięci/danych,
co do procków 128bit to myśle, że jeżeli wogóle takie powstaną to najszybciej za + 50 lat ... dlaczego? - RISK
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 :] )el.pescado pisze:Wydaje mi się, że taka jest główna przyczyna powstania procesorów 64-bitowych.
Oczywiście dodatkowym powodem była presja ze strony firm tworzących software aby zwiększyć ilość rejestrów
-
- 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
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 RAMupinochet pisze:Oczywiście to nie ma żadnego związku z architekturą IA64

- el.pescado
- 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
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.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.
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.nawet w 32 bitowych systemach mogą używać więcej RAMu
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.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 :] )
-
- 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
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
(chodzi mi o osobistą )
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

- el.pescado
- 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
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ć.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
-
- 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
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 

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