- Joined
- Jun 9, 2002
- Location
- Ft. Myers, Fl.
- Thread Starter
- #41
MetalStorm said:So looking back to PreservedSwines post on the first page, what nVidia are doing is optimisng the benchmark? as you said they are clipping the sky and using a more efficient pixel shader...so basically what has happened is that futuremark have made a crap benchmark, because its not in the least bit optimised... what could happen is they could just have a large flat wall, and put loads of things behind it which render using loads of inefficient pixel shaders that you never see and call it benchmark?
As far as im concerned there is nothing wrong with optimising anything, it can only be a good thing, it just seems its only nVidia that have taken the initiative.
Not at all. The shaders that Nvidia is using don't even render the same image.
Check these out:
http://www.beyond3d.com/forum/viewtopic.php?t=6042
Now do you understand the difference between "optimizing" and "cheating?"
I took this post from nVnews, as it explains quite bit. It coinrtains Tim Sweeney's view on the matter (The MAN at Epic)
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.
While my email to Tim came with an understanding that he may not wish for us to post his answers, Tim said "Please Post!".
--------------------------------------------------------------------------------
What ATi did
quote:
--------------------------------------------------------------------------------
The 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.
--------------------------------------------------------------------------------
In other words what ATi did with a slight reorder of shader instructions is *NOT* cheating. What Nvidia did in changing entire shader routines, recompiling everything with Cg, inserting Clip planes and who knows what else they pulled.. *IS* cheating.
Thats why there is a big difference between 1.9% and 24%. 1.9% is well within the tolerance for shader optimization.