macchky / cpuminer

CPU miner for BitZeny and Litecoin and Bitcoin
https://bitcointalk.org/index.php?topic=55038.0
Other
79 stars 11 forks source link

Fixing manycore (largescale > 64core) affinity #8

Open ghost opened 6 years ago

ghost commented 6 years ago

The recent affinity setting could manage maximum 63core ( 0xFFFF FFFF FFFF FFFFE ), and it would cause the overflow target number of core on over 64 cores machine at default running. In this case, it causes performance problem.

These patches fix and add,

Require additional library: Gnu Multiple Precision (GMP) Library.

Japanese descriptions here,

最近追加されたアフィニティ設定はint64で表現されているために、実質63コアまでしか設定できません。アフィニティを指定しない場合、デフォルトではコアに対し1対1でスレッド、プロセスがマップされるはずですが、コアをマップする箇所も64bitをローテートしてスキャンしている為か、64個を超えたコア数を持つマシンの場合、意図せず1コアに複数スレッドが割り当てられるという挙動を起こしてしまい、コア数=スレッド数のはずなのに、有効なコアを利用できなくなってしまうようです。

参考にされているソースにもopt_affinity変数を__int128型にすることで対応しようというプルリクが出てますが、設定値の読み取り時点で64bitなのでデフォルトの動作を修正するだけで、設定は不可能です。 そのためとりあえず、GMPライブラリでコア数制限の無い感じにしてみました。 (設定値を文字列で持つとかいろいろ方法はありそうですけど、大まかなロジックを変えずに行けそうだったので) 文字列読み込みの関数のお陰で2進数プリフィックス0bが使えるので、多少わかりやすく設定できるような気がします。 Windows, Macでの検証はしてませんので、問題がありそうならリジェクトしたってください。

macchky commented 6 years ago

実際36スレッドでも動作しなかったので、すこし悩んでいたところでした。 Windowsの方でもテストしてみて確認できましたらマージします。

ghost commented 6 years ago

Windowsで動くかどうかは残念ですがわからないですね… MSDN読んでみたけど64コア以上の取り扱い面倒そう(自分の嗜み程度では) 後GNUのプロダクトをリンクするので、スタティックリンクした成果物を配布するのがダメなパターンになっちゃうかもしれません。(さっき気づいた)

macchky commented 6 years ago

Windows 用ビルドが出来ず断念しそうです GMPが何故か認識されない・・・