PDA

View Full Version : Is ATI cheating?


Pages : [1] 2

StealthHawk
05-29-03, 02:43 AM
I thought this would be interesting. Please vote for the choice that best represents your opinion.

In case you are not well versed in the situation, here is some relevant information:

ATI's statementThe 1.9% performance gain comes from optimization of the two DX9 shaders (water and sky) in Game Test 4 . We render the scene exactly as intended by Futuremark, in full-precision floating point. Our shaders are mathematically and functionally identical to Futuremark's and there are no visual artifacts; we simply shuffle instructions to take advantage of our architecture. These are exactly the sort of optimizations that work in games to improve frame rates without reducing image quality and as such, are a realistic approach to a benchmark intended to measure in-game performance. However, we recognize that these can be used by some people to call into question the legitimacy of benchmark results, and so we are removing them from our driver as soon as is physically possible. We expect them to be gone by the next release of CATALYST.

Tim Sweeney's commentsLeaving aside the vulnerability of "game demos used for benchmarking" to straight-forward manipulations by IHV drivers, which can be quite different and sometimes impossible to do for an actual interactive gameplay scenario, I'm wondering what your thoughts are as a programmer when IHV drivers detect and substitute your codes with their own "optimized" codes for their hardware. Even if the resultant display quality varies slightly (for the worse, that is) from what you would expect and that the variation is usually not detectable upon any cursory look at image quality (i.e. it needs to be pointed out to a viewer before he sees the differences).

Pixel shaders are functions, taking textures, constants, and texture coordinates as inputs, and producing colors as outputs. Computer scientists have this notion of extensional equality that says, if you have two functions, and they return the same results for all combinations of parameters, then they represent the same function -- even if their implementaions differ, for example in instruction usage or performance.

Therefore, any code optimization performed on a function that does not change the resulting value of the function for any argument, is uncontroversially considered a valid optimization. Therefore, techniques such as instruction selection, instruction scheduling, dead code elimination, and load/store reordering are all acceptable. These techniques change the performance profile of the function, without affecting its extensional meaning.

Optimization techniques which change your function into a function that extensionally differs from what you specified are generally not considered valid optimizations. These sorts of optimizations have occasionally been exposed, for example, in C++ compilers as features that programmers can optionally enable when they want the extra performance and are willing to accept that the meaning of their function is being changed but hopefully to a reasonable numeric approximation. One example of this is Visual C++'s "improve float consistency" option. Such non-extensional optimizations, in all sane programming systems, default to off.

3D hardware is still at a point in its infancy that there are still lots of nondeterministic issues in the API's and the hardware itself, such as undefined amounts of precision, undefined exact order of filtering, etc. This gives IHV's some cover for performing additional optimizations that change the semantics of pixel shaders, though only because the semantics aren't well-defined in the base case anyway. In time, this will all go away, leaving us with a well-defined computing layer. We have to look back and realize that, if CPU's operated as unpredictably as 3D hardware, it would be impossible to write serious software.

John Carmack's commentsRewriting shaders behind an application's back in a way that changes the output under non-controlled circumstances is absolutely, positively wrong and indefensible.

Rewriting a shader so that it does exactly the same thing, but in a more efficient way, is generally acceptable compiler optimization, but there is a range of defensibility from completely generic instruction scheduling that helps almost everyone, to exact shader comparisons that only help one specific application. Full shader comparisons are morally grungy, but not deeply evil.

The significant issue that clouds current ATI / Nvidia comparisons is fragment shader precision. Nvidia can work at 12 bit integer, 16 bit float, and 32 bit float. ATI works only at 24 bit float. There isn't actually a mode where they can be exactly compared. DX9 and ARB_fragment_program assume 32 bit float operation, and ATI just converts everything to 24 bit. For just about any given set of operations, the Nvidia card operating at 16 bit float will be faster than the ATI, while the Nvidia operating at 32 bit float will be slower. When DOOM runs the NV30 specific fragment shader, it is faster than the ATI, while if they both run the ARB2 shader, the ATI is faster.

