MacにおけるeGPU・iGPUと複数ディスプレイの仕組みを理解する

MacにeGPUを接続してグラフィックスパフォーマンスをアップさせるというのは最近では最早当たり前になってきているが、内蔵GPUとeGPUとの同時使用、及び複数モニターの関係がややこしいので整理してみる。

MacでeGPUと内蔵GPU(iGPU)の外付けディスプレイの同時使用は可能?

画像出典 Apple

例えば僕のeGPU環境はMac mini 2018にThunderbolt 3接続でeGPUを接続し、eGPUからモニターにDisplayPortで接続している。

この時にMac mini本体にもモニターを繋いだ場合、内蔵GPUとeGPUを同時に使用し2台のモニターをそれぞれ内蔵GPUとeGPUで駆動させることはできるのか?という疑問が湧いてくる。

eGPU関係の記事を扱っていながら、今までこのような条件下のテストをせず申し訳ない限りだが、今回実際にテストをしてみてわかったことをまとめる。

不安定だが可能

実際にeGPUにモニターを繋いだ状態で、更にMac miniにモニターをHDMIで繋いでみたところ、何度か端子を抜き差しする必要はあったもののMac mini本体及びeGPUからそれぞれ2台のモニターに映像を出力することはできた。

この時にGPUの履歴を表示させたところ「外部GPUを優先」のオプションに関わらずMac mini側に繋いだモニターに表示されるアプリケーションにおいては内蔵GPUが使用され、eGPU側に繋いだモニターに表示されるアプリケーションはeGPUが使用されていた。

ただし、この接続は極めて不安定であり、ディスプレイ設定のモニターの台数が最初は4台表示されたり、Finderウィンドウが激しく点滅するなどしたため、macOSにとっては想定外の接続なのだろう。

内蔵GPU出力のモニターは30hzになる

また、この接続の場合、Mac mini側に接続したモニター(4Kモニター)は本来60hzの出力が可能なはずなのにシステムレポートを見てみると30hzに制限されてしまった。

実際にマウスの動作もカクカクである。

なお、これはサブで使用しているMacBook Pro 13 Mid 2019でも同様で、eGPUを接続した状態でMac本体側にディスプレイを接続した場合は30hzになってしまう。

恐らくだがMac mini及びMBP 13 Mid 2019でモニターが30hzになるのは、Macが既にThunderbolt 3でeGPUに接続されているため、4Kモニターを繋ぐとレーン数の関係でHDMIやUSB-C(DisplayPort/HDMI Alt)側の帯域が足りなくなるのだと思われる。

eGPU側にはモニターが接続されていない表示になる

更にeGPU側の表示をシステムレポートで見たみたところ、eGPUからも映像が出力されているはずなのにモニターや解像度の情報は一切表示されなくなってしまった。

Appleのデベロッパー向けドキュメントで理解を深める

Appleのデベロッパー向けサイトでは英語ではあるものの内蔵GPU・eGPU・マルチモニタ接続の情報が載っている。

ここではAppleデベロッパーページを参考に内蔵GPU・eGPU・マルチモニタ接続の情報を整理してみる。

内蔵GPUと内蔵ディスプレイ

画像出典 Apple

当たり前だがMacBookなどの内蔵GPUと内蔵ディスプレイにおいては内蔵GPUは常に内蔵ディスプレイを担当する。

内蔵GPU・ディスクリートGPUと内蔵ディスプレイ

画像出典 Apple

内蔵GPUとディスクリートGPUを搭載するMacBook Pro 16インチモデルなどにおいても、どちらのGPUであっても内蔵ディスプレイを担当することができる。

一つまたは複数の外付けディスプレイ

画像出典 Apple

内蔵GPUとディスクリートGPUを搭載するMacBook Pro 16インチモデルなどは外付けモニターは常にディスクリートGPUが担当する。

複数のeGPU

画像出典 Apple

一つのMacにeGPUを複数接続することは可能であるが、eGPUはMacBookなどの内蔵ディスプレイを担当することはできず、eGPUからの伝送は一度Macの内蔵GPUを経由する。

なお、ここではあくまで映像出力を担当しないということであって、アプリケーションなどのパフォーマンスは「外部GPUを優先」にチェックを付ければ内蔵ディスプレイに表示されているアプリケーションであってもeGPUの恩恵により向上する。

eGPUと外付けディスプレイ

画像出典 Apple

MacにeGPUを接続し、eGPUに外付けモニターを一台繋げた場合(僕のセットアップ環境だ)は外付けディスプレイは常にeGPUが担当し、内蔵GPUの伝送が必要な場合は一度eGPUを経由する。

この場合も前述の項目と同じく「外部GPUを優先」にチェックを付ければ内蔵ディスプレイ側もeGPUによりパフォーマンスが向上する。

複数のeGPUと複数のディスプレイ

画像出典 Apple

複数のeGPUと複数の外付けディスプレイを接続した場合、一部のeGPUに複数の外付けディスプレイを接続することができる。

Mac miniでeGPU・内蔵GPUにそれぞれ外付けディスプレイを接続するのは恐らく想定外

画像出典 Apple

先程のAppleのドキュメントを見てみると「内蔵GPUとeGPUにそれぞれ外付けディスプレイを繋いだ場合」という構成については言及されていない。

また、AppleのeGPU関係のサポートページを見ても内蔵GPUとeGPUの外付けディスプレイの同時使用に言及しているページが全くないため、やはり内蔵GPUとeGPUの同時使用は少なくともMac miniにおいては想定外の行為であると思われる。

MacBookシリーズなどの内蔵ディスプレイを持つMacは内蔵GPUでしか内蔵ディスプレイの映像を出力できないため、eGPUを接続した状態であっても内蔵GPUは内蔵ディスプレイ維持のために使用される。

実際に僕のMacBook Pro 13 Mid 2019においてもeGPUを接続した場合であっても「外部GPUを優先」にチェックをしないとアプリケーションは内蔵GPUを使用することがある。

しかし、Mac miniの場合はそもそも内蔵ディスプレイを持たず、eGPUを接続してそこにモニターを接続した場合、内蔵GPUは映像を出力する必要がなくなるため、いわゆる眠った状態になり、映像出力もGPUによる処理もeGPUに丸投げされる。

Mac miniはeGPUを接続すると「外部GPUを優先」にチェックをしなくても全てのアプリケーションがeGPUにより描画されることを確認しているため、Mac miniでは例外を除いてeGPUを接続すると内蔵GPUは基本的に眠った状態になるのだろう。

この時にMac mini側にモニターを繋ぐと「眠った状態」の内蔵GPUを無理やり動かしている状態になり、動作が不安定になるのだと思われる。

まとめ

まとめと言っておきながら書いている内に混乱してきたが、実際にMac miniの内蔵GPUとeGPUにそれぞれモニターを2台繋げて判明した通り、少なくとも僕の環境では動作は極めて不安定になったため、Mac miniにおける内蔵GPUとeGPUでのモニター2台の同時使用は想定外の行為であり推奨されないと言える。

先ほども書いた通り、仮にMac mini(あるいは他のMac)において内蔵GPUとeGPUでモニター2台を安定して同時使用することが可能であったとしても、内蔵GPU側のモニターが4Kの場合、少なくともMac miniとMBP 13インチでは出力が30hzに制限されるためリフレッシュレートを重視する場合はやめた方が無難なように思う。

僕個人の意見としてはeGPU側に出力端子が複数必要ではあるが「モニターを2台繋ぐのであればMac本体の端子は使用せずにeGPUに2台繋いだ方がいい」と思う。