SAPPHIRE NITRO+ RADEON RX 580を使う (10.13.3以前)

ご案内:この記事は10.13.2および10.13.3を対象に書かれたものです。10.13.4では、Radeon搭載のThunderbolt 3接続外部GPUボックスが正式サポートされたことにより、ずっと簡単になりました。この記事の「方法1」「方法2」「方法3」「モデル名の修正」は不要になりました。改訂版は以下です。(2018/4/3)

Radeon RX 580を使ってみました。簡単で性能も良いです。

Hackintoshのためのグラフィックスカード選び方に関して上の記事で紹介しました。AMDのデスクトップ向けグラフィックスカードは、最近のmacOSのバージョン(10.12.6以降) で互換性が上がり、使いやすくなってきていました。また、最近のCloverではRadeonのイニシャライズに手を加える機能が搭載されて、パッチやkextを使用せずに使えるようになりました。RX 580の供給と価格も、マイニング騒ぎが収束してきたのか落ち着いてきたように思います。今回試したのは、SAPPHIRE NITRO+ RADEON RX 580です。Amazonでは他のブランドと比べてSapphireのRX 580 8Gが最安でした。SapphireはAppleが販売しているVR開発者用キットであるExternal Graphics Development Kit に搭載されているブランドなので、安心感があります。

NVIDIAから乗り換え

今まではNvidia Geforceを使っていました。大昔はAMDを使っていましたが、macOSとの互換性が悪くなって、最近は、ずっとNvidiaでした。ということで、NVIDIAが正常に動いているmacOS 10.13.1 からの引越しです。

まずはNVIDIAのために入れていたWebドライバやkextやconfig.plistの設定を外します。/Library/Extensions/に導入されたWebドライバをアンインストールします。iMacのretinaディスプレイの回路を回避してブラックスクリーン発生を防いでくれる機能があるNvidiaGraphicsFixup.kextを入れていたのですが、これも外します。config.plistでNvidiaWebドライバを有効にしていたのですが、これもfalseにしました。

        <key>SystemParameters</key>
        <dict>
                <key>NvidiaWeb</key>
                <false/>
        </dict>

RADEONを動かす方法

ここでシステム終了して、NVIDIAのグラフィックスカードを外し、Radeon RX 580に差し替えます。でもこのまま起動しても画面は出ません。画面が出ないだけで、macOSは起動していますので、sshサーバや画面共有サーバをonにして、他のマシンからアクセスできるようにしておくと良いでしょう。

画面が出ない問題は、Radeon RX 580がプライマリの状態では、グラフィックスカードのBIOSが初期化を正しく実行しないために引き起こされているようです。macOSが正しく初期化しようとするタイミングでは、すでに初期化が終了しているため、macOSによる初期化が実行されないらしいです。これを回避するために、いくつかの方法が知られています。

  • Radeonカードをセカンダリで起動する。例えば内蔵GPUをプライマリにする。マルチスクリーン環境が前提。
  • kextやDSDTにパッチを当てて初期化をさせないようにする。
  • これに相当する作業をWhateverGreen.kextとLilu.kextの組み合わせで実施する。
  • CloverのRadeonDeInit機能で初期化を阻止する

ここでは、以下のように、1番目、3番目、4番目の方法を紹介します。

  • 方法1: 内蔵GPUをプライマリにする
  • 方法2: WhateverGreen.kextを使う
  • 方法3: CloverのRadeonDeInit機能を使う

方法3がおすすめです。

方法1: 内蔵GPUをプライマリにする

内蔵GPUをプライマリグラフィックスに、Radeon RX 580をセカンダリーグラフィックスに設定します。Radeonグラフィックスチップを搭載した実機や、Apple External Graphics Development Kitを接続した実機と同様の、一番実機に近い設定です。

これを行うためには、BIOS/UEFI設定で内蔵GPUをプライマリに設定します。

この設定をして、RX 580のみをディスプレイに接続すると、起動時のBIOS/UEFI画面やCloverの起動画面は表示されず、ディスプレイが真っ暗なままです。ただ、macOSのログイン画面まで来ると、ディスプレイに表示されます。

起動画面が表示されないので、ある意味、本物のMacのような感じはしますが、BIOSやCloverの操作はできません。通常はこのまま使って、必要な時に、マザーボードのディスプレイ端子にディスプレイを接続するのも良いかと思います。マルチディスプレイ環境や、ディスプレイに複数入力端子があるなら、RX 580とマザーボードの両方に接続しておけば、設定変更も容易になります。

BIOSの設定だけでRadeonが使えるようになりますが、ちょっと不自由な方法です。

方法2: WhateverGreen.kextを使う

WhateverGreen.kextはRadeoneグラフィックスカードをプライマリグラフィックスとして使うためのパッチを当ててくれるkextです。Lilu.kextと一緒に使います。両方を/CLOVER/kextsのOtherもしくは該当するバージョンのフォルダに一緒に入れます。これだけでRadeon RX 580が使用できるようになります。

方法3: CloverのRadeonDeInit機能を使う

もう一つの方法は、Cloverが提供しているRadeonDeInitの機能を使う方法です。この機能は、Clover 4296あたりからサポートされたばかりの新機能で、kext不要です。今後もClover開発者によりメンテナンスされることを考えると安心です。Radeonカードをサポートする機能を作り込むあたりに、Clover開発者の人たちのRadeonへの愛が感じられなくもないです。

