Hackintoshでマイニング(本気編)

前回は、寒いから暖を取ろうといういい加減な動機で仮想通貨のマイニングに手を出してみました。 でも性能はイマイチでした。マイナーの数が圧倒的に多くてサポートの手厚いWindowsに性能で負ける結果も仕方ないと思いましたが、残念でした。

そこで今回は本気を出して、性能アップを目指します。

前回のあらすじ

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ドライバは以下から入手できます。

MAC アーカイブ用CUDA ドライバ|NVIDIA

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の方が良い

という結論でした。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です