Różnice wydajności między 32 a 64 bitowym systemem

W laptopach obecnie stosowane są 32 bitowe procesory Intel Core 2 Duo i pochodne oraz 64 bitowe dwurdzeniowe AMD Turion X2 (AMD Puma). W testach ogólnie procesory AMD wypadają gorzej, lecz testy prowadzone są na 32 bitowym MS Windows. W przypadku Linuksa możemy jednak bez problemu używać 64 bitowego systemu z procesorami AMD. Rodzi się pytanie - jaka jest różnica wydajności między 32 a 64 bitowym systemem na tym samym procesorze?

Na starym już laptopie Acer Aspier 5002 WLMi z procesorem AMD Turion 64ML-30 zainstalowałem Archlinuksa w wersji 32 i 64 bitowej z tym samym oprogramowaniem. Do porównania wydajności wykorzystałem proste aplikacje uruchamiane z trybu tekstowego gdy system nie wykonywał innych operacji.

Łamanie md5 brutalnym atakiem

Mierzyłem czas złamania określonego hasza md5 za pomocą skryptu Pythona:
import md5
import sys

haslo = 'kogut'
hasz_hasla = md5.new(haslo).hexdigest()


def make_word(m, base_string=False):
	znaki = 'qwertyuiopasdfghjklzxcvbnm'
	for i in znaki:
		if base_string:
			string = base_string + i
		else:
			string = i
		
		if md5.new(string).hexdigest() == m:
			print 'Podane Haslo to: ' + string
			sys.exit()
		elif len(string) < 5:
			make_word(m=m, base_string=string)

make_word(hasz_hasla)
Za każdym razem skrypt wykonuje stałą ilość operacji, do których wykorzystywany jest praktycznie tylko procesor (brak większego zużycia pamięci czy operacji wejścia/wyjścia). Wyniki wykazały iż system i686 jest prawie 40% wolniejszy od systemu 64 bitowego (43,5 w porównaniu do 31,2 sek pod x86_64).
bench_md5

Tarowanie Tar.Bz2

Mierzyłem czas rozpakowania do /dev/null 118MB pliku TAR.BZ2 (Gentoo stage3) zawierającego dużą ilość plików i katalogów:
time tar -xvjpf plik.tar.bz2 -O > /dev/null
System 32 bitowy przegrywa z 64 bitowym o około 14% (48,3 wobec 42,3 sek dla x86_64). Ze względu na dużo operacji wejścia/wyjścia wyniki mogę być niezbyt dokładne.
bench_tar

Konwersja Ogg do Avi

Mierzyłem czas potrzebny na przetworzenie pliku ogg (big_buck_bunny_480p_stereo 160 MB) na avi za pomocą ffmpeg.:
ffmpeg -i big_buck_bunny_480p_stereo.ogg a.avi

FFmpeg version UNKNOWN, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  configuration: --prefix=/usr --enable-gpl --enable-libmp3lame --enable-libvorbis --enable-libfaac --enable-libfaad --enable-liba52 --enable-libxvid --enable-libx264 --enable-libtheora --enable-postproc --enable-shared --enable-pthreads --enable-x11grab --enable-swscale
  libavutil version: 49.7.0
  libavcodec version: 51.60.0
  libavformat version: 52.17.0
  libavdevice version: 52.0.0
  built on Jul 20 2008 05:42:19, gcc: 4.3.1 20080626 (prerelease)
[theora @ 0xb7cc49b0]344 bits left in packet 81
[theora @ 0xb7cc49b0]7 bits left in packet 82
Input #0, ogg, from 'big_buck_bunny_480p_stereo.ogg':
  Duration: 00:09:56.45, start: 0.000000, bitrate: 2237 kb/s
    Stream #0.0: Video: theora, yuv420p, 854x480, 24.00 tb(r)
    Stream #0.1: Audio: vorbis, 48000 Hz, stereo, 192 kb/s
W tym teście system 64 bitowy okazał się mniej wydajny (o 4%) od systemu 32 bitowego (276 wobec 295 sek dla x86_64). Test dla mpeg niestety nie mógł zostać przeprowadzony ze względu na wysypywanie się ffmpeg pod i686.
bench_ogg
W przypadku użycia mencodera (Mplayer) i formatu mpeg:
mencoder big_buck_bunny_480p_stereo.ogg -oac lavc -ovc lavc -o a.mpeg
O 5% wydajniejszy okazał się system 64 bitowy. Jak widać dla multimediów nie ma zbyt dużych i jednoznacznych różnic.

Skalowanie jpg

Mierzyłem czas potrzebny na stworzenie miniatury z 3,1 MB pliku jpg (3264x2448) za pomocą ImageMagick:
convert a.jpg -size 400x400 -thumbnail 400x400 aa.jpg
System 32 bitowy przegrywa o 27% z systemem 64 bitowym (1,62 wobec 1,28 sek dla x86_64).
bench_jpg
RkBlog

Wprowadzenie do świata Linuksa, 18 October 2008

Comment article
Comment article RkBlog main page Search RSS Contact