この機能を設定しないで起動してしまい、Radeonからの画面が出なくなってしまっても、Cloverの起動画面からClover Boot Optionsを選ぶことで対処できます。この中から、起動画面からGraphics Injectorを選びます。するとこの中に、DeInitという項目があります。これがRadeonの初期化を無効にするオプションです。これにチェックマークを入れます。

これだけの操作で、Radeon RX 580は無事起動します。

config.plistに<key>RadeonDeInit</key>キーを追加して、これを<true/>にしておけば、次回の起動から、DeInitの項目を選択した状態になります。

        <key>Graphics</key>
        <dict>
                <key>Inject</key>
                <dict>
                        <key>ATI</key>
                        <false/>
                        <key>Intel</key>
                        <true/>
                        <key>NVidia</key>
                        <false/>
                </dict>
                <key>RadeonDeInit</key>
                <true/>
        </dict>

 動作を確認

上で説明した3つの方法を全部試して見ました。どれも問題なく動きましたので、一番シンプルなRadeonDeInitを使う方法で動かすことにしました。

「システム情報」でチェックしてみると、正しく認識されているようです。Metalにも対応しています。Geekbench 4でのOpenCL Scoreは145000前後でした。他でも報告されている程度の妥当な成績なので、正しく設定できていると思います。

なお、しばらく使用していると性能が低下して、ベンチマークスコアが50000くらいになってしまうことがありました。色々試して見たところ、Intel CPU内蔵GPUをマザーボードの設定で無効にしていると性能低下が発生するようです。内蔵GPUはセカンダリーに設定して使用しない場合でも、有効にしておくのが良いようです。

一方、SafariでYoutubeなどの動画を再生すると、再生がカクカクして滞ったり、場合によってはハングすることが発生しました。Google Chromeでは問題が出ません。以前、Intel HD Graphicsを使って同様な不具合が発生した経験があり、その時は、IntelGraphicsFixup.kextとLilu.kextの組み合わせで解消しました。今回も、これで改善しました。ただし、IntelGraphicsFixup.kextとLilu.kextは最新版を使うのが良いです。古いバージョンだと改善しません。この不具合は、CPU内蔵GPUを無効にしても、同様に解決しますが、上記で述べたような性能低下が発生します。

ということで、正しく動作させるために

  • Intel CPU内蔵GPUは有効にしておく
  • IntelGraphicsFixup.kextを使う

のが良いようです。

モデル名の修正

「システム情報」や「このMacについて」を見て、ちょっとだけ気になるところがあります。モデル名が実際のカードと違うことです。例えば、RadeonDeInitを使った場合、AMD R9 xxxとなりました。他の方法の場合や、別のブランドのRX 580では別のモデル名になることもあるようです。AppleのExternal Graphics Development Kit に搭載されているのと同じSAPPHIRE PULSE RADEON RX 580を使えば、Radeon RX 580という表示になるという情報もあります。

でも、これは見た目だけの問題で、気にしなければどうで良いことのようです。どうしても直したかったら、担当しているドライバにパッチを当てます。以下でも紹介した手法でパッチを当てます。

AMD R9 xxxを担当しているドライバは、AMD9500Controller.kextで、/System/Library/Extensionsにあります。kextの本体は、/System/Library/Extensions/AMD9500Controller.kext/Contents/MacOS/AMD9500Controllerで、これをhexdump -Cすると確かにAMD R9 xxxという文字列が見つかります。これを望みの文字列に書き換えれば良いわけです。AMD R9 xxxという文字列は、Base64変換するとQU1EIFI5IHh4eA==です。これをAMD RX 580に書き換えたかったら、そのBase64に相当するQU1EIFJYIDU4MA==に書き換えるよう、config.plistのKextsToPatchセクションに書き込みます。例えば、以下のようになります。

                <key>KextsToPatch</key>
                <array>
                <dict>
                        <key>Comment</key>
                        <string>Rename AMD R9 xxx</string>
                        <key>Find</key>
                        <data>QU1EIFI5IHh4eA==</data>
                        <key>Name</key>
                        <string>AMD9500Controller</string>
                        <key>Replace</key>
                        <data>QU1EIFJYIDU4MA==</data>
                </dict>
                </array>

ちなみに文字列をBase64へ変換するには、ターミナルで次のようにすれば良いです。

$ echo -n "AMD R9 xxx" | base64
QU1EIFI5IHh4eA==
$ echo -n "AMD RX 580" | base64
QU1EIFJYIDU4MA==

これでモデル名がそれっぽく表示されるようになりました。

おまけ:現行macOSがサポートするAMDグラフィックスカード

Sonnetが販売しているThunderbolt接続外付けGPUユニットのマニュアルによると、macOS 10.13.2でSonnetのユニットに内蔵できるグラフィックスカードは、Radeon RX 470, 480, 570, 580, Vega 56, Vega 64およびAMD WX9100だそうです。外付けGPUとして使えるということは、HackintoshのPCIeスロットに接続してセカンダリーGPUとして使えるということで、また、この記事で紹介したようにCloverの設定でプライマリGPUとして使えると思われます。

返信を残す

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