2010-12-31 8 views
20

Jakie są korzyści z uruchamiania wersji AMD64 Pythona i rozszerzeń? (Wiele rozszerzeń compiled for amd64 here.) Mam procesor i5 i Win7 64-bitowy, więc wydaje się, że byłoby właściwe. Ale to też brzmi jak buggy, beta, unsupported, itp.Czy w 64-bitowym systemie operacyjnym można korzystać z X-64-bitowego Pythona na 64-bitowym procesorze?

Czy to rzeczywiście zapewnia korzyści wydajności? W jakich obszarach? Mogę uruchamiać SciPy, NumPy, itp. Czasami dostaję błędy "out of memory" w 32-bitowym Pythonie, a moja maszyna ma 4 GiB pamięci RAM.

Czy pakiety win32 mogą być zainstalowane na 64-bitowej bazie Pythona, jeśli nie istnieje 64-bitowa wersja pakietu?

Odpowiedz

19

Podstawowym uzasadnieniem używania 64-bitowego Pythona jest dostęp do ponad 2 GB pamięci głównej, np. jeśli masz duże dyktatury, listy lub długie ciągi. Wymaga to, abyś miał tak dużo pamięci w swoim systemie, aby była praktyczna.

Dodatkowym efektem jest to, że w trybie AMD64 procesor ma więcej rejestrów, więc wynikowy kod może działać nieco szybciej (dla operacji na liczbach całkowitych).

Python w trybie 64-bitowym w systemie Windows z pewnością nie jest w wersji beta ani nie jest obsługiwany. Może to być błędne, ale tylko wtedy, gdy faktycznie masz bardzo duże struktury danych. 64-bitowy Python ma około 15 lat (choć nie w Windowsie).

+1

Czy więcej rejestrów nie przyspieszyłoby niczego, co używa rejestrów, a nie tylko operacji liczb całkowitych? – endolith

+2

@endolith: ponieważ dodatkowe rejestry są rejestrami całkowitymi, kod wykorzystujący operacje zmiennoprzecinkowe w dużym stopniu nie może skorzystać z tego poszerzenia. Oczywiście, rzadko posiadasz kod, który używa wyłącznie operacji zmiennoprzecinkowych, tak więc każdy kod może odnieść korzyść - chyba że już dobrze sobie radził z rejestrami x86 sam. –

+1

@endolith i Martin: x86-64 ma dwa razy więcej rejestrów XMM (16), jak również 16 rejestrów całkowitych. Co więcej, ABI określa przekazywanie/zwracanie argumentów FP w rejestrach XMM zamiast w starszych rejestrach x87. Posiadanie SSE2 jako wymaganej części architektury jest bardzo ładne i oznacza, że ​​wszystkie programy mogą z niego korzystać bez sprawdzania bitów operacji CPUID. –

5

Tę samą zaletę, co każdy inny program 64-bitowy: dużo przestrzeni procesowej i dostęp do większej liczby rejestrów (przynajmniej dla modułów VM i C). Ale nie, musisz znaleźć 64-bitowe wersje modułów C.

3

Już od wielu lat uruchamiam 64-bitowy Python na Linuksie. Żadnych problemów, to nie jest buggy. Obejmuje to numpy. Nie martwiłbym się o to.

Jedna mała korzyść:

Python> sys.maxint 
9223372036854775807 

Jednak przypuszczam, że można argumentować, jeśli istnieje jakakolwiek korzyść, ale to samo dotyczy wszystkich aplikacji 64-bitowych w ogóle.

Otrzymujesz największe korzyści, gdy masz do czynienia z bardzo dużymi ilościami danych.

0

Wyobrażam sobie, że uzyskasz wzrost wydajności dzięki SciPy i NumPy, ponieważ obsługa liczb i obliczenia są znacznie lepsze, gdy dodajesz więcej bitów do procesora. Ale nie mogę być tego pewien.

Zawsze można uruchomić 64-bitowe i 32-bitowe obok siebie i zrobić kilka porównań, chciałbym wiedzieć, wyniki testów po stronie chrupania liczby. Jeśli używasz tej samej wersji obu, kod będzie działał na obie grzywny, pod warunkiem, że masz moduły potrzebne do obu.

+0

Chciałbym również zobaczyć porównawcze porównania. – endolith

+0

Zrobiłem bardzo minimalny czas porównania fft (rand (1021)). Używanie 32-bitowego Pythona (x, y): 3,37 ms na pętlę. Korzystanie z 64-bitowej wersji MKL: 2,56 ms na pętlę – endolith

5

Normalne zyski uzyskuje się przy użyciu ogólnie kodu 64-bitowego. Nie znalazłem żadnych nowych benchmarków, ale w chwili wprowadzenia x64 kod mógł działać nawet o 30% szybciej na 64-bitach niż na 32-bitowym sprzęcie x86 - ta luka z pewnością spadła jakoś z optymalizacją od czasu, ale jest wciąż prawdopodobnie szybciej.

Korzystając z ablle, można w sposób przezroczysty używać więcej niż 4 GB pamięci, jeśli zajdzie taka potrzeba.

Należy jednak zauważyć, że wzrost prędkości w 64-bitach wynika z okropnego 32-bitowego starszego ABI: enve rdzeń i7 działający w 32-bitowym ma te same 4 rejestry ogólnego przeznaczenia (i kilka innych), które miały w układzie 80386 od 1987 roku A te mapowane 1: 1 do rejestru na 8086 z lat 70-tych.64-bitowy abi wprowadza więcej (prawdziwych) rejestrów ogólnego przeznaczenia, co sprawia, że ​​zyskuje on prędkość. W przeciwnym razie 64-bitowy kod po prostu podwoi pamięć podręczną, co sprawia, że ​​w innych architekturach, takich jak PPC, jest wolniejszy niż kod 32-bitowy.

Powiązane problemy