Windows用Bitcoin x86
x86 Windowsのユーザーはたぶんx64のスレッドを読もうともしないだろうと思い、新しいトピックを立てた。ただ、ここに来たなら、この投稿を読んだあとにあのスレッドの5ページ目も読むことを勧める。
さて、新しいSHAキャッシュ最適化を施したビットコインのビルドを2種類コンパイルした。1つはSSE命令セットに完全に最適化したビルドで、最新のCPUが要る。もう1つはSSE最適化なしでコンパイルしたもので、XP以降が動くほぼすべてのCPUで動くはずだ。SSE版は非SSE版より少し速く、どちらもx64ビルドには劣る。64ビットのOSを使っているなら、これらを使う必要はない。
ただし、同梱のlibeay32.dllにはSSEが含まれている可能性があるため、どちらも動かない場合は、そのDLLを標準のビットコインに同梱されているものに置き換えてくれ
ビルドはここから入手できる (http://www.4shared.com/file/kIewrXzp/Bitcoin_x86.html)
あなたのビルドには、どれもソースコードが付いていないようだ。ソースを自分で確かめて、コンパイルできるとありがたいんだが。
私のビルドが信用できないなら使わなければいい。自分でビルドの環境を整えたいなら、その作業は自分でやれ。アプリのソースコードは、すべて公開されている。
敵意を向ける必要はない。ビルド環境は構築してあるが、ソースコードなしでは変更箇所をコンパイルすることがまったくできない。これは大きな警告だ。明らかに一部のビルドでソースを改変しておきながら、ピアレビューのためにその変更を提供しようとしない。これはオープンソースの精神に反すると思う。改変されたバイナリのみのリリースはソフトウェアの進歩に貢献せず、そのバイナリを提供する個人への不必要な依存を生み出す。
敵意を向ける必要はない。ビルド環境は構築してあるが、ソースコードなしでは変更箇所をコンパイルすることがまったくできない。これは大きな警告だ。明らかに一部のビルドでソースを改変しておきながら、ピアレビューのためにその変更を提供しようとしない。これはオープンソースの精神に反すると思う。改変されたバイナリのみのリリースはソフトウェアの進歩に貢献せず、そのバイナリを提供する個人への不必要な依存を生み出す。
Crypto++ 5.6.0: http://www.cryptopp.com/
キャッシュ付きSHA256: http://pastebin.com/rJAYZJ32(他の場所で公開されていると思うが、IRCでリンクをもらった)
あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-DクアッドコアXeon@1.6GHz標準:1100kh/sフル最適化:2600kh/s
ありがとう!
khash/sが800から1900に倍以上になった。
AMD Phenon II X2 550
あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-DクアッドコアXeon@1.6GHz標準:1100kh/sフル最適化:2600kh/s
ありがとう!
BitCoinはいつでもありがたい、署名のアドレスまで
Crypto++ 5.6.0:
http://www.cryptopp.com/Cached SHA256:http://pastebin.com/rJAYZJ32(これは他の場所でも公開されていると思うが、IRCでリンクを教えてもらった)
キャッシュされたSHA256の状態のアイデアをSVNのrev 113に追加した。高速化は約70%だ。x64スレッドでのあなたの投稿に基づいて、tcatmの功績とした。
Crypto++ 5.6.0のASM SHAコードをMinGWでコンパイルできるが、実行するとすぐにクラッシュする。MASM(Microsoftのアセンブラ)用と書かれており、サンプルのコマンドラインはVisual C++のもののようだ。MSVCとIntelコンパイラーでしか動作しないのだろうか?
Ssgtsteinの投稿(2010年7月26日14:28 UTC)あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-DクアッドコアXeon@1.6GHz標準:1100kh/sフル最適化:2600kh/s
ありがとう!
BitCoinはいつでもありがたい、署名のアドレスまで
コインをまとめて送っておいた 😉
Crypto++ 5.6.0のASM SHAコードをMinGWでコンパイルできるが、実行するとすぐにクラッシュする。MASM(Microsoftのアセンブラ)用と書かれており、サンプルのコマンドラインはVisual C++のもののようだ。MSVCとIntelコンパイラーでしか動作しないのだろうか?
最近、私も(外部ライブラリとして)古い統合コードの代わりにCrypto++ 5.6.0を使おうと試みたが、同じ結果だった——CryptoPP::SHA256::Transformの最初の呼び出しでクラッシュした。VC++ 2008ですべてをビルドしたのだが。詳しく調査していないが、Crypto++のルーチンはアラインされた入力を必要とするという指摘があった——それが原因かもしれないし、他のバグがあるのかもしれない。
アラインされた入力を必要とするアセンブリ命令をアラインされていないものに変更する必要がある(topic 453)。あるいは、ハッシュされるブロックをアラインする。まだ試していないが、このアセンブリコードとステートキャッシュの変更を組み合わせれば、猛烈に速くなるはずだ。
Crypto++ 5.6.0のSHA256機能をBitcoinに統合することができた。SSE2アセンブリコードを使った最速のSHA256だ。Bitcoinがブロックハッシュ関数にアライメントされていないデータを送っていたため、MOVDQA命令をMOVDQUに変更する必要があった。
現時点では、Crypto++ 5.6.0のSHA256機能を使うのが正しい方向だと思う。
Crypto++ 5.6.0ライブラリのサブセットをSVNに追加した。SHAと11個の汎用依存ファイルだけに絞り込んだ。SHA以外の暗号は含まれていないはずだ。
データフィールドをアラインしたところ、動作した。ASM SHA-256は約48%高速だ。合計の高速化はバージョン0.3.3と比べて約2.5倍だ。
SSE2を使用しているようだ。コンパイル時にコンパイラー環境に基づいてビルド設定を自動的に決定する。
実行時にSSE2の検出も行っているようだが、利用できない場合に実際にフォールバックするかどうかは判断しにくい。リリースビルドにはSSE2を入れたいと思う。SSE2は最初のPentium 4から存在している。Pentium 3以前のものでは遅すぎて、生成しようとしても電気代の無駄になるだろう。
これはSVN rev 114だ。
… SSE2を使っているようだ。コンパイル環境に基づいて、コンパイル時にビルド構成を自動設定している。
実行時にSSE2の検出も行っているように見えるが、SSE2が利用できないときに実際にフォールバックに使われているかは判別が難しい。リリースビルドにはSSE2を入れたい。SSE2は最初のPentium 4から存在している。Pentium 3以前ならあまりに遅くて、マイニングしようとしても電気の無駄になるだけだ。
SSE2非対応の古いマシンが何台かあるので(Windowsクライアント用とLinuxクライアント用)、テストに使える。ここで試した実験ビルドのいくつかは、起動しようとするとプログラムが落ちただけだったが、今後の公式ビルドで「SSE2検出」部分が機能するか、それともプログラムが落ちるかをテストするのは喜んでやる。
了解だ、ありがとう。生成(Generate)をオンにしなければ正常に動作するかどうかも知りたい。SSE2命令を実際に実行しない限り、ロードはできるはずだと思う。少なくともPentium 3でも生成なしで実行できるだろう。
了解だ、ありがとう。生成(Generate)をオンにしなければ正常に動作するかどうかも知りたい。SSE2命令を実際に実行しない限り、ロードはできるはずだと思う。少なくともPentium 3でも生成なしで実行できるだろう。
SSE2モードはサポートするプロセッサー向けだと思っていた。今のところ、リリースクライアントは古いPI、PII、PIIIマシンでも問題なく動く。ただkhash/sの部分が非常に遅いだけだ。たとえばPIII 933MHzのLinuxマシンで約125 khash/s、手元の古い1.1GHz Celeronsで172 khash/sといった具合だ。
古いプロセッサーを持っている人たちを、少なくともコインのマイニングを試すことから締め出したくない、ヘヘ。
Crypto++ 5.6.0ライブラリのサブセットをSVNに追加した。SHAと11個の汎用依存ファイルだけに絞り込んだ。SHA以外の暗号は含まれていないはずだ。
Crypto++からは多くてもconfig.h、cpu.h、cpu.cpp、sha.h、sha.cppの5ファイルにまで絞れるはずだ。別スレッドに投稿したzipファイルを見てくれ。不要なヘッダーをいくつか除いただけだ。それと、1〜2個の関数を移動する必要もあった気がする。記憶が正しければByteSwapがその一つだ。
OOliproの投稿(2010年7月26日15:42 UTC)Ssgtsteinの投稿(2010年7月26日14:28 UTC)32ビットOSに縛られているサーバー持ちの人たちもね。:-D Quad core Xeon@1.6GHz Stock: 1100kh/s Full Opt: 2600kh/s
ありがとう!
BitCoinはいつでもありがたい。アドレスは署名にある。
今、コインの束を送ったよ。
じゃあ、私に0.02送ってきたのは君じゃなかったってことだな?😁