When the output goes to a normal 32 bit framebuffer, as all current tests do, it is possible for Nvidia to analyze data flow from textures, constants, and attributes, and change many 32 bit operations to 16 or even 12 bit operations with absolutely no loss of quality or functionality. This is completely acceptable, and will benefit all applications, but will almost certainly induce hard to find bugs in the shader compiler. You can really go overboard with this -- if you wanted every last possible precision savings, you would need to examine texture dimensions and track vertex buffer data ranges for each shader binding. That would be a really poor architectural decision, but benchmark pressure pushes vendors to such lengths if they avoid outright cheating. If really aggressive compiler optimizations are implemented, I hope they include a hint or pragma for "debug mode" that skips all the optimizations.

micron
05-29-03, 03:00 AM
I think that if ATi's detection mechanism did the same thing for games, that it does for 3DMark, then it would be ok. I just dont dig on a driver team devoting time on 3DMark specific optimisations, when they could be devoting that time to make my games play better.

micron
05-29-03, 03:02 AM
This thread is a good way to keep us busy.....kudo's to you...

de_telegraaf
05-29-03, 05:33 AM
Originally posted by micron
This thread is a good way to keep us busy.....kudo's to you...

Yeah great thread. Well brought and well positioned.

My view is that this kind of optimazation is great in games, but should not occur in benchmarks

Grrrpoop
05-29-03, 05:41 AM
Yeah, n1 StealthHawk :)

Have to say, anyone who voted for option 1 obviously didn't read the original post first :D

I think ATI screwed up by optimising for a benchmark with a detection routine, but the end result is an identical output with an 8% performance gain.

Apply this to a game and you'd have plenty of happy gamers.

SurfMonkey
05-29-03, 05:57 AM
I still believe that a synthetic benchmark should be used as is, with no modifications to their code base. This way it is a level playing field for all concerned.

Now if the benchmark is not synthetic i.e. a game, then if the drivers contain optimisations that benefit general gameplay and aren't aimed at just increasing the benchmark score, then they are justifiable optimisations.

So in my mind ATI *cheated* by targeting a synthetic benchmark even though the net gain was ~10% in one test and 1.9% overall.

NVidia on the other hand, they might as well have rewritten the benchmark entirely for their own architecture. I mean a 25% increase is like the whole score for a none DX9 based card!

Maybe we should turn up @ their headquarters with pitch forks and burning torches, and maybe the odd guillotine :D

Gator
05-29-03, 07:53 AM
you forgot to add something to the poll

"I don't care about any of this cheating fiasco, show me real game scores"

LOL :D

jbirney
05-29-03, 07:56 AM
Originally posted by micron
I think that if ATi's detection mechanism did the same thing for games, that it does for 3DMark, then it would be ok. I just dont dig on a driver team devoting time on 3DMark specific optimisations, when they could be devoting that time to make my games play better.

Micron,

it may very well be the case. They only changed GT4 which is the DX9 test. I dont know of any DX9 games out there today (well NDA... :)) So maybe their "cheat" can be applied to real world games once they ship? Maybe not. ATI's PR seems to indicate the former...but all PR is subject to a large boat load of salt :)

Sazar
05-29-03, 08:01 AM
Originally posted by Gator
you forgot to add something to the poll

"I don't care about any of this cheating fiasco, show me real game scores"

LOL :D

'real' game benches operate the same way for the most part as 3dmark03... so I don't; see why one is better than the other in that sense ?

also... only dx9 benchie out there... till aquanox drops its dx9 benchie thinger :)

Sazar
05-29-03, 08:02 AM
Originally posted by jbirney
Micron,

it may very well be the case. They only changed GT4 which is the DX9 test. I dont know of any DX9 games out there today (well NDA... :)) So maybe their "cheat" can be applied to real world games once they ship? Maybe not. ATI's PR seems to indicate the former...but all PR is subject to a large boat load of salt :)

thats the exact thing I wrote in another thread... except for the salt part...

g__day
05-29-03, 09:23 AM
I find it really hard to vote on this one - my finger wandered over all the 3 last selections - mostly on the 2nd last choice.

Why - because ATi hinted that this level of optimisation is only just beyond the complier / optimiser in the driver. Real close - I believe. The code profiling for optimisation isn't the hard part - recognising you can invoke it with only the shader given is the hardest part.

In other words if ATi had used their knowledge of what was commming next or knowledge outside those shader to do an impossible optimisation I would label that a cheat - a mild one but still a cheat.

