2014/2015 MBP 15" 2x TB2 controllers?
Now that the 2014 and 2015 models are getting long in tooth, they are quite affordable nowadays but still powerful enough for most tasks, except GPU power. These models have 2x TB2 ports that are "20Gbps each". I thought I read this somewhere but can't find it or confirm, but do they have 2 controllers, 1 for each port? If I plugged 2x eGPU's would each one get 20Gbps each, or would they share a 20Gbps connection and get 10Gbps each. I want to say they each have their own 20Gbps for total of 40Gbps put together, but maybe I imagined that...
Sorry if this was asked and answered!
I can double-check later this week but I recall the two TB2 ports on these MBPs share one Thunderbolt Bus/Controller. Each port is capable of 20Gbps but the throughput on the single controller is also 20Gbps. Therefore when you have two eGPU going simultaneously for example, 20Gbps is max bandwidth.
PCIe 2.0 x4 is 16 Gb/s = 2000 MB/s.
Thunderbolt 2 is 20 Gb/s. To use the full 20 Gb/s requires including DisplayPort signals. Thunderbolt 2 can transport two DisplayPort 1.2 signals over a single cable, but only one of them can use full DisplayPort bandwidth (17.28 Gbps each).
My MacBook Pro (Retina, 15-inch, Mid 2015) has one Thunderbolt 2 controller with two Thunderbolt 2 ports. With a Samsung 950 Pro 512 MB NVMe SSD, I can get 1070/1309 MB/s write/read. A couple 960 Pro 1 TB had lower write speeds at 850 or 594 MB/s. I could not get better performance from a raid (the write speed can increase using the 950+960 up to 1200 MB/s).
The bandwidth table at https://egpu.io/builds/#perf shows 1345.90 MB/s for Thunderbolt 2. The table shows slightly better results for Thunderbolt 3 running at PCIe 3.0 x2 (15.75 Gbps) and even more better results for Thunderbolt 3 running on OPI 2GT/s (PCIe 2.0 x4 = 16 Gbps).
So each of your cards can get 1345.90 MB/s, but not at the same time.
You can test Thunderbolt controllers at slower PCIe link speeds using a script that uses pciutils commands to change the link width.
Create a fast.sh file with the following contents and add the execute permission bit:
speed=$1 rootport=$2 linkstatus=$(sudo setpci -s $rootport CAP_EXP+12.w); echo '# Before: PCIe' $(( 0x$linkstatus & 15)).0 x$(( 0x$linkstatus >> 4 & 31)) sudo setpci -s $rootport CAP_EXP+30.w=$speed:F # Set Link Speed sudo setpci -s $rootport CAP_EXP+10.w=20:20 # Start Retrain linkstatus=$(sudo setpci -s $rootport CAP_EXP+12.w); echo '# After: PCIe' $(( 0x$linkstatus & 15)).0 x$(( 0x$linkstatus >> 4 & 31))
Then execute it with sudo:
sudo fast.sh 2 00:01.0
Change 2 to the speed you want (1:PCIe 1.0, 2:PCIe 2.0, 3:PCIe 3.0). Change 00:01.0 to the root port that connects to the upstream port of the Thunderbolt controller.