Windows10
Koto

koto用のcpuminer を Windows用にビルド

はじめに

前回の記事の最後で、cpuminer-multiにkoto用の機能を移植したが、Subsystem for Linux の方が速度が速く頭を抱えていた。

一方minerdをWindows用にビルドした人がおり、Subsystem for Linuxと大きくかわりない速度を出していたため、自信でもビルドを試してみた。
またここの手順は64bit向けです。

参考にしたサイトはこちら

手順としてはUbuntuでも出来るはず(筆者未確認)

手探りでやった箇所が多いため手順が抜けている場合があります

必要なパッケージのインストール

sudo apt-get update
sudo apt-get install git
sudo apt-get install build-essential
sudo apt-get install libtool autotools-dev autoconf pkg-config
sudo apt-get install g++-mingw-w64-x86-64 mingw-w64-x86-64-dev
sudo apt-get install make libcurl4-openssl-dev

マイナーのダウンロード

git clone https://github.com/koto-dev/cpuminer-yescrypt.git
cd cpuminer-yescrypt

依存関係のファイルの準備

mkdir depend
cd depend
wget https://curl.haxx.se/gknw.net/rm/7.38.0/dist-w64/curl-7.38.0-devel-mingw64.zip
wget https://curl.haxx.se/gknw.net/rm/7.38.0/dist-w32/curl-7.38.0-devel-mingw32.zip
unzip curl-7.38.0-devel-mingw64.zip
unzip curl-7.38.0-devel-mingw32.zip
cd ../

ソースをちょっと手直し

sed -i -e "s/#include </\/\/#include </1" yescrypt-platform.c

BitZenyのソースもコメントアウトされていたのでコメントアウト
残っているとsys/mman.hが無くてビルドできない

ビルド準備

./autogen.sh
LDFLAGS="-L depend/curl-7.38.0-devel-mingw64/lib64 -static" LIBCURL="-lcurldll" CFLAGS="-Ofast -march=native -funroll-loops -fomit-frame-pointer" ./configure --host=x86_64-w64-mingw32 --with-libcurl=depend/curl-7.38.0-devel-mingw64

CLAGSのオプションに-march=nativeとすれば実行環境に合わせてコードが生成される。
もし、実行するCPUと異なるCPU用のビルドを行いたい場合はここを参考にビルドオプションを変更する。
たとえば、Subsystem for LinuxではAVX2命令がうまく扱うことが出来ない。
あえてnativeではなくCPUに合わせたビルドオプションを設定する。

ビルド

make

実行ファイルのかき集め

仮にここではCドライブ配下の新しいフォルダーにコピーするとする。

cp minerd.exe /mnt/c/新しいフォルダー
cp depend/curl-7.38.0-devel-mingw64/bin/*.dll /mnt/c/新しいフォルダー

実行用のバッチファイルの作成

テキストエディタに以下の内容を書いてC:\新しいフォルダー\koto_miner.batとして保存。

@echo off
minerd.exe -a yescrypt --userpass=username:password -o 127.0.0.1:8432 --coinbase-addr=<ウォレットのアドレス>

また、CPUを効率よく利用したい場合は、minerd.exeの前に以下の設定をいれて置くと幸せになれる。
だたし、affinityの設定の意味がわからない場合はむやみに設定しないこと。
batch
start /affinity 0x55

簡単に解説すると、CPUのどのコアを利用するかを明示的に指定する。
cpuminer-multiだとアプリケーション側で設定できたが、cpuminer-yescryptにはその機能が無いのでWindowsの機能で代用。
0x55 -> b01010101 -> 1,3,5,7番目のコアを利用する。
-t 4のオプションを一緒につけておくとHTを実質無効にして利用できるため効率が上がる。

最後に

自分でビルドしたWindows用のcpuminer-yescryptは0.1kH/s以上差が見られた。

Windowsの方には/affinity 0x55の設定が入っている。

  • Subsystem for Linux

minerd_ubuntu.PNG

  • Mingw64

minerd_win.PNG

おまけ

ハッシュレート

i7 6700K では、の計測結果

スレッド数 ハッシュレート
8 Thread 2.3kH/s
4 Thread 3.1kH/s

※4 Thread には affinity 0x55が設定済み

危険なファイル認定

自分でビルドしたのにKasperskyに危険なファイル認定されてしまった。

ソースをざっくり眺めたがぱっと見怪しそうな動きは見られなかったので除外リストいき。(自己責任で)

除外リストに登録する方法

左下の設定 -> 詳細 -> 脅威と除外リストの設定 -> 除外リストの管理