2016 15" Macbook Pro RP455 + Titan [email protected] (Sonnet Breakaway 550) + macOS 10.13.6 [jiver]
Setup was blissfully easy, thanks to @goalque's automate-eGPU EFI boot method (and all of the good advice at eGPU.io).
Late 2016 15" TB Macbook Pro Touch Bar A1707, 2.7 GHz
Screen: native resolution 2880 x 1800 x 32
MacOS 10.13.6 (17G4015)
NVIDIA Web Driver 3126.96.36.199.40.113
CUDA Toolkit 10.0 (CUDA driver 410.130)
The 650W version is more future-proof but was out of stock at the time. 550W is enough for Titan Xp + charge laptop
I chose the Sonnet over the Razer Core X or Akitio Node using this extraordinary helpful site:
Considerations: Sonnet was historically very Mac-focussed (used their CPU accelerators back in the day), and is used for Apple's own eGPU hardware kit. More objectively it was reputed to be quietest of the bunch. It has not disappointed.
*Apple 0.8m Thunderbolt 3 cable
Apple seems to have the only >0.5m passive cable available. They claim full compatibility with 40 GBps transfer speed, which appears confirmed in the memory bandwidth benchmarks.
Thanks to goalque's EFI boot method, no system modifications were needed (unless, er, you consider the unfortunate need to downgrade from Mojave to High Sierra because NVIDIA drivers are not ready yet, ouch.)
1) Install NVIDIA Web Driver and CUDA support
Helpfully listed at https://www.tonymacx86.com/nvidia-drivers/
Here's some more detail if interested
I used the instructions on the automate-eGPU EFI page, including changing config.plist (MuxSetting --> 1) and pmset (crucial, see below). Below is a reiteration of that page, but with one modification: I found that plugging in the eGPU after login, as instructed, would not properly load CUDA drivers. Instead, I shutdown and plug in the eGPU (which will boot the machine, so make sure the USB boot stick is in).
(Since I have dGPU) modify config.plist as suggested
There is a conflict between the dGPU and eGPU resulting in a black internal screen, and a working, but incredibly slow responding external screen. That caught me the first time I ran it, but it's easily fixed. Save yourself the trouble by first selecting the iGPU:
Go to Terminal.app and type
$ sudo pmset -a gpuswitch 2 #Not sure why this is necessary--switches into 'auto switch' mode, which is the default $ sudo pmset -a gpuswitch 0 #Very much necessary--force only the iGPU to be used
Plug in eGPU (this will trigger a startup)
Hold option key (first time only)
Boot from EFI. Note it should lists 3 GPUs, but says 'no eGPU' -- don't worry about it.
Turn auto-boot on (no need to even hold option down next time)
Boot into MacOS
Performance Information ----------------------- Memory Copy Host Pinned to Device: 1661.97 MiB/s Host Pageable to Device: 1632.56 MiB/s Device to Host Pinned: 2691.47 MiB/s Device to Host Pageable: 2599.75 MiB/s Device to Device: 172.958 GiB/s GPU Core Performance Single-precision Float: 13.565 Tflop/s Double-precision Float: 452.135 Gflop/s 64-bit Integer: 1022.54 Giop/s 32-bit Integer: 4656.89 Giop/s 24-bit Integer: 3502.26 Giop/s Valley (Extreme HD; 1900 x 1080 8xAA fullscreen) Internal Screen: FPS 53; Score: 2205 External Screen: FPS 74; Score: 3086
Note: I am puzzled by the lack of full bandwidth on Host to Device. The original USB C ports on this laptop failed and it had to be repaired. I did not record the 'before' measures, but I think they were full bandwidth.
The speed that counts for my work is CUDA accelerated computation. One example is acceleration of signal processing and linear algebra computation in Matlab.
The Matlab GPU Bench application tests CPU-only and GPU compute times for a variety of basic operations and compares with other leading CUDA cards.
Titan Xp is designed for fast single precision computation, and it did not disappoint, peaking over 12 Teraflops besting Tesla P100 by 40% and the cpu by 35x. It falls short of the same computation in double-precision although holding its own in double precision FFTs. Titan V would be a better option. It' s now offered by the grant program.
Results for data-type 'double'
Results for data-type 'single'