前回は、寒いから暖を取ろうといういい加減な動機で仮想通貨のマイニングに手を出してみました。 でも性能はイマイチでした。マイナーの数が圧倒的に多くてサポートの手厚いWindowsに性能で負ける結果も仕方ないと思いましたが、残念でした。
そこで今回は本気を出して、性能アップを目指します。
Table of Contents
前回のあらすじ
macOS (Darwin) をサポートしてくれているGPU採掘ソフトウェアは、どうやらethminerしかないようです。そこで、このサイト
からDarwin用にコンパイルされたethminerをダウンロードして、Ethereumを採掘してみました。その結果、RX 580を使った場合、macOSで4.3MH/s (メガハッシュ毎秒) でした。その後、同じハードウェアでWindowsを起動し、ethminerを使ってみたところ16MH/sでした。
NVIDIAでも試してみた
NVIDIAのGeForce GTX 1080Tiでethminerを試す機会がありました。思いのほか性能が出なくて、Ethereumの採掘がmacOSでもWindowsでもどちらも1.5MH/sくらいでした。検索してみると、本当は32MH/sくらいは出るものらしいです。
Windowsの世界には、もっと色々なツールがあるようなので、そういうのを使わないと性能が上がらないのかと思い、しばらくは放置していました。
少し気になっていたのは、ethminerでOpenCLモードを使っていたことです。OpenCLはアップル社が提唱した並列コンピューティングのためのフレームワークで、AMDとNVIDIAの両方のグラフィックスカードでサポートされています。一方で、CUDAはNVIDIAが提唱する並列コンピューティング機能です。なので、NVIDIAをCUDAで使えばもっと性能が上がる可能性があります。NVIDIAでCUDAを使用するには、NVIDIAのWeb driverとは別に、CUDAのドライバもインストールする必要があります。CUDAドライバは以下から入手できます。
etherminerではコマンドオプション (-Gもしくは-U) の指定で、OpenCLとCUDAを切り替えて利用できることになっています。例えば、
./ethminer -G -S eth.pool.minergate.com:xxxxx -O xxxx@xxxx.com
のように-GオプションでOpenCLを使います。ここを-UにするとCUDAを使うことになっています。しかし、上記のサイトで配布されているコンパイル済みバイナリーで-Uオプションを使うと、
./ethminer -U -S eth.pool.minergate.com:xxxxx -O xxxx@xxxx.com CUDA support disabled. Configure project build with -DETHASHCUDA=ON
というメッセージが出て動作しません。どうやら、配布されているバイナリーは、CUDAサポートをOFFにしてコンパイルされているようです。ソースを入手してコンパイルし直す必要があります。
ethminerをコンパイルする
そこで、ethminerのソースからコンパイルしてみました。コンパイルするときにCUDAサポートをONにすれば良いのです。上記のサイトからソースコード一式をダウンロードすることができます。実はOpenCLだけをサポートするコンパイルは割と簡単です。OpenCLは、多分Appleが標準でサポートしているためだと思います。でもCUDAは、NVIDIAから開発キットをダウンロードする必要がありました。やった手順を以下に書いていきます。
Xcode.appをインストールする
macOSでコンパイルするならXcode.appは必須です。App Storeから無料で購入してインストールします。
Xcode Command Line Toolsをインストールする
ターミナルからの操作でXcodeの開発ツールを利用するためのツールを入手します。この手順は、Xcodeのバージョンごとに変わっているようで、ネット上の情報も混乱しています。昔は手作業でインストールしていたのですが、こちらに書いてあるように、今は最初から入っているようです。この手順で確認してください。
Mac での Xcode コマンド ライン ツールのインストール – RAD Studio
でも、なんかそれだけではダメだったようです。色々やっているうちに、App StoreからCommand Line Toolsの最新版を取り寄せることになりました。
また、ターミナルから、
xcode-select --install
をタイプして、Command line developer toolsというののインストールダイアログを表示させて、インストールする必要がありました。これをやらないと、コンパイル中に、string.hファイルが見つからないと言われました。
CUDA Toolkitをインストールする
このページからCUDA Toolkitをダウンロードします。サイズは1.5GBくらいあります。
CUDA Toolkit 9.1 Download | NVIDIA Developer
ダウンロードしたイメージの中にあるインストーラを起動します。
インストールするパッケージを選びます。NVIDIAの通常のドライバ配布サイトでは、おそらくこの1番目のCUDA Driverが配布されているだけだと思います。今回は、2番目のToolkitが必要になります。3番目のSamplesは不要ですが、サイズも小さいので、全部入れてみました。
この作業でインストールされるライブラリ、ヘッダファイル、サンプルなどは、
/Developer/NVIDIA/CUDA-9.1
の場所に保存されるようです。コンパイルなどで必要と思われるパスは自動的に張ってくれているようで、特に設定する必要はなかったです。
Homebrewをインストールする
HomebrewはmacOS用のパッケージマネージャの一つです。UNIX系の色々なコマンド、ツール、アプリケーションをインストールしてくれる便利なツールです。下のページに書いていある一行をターミナルにコピペして実行するとインストールできます。
macOSのパッケージマネージャとしては、他にmacportsが有名ですが、Homebrewの方がシンプルで高速で便利だと思います。
なぜHomebrewが必要かというと、この後で使用するcmakeというコマンドを使えるようにするためです。今回はそれだけのためにHomebrewをインストールするのですが、将来も使うと思いますので、入れておいて損はないです。
cmakeをインストールする
Homebrewがインストールできたら、ターミナルから、
brew install cmake
とタイプします。これでcmakeコマンドが使用できるようになります。
ethminerのソースを入手する
すでに紹介したサイトですが、随分と上の方に行ってしまったので、再掲します。このサイトからソースコード一式をダウンロードします。
これでダウンロードしたethminer-0.13.0というような名前のフォルダに、必要なファイル一式が入っています。
cmakeする
ターミナルからcdコマンドで、ダウンロードしたソースコードフォルダに移動します。そのフォルダには、CMakeList.txtという設定ファイルがあるはずです。このファイルにコンパイルやリンクの設定やオプションが書かれています。
CMakeList.txtをテキストエディタで開くと、
option(ETHASHCL "Build with OpenCL mining" ON) option(ETHASHCUDA "Build with CUDA mining" OFF)
という記述があります。これでOpenCLとCUDAのサポートを指定しています。ここでわかるように、配布されている状態ではCUDAがOFFになっています。そこで、
option(ETHASHCL "Build with OpenCL mining" ON) option(ETHASHCUDA "Build with CUDA mining" ON)
このように、OpenCLもCUDAも両方ともONになるように書き換えます。(CUDAだけをONにして、OpenCLをOFFにしてももちろん良いと思います。)次に、以下のコマンドでcmakeします。
cmake .
cmakeのあとは、空白+ピリオドです。これでcmakeが、カレントディレクトリの設定を使って、Makefileを作ってくれます。
makeする
cmakeはmakeという名前がついていますがMakefileを作ってくれるだけでコンパイルやリンクはしません。そこで
make
とタイプして、makeします。エラーが出ずに、コンパイル、リンクが進めば、ethminerというフォルダの中に、ethminerというファイルができています。これが完成したアプリケーションです。
CUDAの結果は?
こうして作成したethminerで使用可能になった-Uオプションを使って、まずはグラフィックスカードの状況を確認してみます。
./ethminer -U --list-devices Listing CUDA devices. FORMAT: [deviceID] deviceName [0] GeForce GTX 1080 Ti Compute version: 6.1 cudaDeviceProp::totalGlobalMem: 11810832384 Pci: 0000:01:00
グラフィックスカードがCUDAデバイスとして認識されているようです。そこでいよいよ、以下のようにCUDAを指定してEthereumを採掘してみました。
./ethminer -U -S eth.pool.minergate.com:xxxxx -O xxxx@xxxx.com
今回は、エラーを出さずに、採掘を開始してくれました。そして、なんと32MH/sのハッシュレートを達成しました!ということでめでたくWindows並みの性能が得られるようになりました。
以上、HackintoshでEthereumを採掘する場合、
- NVIDIAをCUDAで使えばOpenCLの20倍の採掘性能が得られる
- その結果macOSでもWindows並みの採掘性能が得られる
- macOSで採掘するならAMDよりNVIDIAの方が良い
という結論でした。