#動機
新しいPCをRYZEN Threadripper X1950で組んだのでCPU負荷試験&性能出し。
ZNY/JPYが20として、1日14ZNY程度なので¥280/Day、電気代は稼げるから遊ばせているよりはマシ程度
CPUの値段とか考えると元は取れないので、あくまでお遊びで。
#基本的なビルド
##オリジナル手順
https://bitzeny.info/d/4-cpu/77
##OS設定から
コントロールパネルからWindows Subsystem for Linuxを有効化
ストアからUbuntuをインストール
Ubuntuを起動し、アカウント、パスワード設定
sudo apt-get update
*これやらないと下のapt-getで失敗する
sudo apt-get install build-essential automake mingw-w64-x86-64-dev
sudo apt install gcc-mingw-w64-x86-64
git clone https://github.com/zenywallet/cpuminer.git
cd cpuminer/deps
./build_win_deps.sh
cd ..
autoreconf -fi -I./deps/x86_64-w64-mingw32/share/aclocal
./configure --host=x86_64-w64-mingw32 \
CFLAGS="-O3 -march=native -I./deps/x86_64-w64-mingw32/include -std=c99 -DWIN32 -DCURL_STATICLIB -DPTW32_STATIC_LIB" \
--with-libcurl=deps/x86_64-w64-mingw32 LDFLAGS="-L./deps/x86_64-w64-mingw32/lib -static"
make
*「-Ofast -flto」より「-O3」の方が早い。
cp minerd.exe /mnt/d/
*WindowsのDドライブにコピー
###追記
https://github.com/nezumi-tech/cpuminer
こちらの方が速い
#Windows環境で実行
論理CPUは32あるが、ZENコア(やIntel CPU)はSMTなので、IO待ちが殆ど無いMiningでは物理コア数以上で回すとスレッド切り替え処理自体や切り替えによってL1キャッシュが追い出されるために遅くなる。
物理コア数(-t 16)で回すのが良い。
ホストとの通信スレッドとかOS動作もあるので、物理コア数-1の方が良かもと試したがMiningスレッドの優先度が低いので計算能力が下がるだけだった。
#今後やること
##minerd.exe解析&改良
パフォーマンスモニターで見た限り、MiningスレッドがCPUコアに張り付いていない。
CPU間をウロチョロしているスレッドがあるので、動作スレッドがCPUコア数(論理CPU数の半分)以下なら固定化することで若干のパフォーマンス向上が見込める。
affine_to_cpu()というのが該当する関数だけど、Windowsには対応していないのね。まずはここから。
pthreads_win32公式がpthread_setaffinity_np()に対応していなかったので
https://github.com/GerHobbelt/pthread-win32
を利用するように変更。
CPUコア数の半分以下のスレッド数の時にSMT前提で偶数番号に割り当てるようにした。
効果は微々たるもの(0.8%)なので、計算側の改良にとりかかる。
##GCC7.2(8.0)化
Ryzen向けの改良とか入っているので、コンパイラーを最新にする。
*でも、重い処理はインラインアセンブラになってるからどれだけ効果あるのか・・・
→クロスコンパイラがmingw-gccなので、gccを上げても無駄。mingw辞めてUbuntu上の動作させることを検討する。
##GPU化
bitZenyのCPUマイニングにこだわる方針とは対立する内容。
yescriptはメモリ消費量を上げたりでGPU化が難しいが、CPUと同じ程度でいいので計算出来るようになればGPUの方が安い&1PCに複数載せれるので採掘がペイするようになるかも。
CUDAの勉強がてら挑戦してみようかと。可否判断程度はできるようになる。
*崩壊する可能性があるので公開するかは別
##数式起こし
現状計算の元になっている論文とか数式も知らないので、計算の最適化するためにも一度数式を見ておいた方がいいかなと。
#メモ
世間一般的には「yescrypt」は「yescrypt-1.0」
BitZenyは「yescrypt-0.5」
基本的な考え方とかは下記の論文。
https://password-hashing.net/submissions/specs/yescrypt-v2.pdf
Linuxの場合は
libcurl4 だけでなく libcurl4-openssl-devのインストールも必要。
無いとconfigureが通らない。