4

My game must stay at 75fps to be playable (I'm developing for the Oculus Rift) and I'm optimizing with that hardware in mind.

My mid-range Nvidia GTX 650 Ti struggles a little with some Rift demos, but most do OK at medium-low graphics settings. I believe it's a reasonable optimization target if I want to enable more people to play my game.

Now, I've acquired a better-performing GTX 970, but I'd like to still optimize for older hardware. I don't want to be spoiled by my current better performance and develop something that could run only on high-end cards. In a few days, I won't have my old card available to me anymore.

While developing, how can I test if my game still runs at acceptable frame rate on older GPUs?


What I have in mind is to benchmark my GTX 650 now with some software, then underclock my GTX 970 until I get to the older card benchmark score. Is that a good approach? Would it effectively have the same performance?

If yes, what about memory and shader clocks? How can I objectively benchmark them separately?

(If relevant, I'm using Unity and Unreal Engine 4.)

Anko
  • 13,393
  • 10
  • 54
  • 82
NeoZero
  • 41
  • 2
  • profile it, then profile it again, and again... – OMGtechy Dec 10 '14 at 21:51
  • 1
    The thing is, while profiling it, I could get satisfactory results for my GTX 970, and that could not be the case for a GTX 650 for example. – NeoZero Dec 10 '14 at 22:06
  • So profile on a GTX 650; you say you already have one. – jhocking Dec 10 '14 at 22:15
  • @jhocking Can you write an answer to explain how to set this up in a way which allows to easily do that while still being able to use the GTX970 for other applications and doesn't require buying a second PC? – Philipp Dec 10 '14 at 22:17
  • @jhocking Yes, but I'm selling it to help to pay for the expensive GTX 970. Also, keeping on exchanging both cards so many times would slow development, and wouldn't be very good for them and for my motherboard. – NeoZero Dec 10 '14 at 22:25
  • @NeoZero even then, you can find the bottlenecks and improve on them. – OMGtechy Dec 10 '14 at 22:28
  • tsk tsk if you're getting satisfactory results then why would you spend time optimizing it, haven't you heard http://c2.com/cgi/wiki?PrematureOptimization – jhocking Dec 10 '14 at 22:33
  • @jhocking As I said, that would be satisfactory results for an GTX 970. I'm aiming to get satisfactory results for an older GTX 650, while only having access to a way better card for profiling. That's not a case of premature optimization. – NeoZero Dec 10 '14 at 22:38
  • You won't be able to say for sure how fast something will be on hardware you haven't got. Also, profiling isn't the same as "does it run fast enough". A proper profiler will tell you where the time is taken. I'd estimate the difference in performance between the two target cards (while you still have them), the use your profiler to optimise hot spots until you're estimate is significantly above the target. – Jez Dec 10 '14 at 22:59
  • I was responding to OMGtechy's comment; he was saying to optimize performance on the 970 even though you don't know what performance is like on the 650 – jhocking Dec 10 '14 at 23:17
  • I would suggest trying to get access to at least one AMD card, and possibly try it on some of the more recent Intel solutions, unless you know they won't cut it. There are often large differences between different vendors' drivers, even for similarly-powerful hardware. – bcrist Dec 11 '14 at 01:22

2 Answers2

5

There is literally no good option other than testing on a range of target hardware.

Simply testing on slower hardware isn't enough. Older cards are often on different driver series, meaning that they support a lower version of Direct3D or OpenGL.

Cards of similar speeds but from different manufacturers will have different behavior. The behavior can differ because of loose specifications of semantics in the D3D or GL specs allowing vendors to do things differently, because of the vendor added some enabled-by-default extensions, or because of plain conformance bugs. For example, it's common to write GLSL code that works on an NVIDIA card but fails on Intel or AMD hardware because the GLSL code doesn't actually conform to the GLSL spec but which NVIDIA's drivers accept anyway.

Even aside from the hardware, there's various configurations to test. Users don't always install the latest drivers; the NVIDIA 34x drivers are different in key ways from the 30x legacy drivers. Users don't always have exact same version of the OS that you do, and software that works well in Windows 8 might perform poorly or not even run on Windows 7.

The only - only - reliable way to ensure that your game runs well on target machines is to actually test it on them.

If you can't test it yourself, you're going to have to rely on getting others to help test it for you with pre-alpha nightly builds or the like. Plenty of hip indie games do that stuff these days.

A poor man's option you might have available would be the discrete GPU in your CPU. Most recent processors from either Intel or AMD have an integrated GPU. It might take some shenanigans (rebooting, changing BIOS settings, and moving monitor cables) to use. Some of the newer systems make it easier and can do the swap in software (maybe only under a VM or the like). Beware that even then, you're only testing your integrated GPU and not all the others you might want to stay compatible with. Just because it runs on your desktop's Haswell Intel GPU doesn't mean it'll run on a customers's older A10 AMD APU or mobile Sandy Bridge Intel GPU.

Short version: you have to test on the target machines to get meaningful feedback on compatibility.

Sean Middleditch
  • 41,807
  • 4
  • 89
  • 132
3

If you want to stick with the hardware route, you may want to invest into a Dual-PCI motherboard specifically for this scenario. In my previous setup I had a GTX970 and an older GT640. Switching between GPUs will require you to reboot, go into BIOS and select a primary.

I've since dumped the 640 in favor of the built-in HD4400 in my i7 4770K. Check your CPU which may have an integrated GPU, it will be even a better representation of a low-end GPU than a dedicated GPU like the 650.

RecursiveCall
  • 566
  • 4
  • 13