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! 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
    1. /System/Library/Extensions/NVDAStartup.kext/Contents/Info.plist
    2. /System/Library/Extensions/IONDRVSupport.kext/Info.plist
    3. /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. The CFBundleIdentifier section can be seen on line 45, 62 and 79 and their corresponding IOPCITunnelCompatible 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&amp;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.

FurMarkTessMark (X8/X8)GiMark
Internal screen (Intel HD 5100) - score69868631420
Internal screen (Intel HD 5100) - fps1111423
External monitor (NVIDIA GTX 760) - score5313747936734
External monitor (NVIDIA GTX 760) - fps881247112
Improvement761%1089%474%

Limitations

  1. 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.
  2. Only unplug the thunderbolt cable when the computer is off, else a kernel panic will occur.
  3. 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

Enjoyed this Content?

Help keep it free by sending a donation or purchase something using my affiliate links. You can also subscribe to various site feeds to get notified of new posts, follow me on social media, and more.

8 Comments

Skyler Truax

Hey, so I have a similar setup running.

  • Mid 2015 mBPr with AMD
  • GTX Titan
  • Powered Riser Setup
  • Atiko Thunderbolt to PCIe

It runs flawlessly in OSX for working. However windows, when playing games it tends to crash every half hour or so.

Win 8.1 pro

Have you had better luck?

Poul Serek

Hi Skyler

I have had no problems with my setup, but it might be related to the power supply. Have you tried to stress test the graphics card in OSX using something like http://www.geeks3d.com/gputest? The reason it works in OSX might be because it is not running at maximum load for longer periods.

/Poul

Eddie

Everytime I try to edit the plist in terminal, I go to exit and save but it says Error writing and won’t let me save. Do I need to save the edited plist under a new/different name or am I doing something else wrong?

Poul Serek

Hi Eddie

Are you using the “sudo” command? Can you write exactly the command you are typing to open / edit the file and to save the file?

/Poul

Leave a reply