Oculus revealed some of the secret sauce that enables the older Snapdragon SoC in the Oculus Go to deliver a better mobile VR experience than today’s modern smartphones with their robust VR-optimized processors. The Oculus Go runtime dynamically adjusts the SoC parameters to maintain a constant level of performance while conserving battery power and reducing heat output.
Last fall, Oculus announced the Oculus Go, a $199 standalone VR headset designed to run all the content found on the Oculus Gear VR store. The upcoming device features a Snapdragon 821 SoC (the same one found in the Samsung Galaxy S7), a WQHD (2560x1440) fast-switch LCD screen, and “next-generation” lenses, which are supposed to provide a clearer image with less glare.
Hugo Barra, CEO of Oculus, described the Oculus Go as the “sweet spot” for mass adoption of VR hardware. It’s hard to argue with that idea from a cost perspective, but we wondered if the aging Snapdragon 821 would deliver the compelling experience that Oculus believes it can.
Yesterday, we had our first chance to try the Oculus Go, and from our few short minutes with the device, we’re inclined to agree that Oculus is on to something. Little did we know that the company was in the midst of explaining the secrets behind the Go HMD’s magic to the development community at GDC.
Here’s what we’ve learned
In a panel session at GDC, Remi Palandri, an Engine Interactions Engineer at Oculus, explained how Oculus optimized the Snapdragon 821 for the Go’s form factor and needs. Palandri explained that the slim form factor of a smartphone limits the upper levels of performance that Qualcomm’s chips can output. With a smartphone, engineers must adhere to thermal restrictions, and they must prioritize battery life to maintain all-day usability. Oculus isn’t beholden to such limitations.
Palandri explained that with SoCs, when you increase the clock speed by something like 20%, you could be dealing with as much as 40% additional battery drain, and potentially up to 60% more heat. In a smartphone, those characteristics are unacceptable. With a VR HMD, shorter battery life isn’t the end of the world because it’s unlikely that you’ll be wearing all day. However, you don’t want the headset to overheat, which could cause reduced performance from thermal throttling, and it could become uncomfortably warm to wear on your face.
Palandri said that the Go features a much more robust cooling system than a typical smartphone, which enables Oculus to crank up the clock speed of the CPU and GPU inside the Snapdragon chip. He didn’t go into detail about the performance figures of the Go’s final configuration, and Oculus is tight-lipped about the finer details of the hardware. Oculus didn’t stop with better cooling and higher clock speed, though. The company also wanted to do something about conserving battery life.
Dynamic Performance Adjustments
Oculus has always offered developers a way to optimize their games for more efficient use of the GPU and the CPU. The company enables developers to dial in a performance rating of zero to three, for both the CPU and GPU independently. By setting the CPU and GPU levels, you dictate the minimum clock rate at which the components operate. By default, Oculus sets the performance for both components to two (the clock speed would vary from device to device). Developers can increase the rating if their app needs more oomph, or they can decrease the rating if the CPU and GPU are under-utilized.
Palandri said Oculus determined that most developers are not using this function to their benefit. As such, the company developed a dynamic performance adjustment system for Oculus Go developers, which monitors the GPU and CPU and makes changes to the clock speed to suite the task at hand.
The dynamic performance adjustment system constantly monitors the GPU and CPU to ensure that they’re being used efficiently. When the utilization of the GPU exceeds 95%, the system would automatically overclock that component to avoid dropped frames. Conversely, when the GPU sits idle, the software automatically drops the clock speed of the GPU to conserve power and reduce heat output. (Though it's not quite clear whether or not the company succeeded at keeping heat to a minimum--one of the first things we noticed at GDC 2018 was how hot the Go runs.)
CPU performance is evaluated in a slightly different manor. Instead of overall utilization, which would be low on single threaded processes, Oculus monitors the average utilization, and worst core performance to determine the appropriate clock speed adjustments.
Developers can still set the performance levels for the CPU and GPU, which would prevent the Oculus runtime from lowering the clock speed blow that point. However, that setting would not prevent Oculus from overclocking the components as needed.
Palandri said that the new performance optimizations aren’t just for new games under development. Any game running on an Oculus Go headset would benefit from the same features, which means that existing content should run smoother and more efficiently on the Oculus Go headset. Developers don’t even need to updates their applications to benefit from the dynamic performance optimizations, though, Palandri said that developers could change the code to set the CPU and GPU levels to zero when Oculus Go is present, which would further improve the efficiency of the application.
If you'd like to learn more about the Oculus Go performance optimizations, you can find additional information on Facebook, where Oculus posted Palandri's entire discussion.