Bitcoin x86 for Windows

12 件のメッセージ BitcoinTalk Olipro, サトシ・ナカモト, BlackEye, sgtstein, BitCoinPurse, knightmb, dkaparis 2010年7月25日 — 2010年7月27日
Olipro 2010年7月25日 原文 · 個別ページ

x86 Windowsユーザーはおそらくx64スレッドを読もうともしないだろうと思い、新しいトピックを作成しました。ただし、ここに来たからには、この投稿を読んだ後にあのスレッドの5ページ目も読むことをお勧めします。

さて、基本的に新しいSHAキャッシュ最適化を施したビットコインのビルドを2種類コンパイルしました。1つはSSE命令セットに対して完全に最適化されたビルドで、最新のCPUが必要です。もう1つはSSE最適化なしでコンパイルされており、XP以降を動作可能なほぼすべてのCPUで動作するはずです。SSE版は非SSE版より若干高速で、どちらもx64ビルドには劣ります。64ビットOSをお使いの方は、これらを使う必要はありません。

ただし、同梱のlibeay32.dllにはSSEが含まれている可能性があるため、どちらも動作しない場合は、そのDLLを標準のビットコインに同梱されているものに置き換えてください

ビルドはこちらからダウンロードできます

BlackEye 2010年7月26日 原文 · 個別ページ

敵意を向ける必要はない。ビルド環境は構築してあるが、ソースコードなしでは変更箇所をコンパイルすることがまったくできない。これは大きな警告だ。明らかに一部のビルドでソースを改変しておきながら、ピアレビューのためにその変更を提供しようとしない。これはオープンソースの精神に反すると思う。改変されたバイナリのみのリリースはソフトウェアの進歩に貢献せず、そのバイナリを提供する個人への不必要な依存を生み出す。

Olipro 2010年7月26日 原文 · 個別ページ

Quote from: BlackEye on July 26, 2010, 12:38:27 PM

敵意を向ける必要はない。ビルド環境は構築してあるが、ソースコードなしでは変更箇所をコンパイルすることがまったくできない。これは大きな警告だ。明らかに一部のビルドでソースを改変しておきながら、ピアレビューのためにその変更を提供しようとしない。これはオープンソースの精神に反すると思う。改変されたバイナリのみのリリースはソフトウェアの進歩に貢献せず、そのバイナリを提供する個人への不必要な依存を生み出す。

Crypto++ 5.6.0: http://www.cryptopp.com/ キャッシュ付きSHA256: http://pastebin.com/rJAYZJ32 (他の場所で公開されていると思うが、IRCでリンクをもらった)

sgtstein 2010年7月26日 原文 · 個別ページ

あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-D クアッドコア Xeon@1.6GHz 標準:1100kh/s フル最適化:2600kh/s

ありがとう!

khash/sが800から1900に倍以上になった。

AMD Phenon II X2 550

Olipro 2010年7月26日 原文 · 個別ページ

Quote from: sgtstein on July 26, 2010, 02:28:25 PM

あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-D クアッドコア Xeon@1.6GHz 標準:1100kh/s フル最適化:2600kh/s

ありがとう!

BitCoinはいつでもありがたい、署名のアドレスまで

Quote from: Olipro on July 26, 2010, 01:04:41 PM

Quote from: BlackEye on July 26, 2010, 12:38:27 PM

敵意を向ける必要はない。ビルド環境は構築してあるが、ソースコードなしでは変更箇所をコンパイルすることがまったくできない。これは大きな警告だ。明らかに一部のビルドでソースを改変しておきながら、ピアレビューのためにその変更を提供しようとしない。これはオープンソースの精神に反すると思う。改変されたバイナリのみのリリースはソフトウェアの進歩に貢献せず、そのバイナリを提供する個人への不必要な依存を生み出す。

Crypto++ 5.6.0: http://www.cryptopp.com/ キャッシュ付きSHA256: http://pastebin.com/rJAYZJ32 (他の場所で公開されていると思うが、IRCでリンクをもらった)

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コンパイラでしか動作しないのだろうか?

knightmb 2010年7月27日 原文 · 個別ページ

Quote from: Olipro on July 26, 2010, 03:42:01 PM

Quote from: sgtstein on July 26, 2010, 02:28:25 PM

あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-D クアッドコア Xeon@1.6GHz 標準:1100kh/s フル最適化:2600kh/s

ありがとう!

BitCoinはいつでもありがたい、署名のアドレスまで Quote from: sgtstein on July 26, 2010, 02:28:25 PM あるいは32ビットOSに縛られたサーバーを持つ人向けに。:-D クアッドコア Xeon@1.6GHz 標準:1100kh/s フル最適化:2600kh/s

ありがとう!

コインをまとめて送っておいた Wink

dkaparis 2010年7月27日 原文 · 個別ページ

Quote from: satoshi on July 27, 2010, 01:29:42 AM

Quote from: Olipro on July 26, 2010, 01:04:41 PM

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コンパイラでしか動作しないのだろうか?

最近、私も(外部ライブラリとして)古い統合コードの代わりにCrypto++ 5.6.0を使おうと試みたが、同じ結果だった——CryptoPP::SHA256::Transformの最初の呼び出しでクラッシュした。VC++ 2008ですべてをビルドしたのだが。詳しく調査していないが、Crypto++のルーチンはアラインされた入力を必要とするという指摘があった——それが原因かもしれないし、他のバグがあるのかもしれない。

BlackEye 2010年7月27日 原文 · 個別ページ

アラインされた入力を必要とするアセンブリ命令をアラインされていないものに変更する必要がある(topic 453)。あるいは、ハッシュされるブロックをアラインする。まだ試していないが、このアセンブリコードとステートキャッシュの変更を組み合わせれば、非常に高速になるはずだ。

Quote from: BlackEye on July 25, 2010, 10:12:23 PM

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だ。

了解だ、ありがとう。生成(Generate)をオンにしなければ正常に動作するかどうかも知りたい。SSE2命令を実際に実行しない限り、ロードはできるはずだと思う。少なくともPentium 3でも生成なしで実行できるだろう。