eGPU with OS X 10.9, NVIDA GPU, PE4L & TB adapter
A while ago I made an external GPU setup described here. Now I have replaced my Lenovo T430s laptop with a MacBook pro 13 retina (late 2013 model) and worked on getting the card to work under both Windows 7, Windows 8.1 and OS X. This post describes how to get the card working in OS X 10.9 (Maverick)
Disclaimer
This post contains links to Amazon where I get a small commission if you purchase anything after clicking on these links - at no extra cost to you! But only if you have explicitly consented to this. I have purchased all the mentioned products myself and I only link to products that I believe are the best for my readers. If you want to help out even more, take a look here.The setup used a Bplus PE4L, Sonnet Echo ExpressCard Pro Thunderbolt adapter and a NVIDIA GTX 760 graphics card. If you have a Thunderbolt enabled device I now recommend the AKiTiO Thunder2 as described in my post here.
Setup
- Should already be installed, else use recovery to reinstall
- Boot into OS X
- Open the terminal
- Edit the following
Info.plist
files using the “sudo nano {path/filename}” command/System/Library/Extensions/NVDAStartup.kext/Contents/Info.plist
/System/Library/Extensions/IONDRVSupport.kext/Info.plist
/System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist
In each of the above files find each section starting with
<key>CFBundleIdentifier</key>
and add
<key>IOPCITunnelCompatible</key> <true/>
just before the corresponding closing
</dict>
of the section. Example of the modified/IONDRVSupport.kext/Info.plist
is shown here. TheCFBundleIdentifier
section can be seen on line 45, 62 and 79 and their correspondingIOPCITunnelCompatible
entries at 57-58, 74-75 and 91-92.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>13A3014</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>IONDRVSupport</string>
<key>CFBundleGetInfoString</key>
<string>2.4, Copyright Apple Computer, Inc. 2000-2012</string>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.IONDRVSupport</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>I/O Kit NDRV Support</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleShortVersionString</key>
<string>2.4</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>2.4</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>5A11344p</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>13A3014</string>
<key>DTSDKName</key>
<string></string>
<key>DTXcode</key>
<string>0500</string>
<key>DTXcodeBuild</key>
<string>5A11344p</string>
<key>IOKitPersonalities</key>
<dict>
<key>1</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.IONDRVSupport</string>
<key>IOClass</key>
<string>IONDRVFramebuffer</string>
<key>IOMatchCategory</key>
<string>IOFramebuffer</string>
<key>IONameMatch</key>
<string>display</string>
<key>IOProbeScore</key>
<integer>20000</integer>
<key>IOProviderClass</key>
<string>IOPCIDevice</string>
<key>IOPCITunnelCompatible</key>
<true/>
</dict>
<key>2</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.IONDRVSupport</string>
<key>IOClass</key>
<string>IONDRVFramebuffer</string>
<key>IOMatchCategory</key>
<string>IOFramebuffer</string>
<key>IONameMatch</key>
<string>display</string>
<key>IOProbeScore</key>
<integer>20000</integer>
<key>IOProviderClass</key>
<string>IOPlatformDevice</string>
<key>IOPCITunnelCompatible</key>
<true/>
</dict>
<key>3</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.iokit.IONDRVSupport</string>
<key>IOClass</key>
<string>IONDRVFramebuffer</string>
<key>IOMatchCategory</key>
<string>IOFramebuffer</string>
<key>IOPCIClassMatch</key>
<string>0x03000000&0xff000000</string>
<key>IOProbeScore</key>
<integer>0</integer>
<key>IOProviderClass</key>
<string>IOPCIDevice</string>
<key>IOPCITunnelCompatible</key>
<true/>
</dict>
</dict>
<key>OSBundleCompatibleVersion</key>
<string>1.0.0b1</string>
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOGraphicsFamily</key>
<string>1.1</string>
<key>com.apple.iokit.IOPCIFamily</key>
<string>1.1</string>
<key>com.apple.kpi.iokit</key>
<string>8.0.0</string>
<key>com.apple.kpi.libkern</key>
<string>8.0.0</string>
<key>com.apple.kpi.mach</key>
<string>8.0.0</string>
<key>com.apple.kpi.unsupported</key>
<string>8.0.0</string>
</dict>
<key>OSBundleRequired</key>
<string>Safe Boot</string>
</dict>
</plist>
- Type “sudo touch /System/Library/Extensions”
- Wait a few minutes until the extension cache is rebuild. You can check the activity monitor the kext cache rebuild process, sort after CPU usage
- Shutdown the laptop
- Plug in eGPU setup with SW1 set to 1 and SW2 set to 2-3
- Connect the eGPU to an external monitor and make sure the monitor is on
- Boot into OS X
- My GPU is already supported by OS X (NVIDIA GTX 760) so no driver installation needed
- Change from mirroring the display to extending the desktop
- You should now have a working setup, the internal screen is functional as is the external, but only the external screen is accelerated
Performance
I use Geeks3D GpuTest with everything standard settings except resolution which is set to 1440x900 windowed mode.
FurMark | TessMark (X8/X8) | GiMark | |
---|---|---|---|
Internal screen (Intel HD 5100) - score | 698 | 6863 | 1420 |
Internal screen (Intel HD 5100) - fps | 11 | 114 | 23 |
External monitor (NVIDIA GTX 760) - score | 5313 | 74793 | 6734 |
External monitor (NVIDIA GTX 760) - fps | 88 | 1247 | 112 |
Improvement | 761% | 1089% | 474% |
Limitations
- The internal screen is not accelerated, only the external monitor. Using Optimus this should be possible, worked fine on my Lenovo T430s using Windows, I need to investigate this further.
- Only unplug the thunderbolt cable when the computer is off, else a kernel panic will occur.
- Need to power the GPU and laptop off before plugging the eGPU in and the monitor must be connected to the eGPU and powered on
References
- Enable GPU through thunderbolt by editing kext files taken from this post
- Geeks3D GpuTest
Enjoyed this content?
Help keep it free by sending a donation. You can also subscribe to various site feeds to get notified of new posts, follow me on social media, and more.