With macOS 10.13.4’s support for external graphics, Apple is officially allowing users to supplement their Macs with an eGPU like the Sonnet eGFX Breakaway Box. Unfortunately, the ability to render apps via an eGPU while being displayed on your Mac’s built-in screen, possible via developer app updates, is quite rare.
A recently released script called set-eGPU, from eGPU.io alumnus @mac_editor, gives users more control over GPU rendering. The script overrides plist values assigned to GPUSelectionPolicy, available in macOS 10.13.4 and later, for installed apps dynamically.
In other words, this script uses tools already baked into the latest versions of macOS to give the end user more control over eGPU usage. A primary benefit is that it allows an external GPU to render installed applications and present them on your Mac’s built-in display. With this script you can now force eGPU rendering for many of your installed apps without an external display.
As you might expect, one of the first apps that I tested was Final Cut Pro X, and the results are encouraging. Watch our hands-on video walkthrough for the details.
First and foremost, set-eGPU is an open source script by mayankk2308, so you’re free to peruse the code to see exactly what it’s doing. Secondly, the script is simple, and you don’t have to do anything weird like disabling SIP in order to use it.
All testing was performed with my base model 2017 13-inch MacBook Pro.
Step 1: The first thing you’ll need to do is connect an eGPU to your Thunderbolt 3-enabled Mac running macOS 10.13.4 or later. While set-eGPU works on macOS 10.14 Mojave, users may encounter some bugs, which is to be expected considering Mojave is in beta.
Step 2: Open a Terminal window via Applications → Utilities → Terminal.
Step 3: Copy and paste the following into the Terminal to install the script:
curl -s "https://api.github.com/repos/mayankk2308/set-egpu/releases/latest" | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/1/' | xargs curl -L -s -0 > set-eGPU.sh && chmod +x set-eGPU.sh && ./set-eGPU.sh && rm set-eGPU.sh
If you prefer, you can always download the script and install it manually.
Step 4: Press Return on your keyboard and enter your administrator password.
Note that the installation script is a one time only thing, so you will only need to enter it and input your administrator password for this step alone.
To run set-eGPU, simply type set-eGPU in a Terminal window and press Return on your keyboard. From there you will be presented with an easy-to-use interface for selecting the various options related to GPU rendering.
The first option is a global option, which allows you to set all installed applications in /Applications to prefer eGPU rendering.
The second option, one that I primarily use, allows you to target specific applications to prefer eGPU. After selecting option 2, you’ll be prompted to enter the exact name of the application (as shown in Launchpad) that you wish to accelerate.
The third option allows users to confirm the status of a particular application on your Mac. Again, you’ll need to enter the exact name of the application.
The final two options allow you to disable global app rendering…
…or disable eGPU rendering on an app-by-app basis.
Alternatively, advanced users can bypass the menu interface and execute direct command line options. For example, the -ss option allows you to quickly specify an app to prefer eGPU acceleration.
For a full list of eligible options, check the Options section of mayankk2308’s set-eGPU GitHub page. If you need support with your eGPU, I recommend the fine community over at eGPU.io, which is a staple among external GPU enthusiasts. They have a thread dedicated to set-eGPU discussion. There, you’ll also learn how to target certain applications via bundle identifier, useful for apps that are nested within folders in /Applications.
macOS has a built-in tool for monitoring both internal and external GPU usage.
Step 1: Open Activity Monitor via Applications → Utilities → Activity Monitor.
Step 2: In the menu bar select Windows → GPU History or use the keyboard shortcut ⌘+4.
Step 3: In the menu bar select View → Update Frequency → Very often (1 sec).
How much of a difference can an eGPU setup make? I’ve found that with the help of set-eGPU, it can make quite a noticeable difference, and all of these were performed using my base-model 2017 13-inch MacBook Pro without an external display!
The first benchmark using Unigine Valley and Heaven shows a noticeable improvement in FPS. It’s not quite as good as you’d get from an external display setup, but it’s still a sizable improvement over the integrated GPU.
Note: to get Heaven and Valley working with the internal display, I had to connect a DisplayPort display emulator (headless dummy adapter) to one of the DisplayPort connections on my GPU. This was not necessary for other apps I tested like Final Cut Pro X.
The next benchmark showcases the BruceX 5K export that’s popular among Final Cut Pro X users. This effects-heavy 5K project taxes the GPU. You can easily see the difference between integrated graphics, and external graphics.
Thanks to set-eGPU, even real world projects stand to reap serious benefits from an eGPU setup in Final Cut Pro X. Export times for both single pass and multi-pass exports were basically cut in half when using my Vega 64-equipped eGPU.
There are several eGPU boxes on the market that work well with the Mac, though not all are officially endorsed by Apple. My favorite eGPU at the moment is the Razer Core X, which I explained in our hands-on review.
Yet, Sonnet is also a strong option for an eGPU chassis, and they are officially endorsed in Apple’s eGPU documentation. Sonnet’s has some very affordable lower end eGPU models, which will do a great job when paired with cards like the AMD RX 580. However, if you’re looking for a unit that can handle the latest cards and beyond, then Sonnet’s top of the line eGFX Breakaway Box 650 (currently out of stock) and Razer’s Core X are both great options.
Only certain AMD cards are officially supported for external GPUs in macOS. All of them should yield tangible differences in performance.
If you’re looking for an all-in-one solution that’s relatively portable, then be sure to check out GigaByte’s RX 580 Gaming Box. We reviewed it a few months ago, and were impressed by its size to power ratio.
The downside of not using an external display with your eGPU setup is that only an internal GPU can drive an internal display. This means that draw data will need to be negotiated between the eGPU and iGPU, adding additional overhead. Despite the performance hit of copying draw data from the external GPU back to the internal GPU driving the internal display, significant performance gains can still be yielded.
I would love to see a native option within macOS that allows users to easily target specific applications to render with an eGPU — something like a switch within each app’s menu bar, or even a global list of apps within the SafeEjectGPU button that appears after connecting an eGPU.
Have you used an eGPU with your Mac yet? Does set-eGPU change your thoughts about external graphics? Sound off in the comments below with your feedback.