The short answer appears to be: yes, 12 degrees C (22 degrees F) or more cooler.
I got ahold of a custom-build Macbook Pro that has identical specifications except that it had no discrete graphics adapter. I set it up on the same table in the same room, connected to an identical monitor. I put both of them through the same sequence of operations, using yes > /dev/null &
one or more times to occupy whole processor cores, running WebGL demos, plugging and unplugging monitors, etc. in lockstep. Temperatures, fan speeds, and CPU use were observed regularly using iStat menus, yielding 120 separate observations. Using the R statistical package I fit some models to these data and retained this one for the "left fin stack" temperature:
> summary(fin_fit)
Call:
lm(formula = fin_temp ~ dgpu + ext_disp + cpu_load + gpu_load,
data = heat)
Residuals:
Min 1Q Median 3Q Max
-12.1091 -2.8460 -0.2888 2.5413 12.1540
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 32.8460 0.7066 46.484 < 2e-16 ***
dgpu 12.2631 0.8067 15.202 < 2e-16 ***
ext_disp 2.4160 0.7836 3.083 0.00256 **
cpu_load 3.4386 0.4173 8.240 3.11e-13 ***
gpu_load 14.0506 1.2601 11.151 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.138 on 115 degrees of freedom
Multiple R-squared: 0.821, Adjusted R-squared: 0.8148
F-statistic: 131.9 on 4 and 115 DF, p-value: < 2.2e-16
Interpretation: This model explains about 82% of the temperature variation. The base operating temperature is about 33C, every fully occupied CPU core adds about 3.4C, a fully occupied GPU adds about 14C, each external display attached adds about 2.4C, and using a discrete GPU adds about 12C. All of these variables are very significant in explaining temperature variations, and the model as a whole is quite effective at predicting temperature.
There is an apparent jump of 10 watts or more in power consumption when using the DGPU and an external monitor. This would be coherent with the extra heat, but I did not fit a model for this response variable.
I expect the fin heat model would fit even better if I excluded all observations that happened shortly after a change of state (change in CPU or GPU usage, change in presence of external monitor). There’s some amount of thermal inertia - it takes a minute for the heat sinks to warm up or cool down.
Conclusion: On the stock Macbook with a discrete graphics adapter hard-wired to the external monitor ports, from a temperature perspective attaching an external monitor has greater impact than performing heavy computations. The fans become audible frequently under load, and the keyboard can get uncomfortably hot. On the other hand, when using the model with no discrete GPU, the fans remain quieter and temperatures more moderate, as attaching an external monitor yields only a slight increase in base temperature.
Other observations: the dual-GPU model will also enter and remain stuck in discrete GPU mode when it doesn't really need high performance graphics, which can discharge the battery very quickly and cause unnecessary heat. At one point in my testing after unplugging the external monitor, it became stuck in DGPU mode. The activity monitor reported that this was due to the Terminal application requiring accelerated graphics (!).
Coming out of sleep with a monitor attached or switching on an already-attached monitor, the monitor often seems not to be detected or used by the OS. GPU switching seems to add a lot of complexity and be susceptible to glitches.
Best Answer
Power Management is the culprit.
You should use the pmset command to see what power management has been doing. In Terminal, the basic command is
But that gives you all the power management events since last boot time. You can reduce this with judicious use of grep. I have used both of these (with similar results):
Power Management has about 20 settings that can be changed by an admin user. To view the settings (they will be different when on battery and power):
For my issue, which looks similar to yours, I changed the tcpkeepalive setting. With this enabled (value = 1), the MacBook will frequently wake up due to network events.
To change turn off tcpkeepalive use the Terminal command:
The -b is to set for when running on battery.
I have also tweaked a few other settings like standbydelayhigh, but this is purely tweaking.
This is based on my experience with a MacBook which would lose too much (I thought) battery whilst closed overnight.
You may find these two links helpful: How to Fix macOS Mojave Battery Draining Issue and man pmset.
Note that I have not changed hibernatemode from the default value of 3. Many (including the linked article) discuss changing it to 25 which I do not recommend with recent (last 4 years) hardware and macOS version.