If ATi used only the exactingly well understood driver itself and optimsed better than their driver can do today - we are in a gray area. If their drivers can do this level of optimisations in the near future < 3 months I would say its not a cheat, much beyond that and I call it a cheat.

This is one reason why FM might have held of calling them a chaet - mind you alienating further NVidia and ATi is teh last thing they desire in this market.

digitalwanderer
05-29-03, 10:00 AM
Originally posted by Gator
you forgot to add something to the poll

"I don't care about any of this cheating fiasco, show me real game scores"

LOL :D

They have that option over at [h]....actually it's the ONLY option they have. :lol:

StealthHawk
05-29-03, 12:49 PM
Originally posted by Gator
you forgot to add something to the poll

"I don't care about any of this cheating fiasco, show me real game scores"

LOL :D

Option 3 ;)

And thanks for the compliments guys :)

-=DVS=-
05-29-03, 12:58 PM
In my Opinion what ATI did is not cheating becouse it doesn't degrade graphic's output , and is very good optimizations in games that use Shaders just like Nature scene 4 , what Nvidia did is pure cheat :o but worst of all useing cheats to market they crap product is wrong :p offcourse ATI is no saint but compared to Nvidia its HOly Grail :lol:

deejaya
05-29-03, 01:45 PM
My firm belief is that benchmarks should not be "optimized" specifically in any way whatsoever, and to do so is cheating. I also think the Futuremark audit echoes this, saying that the benchmark should not be changed in any way whatsoever as to ensure it runs exactly the same test on all hardware.

tamattack
05-29-03, 02:37 PM
Nice poll. Especially well-worded choices. Too often I've seen polls become worthless because the choices were poorly worded/vague, etc...

BTW, I voted #3.

creedamd
05-29-03, 03:05 PM
Stealth, just for curiosity, what did you pick?

I picked #3 as well.

-=DVS=-
05-29-03, 04:56 PM
Its hard to believe people calling ATI cheaters when gain is some 2% i mean error margine is 5% , now Nvidia gets over 20% boost that is cheating :rolleyes:

GlowStick
05-29-03, 05:19 PM
I definatly agree with App detection is cheeting, thats a pritty good statement with it self.

euan
05-29-03, 06:30 PM
Option 3 for me. :p

Sazar
05-29-03, 06:31 PM
Originally posted by -=DVS=-
Its hard to believe people calling ATI cheaters when gain is some 2% i mean error margine is 5% , now Nvidia gets over 20% boost that is cheating :rolleyes:

variance 'allowed' == 3%...

StealthHawk
05-29-03, 06:43 PM
Originally posted by creedamd
Stealth, just for curiosity, what did you pick?

I picked #3 as well.

I picked #3.

ChrisW
05-30-03, 03:41 AM
None of the above. What ATI did is perfectly acceptable in games but not in 3DMark03. 3DMark03 was purposely written un-optimized. Absolutely no optimization of this benchmark is acceptable. The benchmark purposely uses too many triangle where it is not needed and the shaders are complex to simulate the complex instructions that should be present in future games. The benchmark is not about the final image but the amount of work a card will probably be preforming in future games. Anyone can rewrite sections of the code to remove excess triangles or use more optomized shaders but that would undermind the entire purpose in this particular benchmark.

As far as application detection, all graphics card companies have been doing this for a very long time. It is how they fix problems with games where the developer does not want to fix it himself.

StealthHawk
05-30-03, 04:24 AM
Originally posted by ChrisW
None of the above. What ATI did is perfectly acceptable in games but not in 3DMark03. 3DMark03 was purposely written un-optimized. Absolutely no optimization of this benchmark is acceptable. The benchmark purposely uses too many triangle where it is not needed and the shaders are complex to simulate the complex instructions that should be present in future games. The benchmark is not about the final image but the amount of work a card will probably be preforming in future games. Anyone can rewrite sections of the code to remove excess triangles or use more optomized shaders but that would undermind the entire purpose in this particular benchmark.

As far as application detection, all graphics card companies have been doing this for a very long time. It is how they fix problems with games where the developer does not want to fix it himself.

Sounds exactly like option #3 to me :D

ChrisW
05-30-03, 04:49 AM
Originally posted by StealthHawk
Sounds exactly like option #3 to me :D
You are correct. I misread it.