• 作成:

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.