BitZenyをRyzen Threadripper 1950Xで採掘する時の良い環境とオプションを探しました
BitZenyをRyzen Threadripper 1950Xで採掘する時の良い環境とオプションを探します.
環境やオプションを変えてマイニングして, ハッシュレートを記録していきます.
検証環境.
% uname -a
Linux strawberry 4.14.8-gentoo-r1 #15 SMP Wed Dec 27 23:26:15 JST 2017 x86_64 AMD Ryzen Threadripper 1950X 16-Core Processor AuthenticAMD GNU/Linux
% sudo lshw -short
H/W path Device Class Description
=========================================================
system MS-7B09 (To be filled by O.E.M.)
/0 bus X399 SLI PLUS (MS-7B09)
/0/0 memory 64KiB BIOS
/0/28 memory 32GiB System Memory
/0/28/0 memory 2667 MHz (0.4 ns) [empty]
/0/28/1 memory 8GiB DIMM DDR4 Synchronous Unbuffered (Unregistered) 2667 MHz (0.4 ns)
/0/28/2 memory 2667 MHz (0.4 ns) [empty]
/0/28/3 memory 8GiB DIMM DDR4 Synchronous Unbuffered (Unregistered) 2667 MHz (0.4 ns)
/0/28/4 memory 2667 MHz (0.4 ns) [empty]
/0/28/5 memory 8GiB DIMM DDR4 Synchronous Unbuffered (Unregistered) 2667 MHz (0.4 ns)
/0/28/6 memory 2667 MHz (0.4 ns) [empty]
/0/28/7 memory 8GiB DIMM DDR4 Synchronous Unbuffered (Unregistered) 2667 MHz (0.4 ns)
/0/2a memory 1536KiB L1 cache
/0/2b memory 8MiB L2 cache
/0/2c memory 32MiB L3 cache
/0/2d processor AMD Ryzen Threadripper 1950X 16-Core Processor
% gcc -v
組み込み spec を使用しています。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/7.2.0/lto-wrapper
ターゲット: x86_64-pc-linux-gnu
configure 設定: /var/tmp/portage/sys-devel/gcc-7.2.0/work/gcc-7.2.0/configure --host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/7.2.0 --includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include --datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/7.2.0 --mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/7.2.0/man --infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/7.2.0/info --with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/include/g++-v7 --with-python-dir=/share/gcc-data/x86_64-pc-linux-gnu/7.2.0/python --enable-languages=c,c++,fortran --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 7.2.0 p1.1' --disable-esp --enable-libstdcxx-time --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-multilib --with-multilib-list=m32,m64 --disable-altivec --disable-fixed-point --enable-targets=all --disable-libgcj --enable-libgomp --disable-libmudflap --disable-libssp --disable-libcilkrts --disable-libmpx --enable-vtable-verify --enable-libvtv --enable-lto --without-isl --enable-libsanitizer --enable-default-pie --enable-default-ssp
スレッドモデル: posix
gcc バージョン 7.2.0 (Gentoo 7.2.0 p1.1)
マイニングプールにはLA Bitzeny Pool - Homeを使いました.
bitzeny/cpuminer
まずは公式のマイナーを使います.
bitzeny/cpuminer: CPU miner for Litecoin and Bitcoin
gitのcommit番号は2788e8130c531343044c383c4fff384bb005638c
です.
ビルドオプションは公式READMEのをすこしだけいじって-Ofast -flto
をつけて
./configure CFLAGS="-Ofast -march=native -funroll-loops -fomit-frame-pointer -flto"
10.11 khash/s
Ryzen Threadripper 16 コアで BitZeny(yescrypt) をマイニングする(2017/12/23 時点 14.7 khash/s) - Qiita
によると,
ThreadripperはAVXの性能が悪いので--disable-assembly
をつけてAVXを無効化した方が良いとのことです.
そうしてみます.
./configure CFLAGS="-Ofast -march=native -funroll-loops -fomit-frame-pointer -flto" --disable-assembly
10.29 khash/s
macchky/cpuminer
最近の人はforkされたマイナーを使っているらしい. 私も使います.
macchky/cpuminer: CPU miner for BitZeny and Litecoin and Bitcoin
gitのcommit番号はbed062dd1f632a374816a08ae2e179182223e1d9
です.
公式のビルドオプションが-O3
のみを推奨しているのでまずはそれだけで試してみます.
./configure CFLAGS="-O3"
10.54 khash/s
既に--disable-assembly
した方が速いという報告があるため.
./configure CFLAGS="-O3" --disable-assembly
10.55 khash/s
速くなりそうな呪文を盛ってみます.
./configure CFLAGS="-Ofast -march=native -funroll-loops -fomit-frame-pointer -flto" --disable-assembly
10.34 khash/s
おい遅くなったぞ.
最適化切ってるオプションが存在するのでそれを取り除いてみる.
./configure CFLAGS="-Ofast -march=native -fomit-frame-pointer -flto" --disable-assembly
10.42 khash/s
???何かが逆効果なんですかね?
./configure CFLAGS="-O3 -march=native -fomit-frame-pointer -flto" --disable-assembly
10.47 khash/s
./configure CFLAGS="-Ofast" --disable-assembly
10.53 khash/s
-march=native
が余計なのか.
もう一度最高速が再現するか試してみます.
./configure CFLAGS="-O3" --disable-assembly
10.52 khash/s
完全に速度が再現しない.
./configure CFLAGS="-Ofast -march=native -flto" --disable-assembly
10.38 khash/s
試してないやつを試してみますか
./configure CFLAGS="-Ofast"
10.52 khash/s
再現する中では,
./configure CFLAGS="-Ofast" --disable-assembly
が一番速そうですね.
32スレッドではなく24スレッドにした方が速度が出るという報告があるのでそれを試してみます.
12.50 khash/s
バラツキが酷いですが, 24スレッドの方が速度が出るようです.
16スレッド.
11.51 khash/s
25スレッド.
12.46 khash/s
23スレッド.
12.79 khash/s
20スレッド.
12.44 khash/s
22スレッド.
12.17 khash/s
21スレッド.
12.79 khash/s
ばらつきが酷くて測定が難しいのですが, 概ね21-24が最も高速なようです.
これSMT(Intelで言うハイパースレッディング)無効化したら物理コアを十分に活かせて早いんじゃないですか?
しかしこのPCはマイニング専用というわけではないので, 普段使いでSMTを無効化するというのは嫌ですね. マイニングが多少早くなるとしても嫌です. 私にとってマイニングは遊ばせてるPCの遊びでしかないので.
しかし一応試してみようと思いSMTを無効化してみました.
12.61 khash/s
SMTを無効化しても早くなるということは無いようですね.
あとこれを探ってて気がついたんですけど, NUMA構成よりUMA構成の方がハッシュレート出るみたいですね.
nezumi-tech/cpuminer
nezumi-tech/cpuminer: CPU miner for BitZeny and Litecoin and Bitcoin
gitのcommit番号はb1011b704f59c1be643ff676ffef43d174ce3541
です.
cpuminer高速化総合 - BitZenyフォーラムでの議論の結果産まれたようですね.
Ryzen ThreadripperはAVX命令に弱いので, 高速化は期待できなさそうですが, 一応試してみます.
./configure CFLAGS="-Ofast -march=native -fomit-frame-pointer -flto"
24スレッド.
12.23 khash/s
./configure CFLAGS="-Ofast" --disable-assembly
24スレッド.
12.63 khash/s
./configure CFLAGS="-Ofast -march=native -fomit-frame-pointer -flto" --disable-assembly
24スレッド.
12.50 khash/s.
結論
私の環境での実験結果から以下の結論が導かれました.
macchky/cpuminerとnezumi-tech/cpuminerの間に有意差は無い.
./configure CFLAGS="-Ofast" --disable-assembly
でビルドしてランタイムに24スレッドを指定するのが効率が良い.
私のBitZeny受信用アドレスはZgyRLE2tvB4EsXg1ezDvRBjnXoHrfV4kGS
.