2010-12-31 13 views
20

Pythonと拡張機能のamd64ビルドを実行するとどのような利点がありますか? (たくさんの拡張子compiled for amd64 here。)私はi5プロセッサとWin7 64ビットを持っているので、適切であるようです。しかし、それはバギー、ベータ、サポートされていない、などのように聞こえます。64ビットOS上の64ビットCPU上でX86-64 Pythonを実行する利点はありますか?

実際にパフォーマンス上の利点はありますか?どの分野ですか?私はSciPy、NumPyなどを実行しています.32ビットPythonで「メモリ不足」エラーが発生することがあります。私のマシンには4GBのRAMがあります。

パッケージの64ビットバージョンが存在しない場合、64ビットPythonベースにwin32パッケージをインストールできますか?

答えて

19

64ビットPythonを使用する主な理由は、2GBを超えるメインメモリにアクセスできることです。大きなdicts、リスト、または長い文字列がある場合。これには実際にシステムのメモリが実用的であることが必要です。

第2の効果は、AMD64モードではCPUのレジスタが増えているため、結果のコードが(整数演算では)少し速く実行される可能性があることです。

Windows上の64ビットモードのPythonは、ベータ版でもサポートされていません。それはバグかもしれませんが、あなたが実際に非常に大きなデータ構造を持っている場合のみです。 64ビットPythonは約15年(Windowsではなく)です。

+1

整数演算だけでなくレジスタを使用する何らかの高速化はありませんか? – endolith

+2

@endolith:追加のレジスタは整数レジスタなので、浮動小数点演算を広範囲に使用するコードはその拡張の恩恵を受けることはできません。もちろん、浮動小数点演算を純粋に使用するコードはめったに存在しないので、実際にはx86レジスタのみですでにうまく処理していない限り、どのコードでもメリットが得られます。 –

+1

@endolithとMartin:x86-64は、16個の整数レジスタを持つだけでなく、2倍のXMMレジスタ(16)を持っています。さらに、ABIは、従来のx87レジスタではなく、XMMレジスタでFP引数を渡し/返すことを指定します。 SSE2をアーキテクチャの必須部分とすることは非常にうれしく、すべてのプログラムがCPUID機能ビットをチェックせずに使用できることを意味します。 –

5

他のすべての64ビットプログラムと同じ利点:多くのプロセススペースと、より多くのおよびより大きなレジスタへのアクセス(少なくともVMおよびCモジュール用)。しかし、いいえ、64ビットバージョンのCモジュールを見つける必要があります。

3

私は既にLinux上で64ビットPythonを何年も実行してきました。問題はなく、バグではありません。これには、numpyが含まれます。私はそれについて心配しません。

一つの小さな利益:しかし

Python> sys.maxint 
9223372036854775807 

は、私はそれにどんな利点がある場合、1を主張することができたとしますが、同じことが、一般的に、すべての64ビットアプリケーションのために行きます。

非常に大量のデータを扱うときに最も効果的です。

0

SciPyとNumPyでパフォーマンスが向上すると思います。数字の処理と計算は、プロセッサにビットを追加すると大幅に改善されるからです。しかし、私は確信が持てません。

いつも64ビットと32ビットを並行して実行し、いくつかの比較を行うことができます。私は数値の面でのテストの結果を知りたいと思うでしょう。同じバージョンの両方を実行している場合は、両方に必要なモジュールがあれば、コードは正常に動作します。

+0

私はベンチマークの比較も見たいと思います。 – endolith

+0

私は非常に最小限の比較時間をfft(rand(1021))しました。 Python(x、y)を使用する32ビット:ループあたり3.37ミリ秒。 64ビットMKLバージョンの使用:ループあたり2.56ミリ秒 – endolith

5

一般的に64ビットコードを使用すると、通常のゲインが得られます。最近のベンチマークは見つかりませんでしたが、x64の導入時には、x86ハードウェアの32ビットよりも64ビットで30%高速で実行できるようになりました。このギャップは時間の経過とともに最適化されていますが、まだまだ速いでしょう。

また、4GB以上のメモリを必要以上に使用することもできます。

ただし、64ビットの速度向上は、32ビットの従来のABIのおかげです。つまり、32ビットで動作するコアi7には、1987年の80386チップと同じ4つの汎用レジスタ(およびその他のもの)があります。 70:8086のレジスタに1:1でマッピングされています。64ビットのabiは、より多くの(実際の)汎用レジスタを導入し、それは速度の向上のためにそれを可能にします。それ以外の場合、64ビットコードは単にキャッシュメモリの2倍を費やすだけで、PPCのような他のアーキテクチャでは実際には32ビットコードよりも遅くなります。

関連する問題