Kyocera, on 23 July 2013 - 07:24 AM, said:
There's a lot of truth in this, in that it's not necessarily that Intel processors are the best, it's the software and benchmarks which are better suited to them.
Once multi-core support is better implemented, we might see the gap closing due to AMD's better scaling.
At least the graphics market is a lot less clear cut and the healthy competition there has made it a win-win for us gamers.
This is true - though I, honestly, see AMD shooting ahead of Nvidia in the graphics arena.
I'm still swimming in the literature from the people who developed the graphics card industry - but from what I'm coming across, AMD ultimately has the superior architecture model for the processing that GPUs are good at.
Instructions that require little in the way of synchronous execution (where the result of one segment of code is necessary to begin executing another) run exceptionally well on GPUs - which REQUIRE there be little in the way of synchronous execution requirements to 'hide' memory latency. AMD's architecture is exceptionally reductionist and can execute massive amounts of parallel code very easily.
NVidia seems to have kind of taken a bit of a compromise between the two, with fewer more complex execution units that can better handle synchronous execution.
But it seems like a horrible compromise, considering the way x86 cores are developing. The core design would make sense when paired with system-on-a-chip designs like Tegra in mobile devices (where space and power limit how task-specific your hardware can become).
http://www.dailytech...article9005.htm
Those projects are old, and were overly optimistic at the time of their writing - but the per-pixel parallelism of raytracing lends itself exceptionally well to massively parallel designs. There's some sequential portions of execution - but those can be handled well in the program structure (and environments like OpenCL allow for certain portions of code to be assigned by preference and availability to certain hardware).
And real-time Ray-tracing is where the graphics industry will eventually start to head. Scene complexity (which can go off the wall under 64-bit environments) does not appreciably affect render times for given resolutions. High-poly models with high resolution textures don't affect render times in the slightest - though reflections and effects add potentially a bit more render time - their detail is exquisite in any sense.
The technology is also rather premature - just as with raster renders, a number of detections for redundant operations can be identified and short-hand solutions implemented to lower the costs of rendering certain things.
http://www.evga.com/...ge=1&print=true
Nvidia seems to have the advantage for the time being, because CUDA has been around a little longer and has better developer support...
But with both major console gaming systems running off of AMD GPUs and an increasing trend towards OpenCL (which can run on a lot of non-CUDA hardware, including FPGAs that could form the basis for exceptionally task-specific hardware...) - as OpenCL matures, I think we will see far better scalability and performance on AMD architectures in real-time ray-tracing environments.
Just on the graphics end of things.
From the heterogeneous computing side of things - x86 cores can handle sequential instructions far quicker than most graphics cards. You can process on the CPU and bus the results over PCI-Express before you're going to run through the same operations locally on the GPU, in many cases. Which means it's usually going to be best to prioritize your GPU for what it's intended - parallel execution.
So, that's why I'm a little vexed by Nvidia's approach to desktop GPUs. Though, perhaps they are going for something that will appeal to the mobile markets more as the concept of heterogeneous computing takes off and more programs start to utilize assets like the GPU for computation.
Ultimately, I think CUDA is in a bad position. While it's certainly more mature than OpenCL - OpenCL is much less picky, and runs on just about any digital circuit with processing capacity. Nvidia doesn't seem to have been marketing CUDA too aggressively, relying mostly on their ties with gaming industries to secure a market edge for APIs like PhysX (the GPU elements of which are horribly under-utilized by most developers because of its proprietary nature that would exclude customers with AMD cards).
Which is why I see Nvidia having to either drop their CUDA standard or to make it an API on top of the OpenCL kernel (OpenCL was based loosely on the CUDA standards) and not restrict it to Nvidia cards, only.
Though I think they will try to stick to their guns. Having either not bid strongly on the console market, about the only draw developers have to their architecture is the PhysX and CUDA APIs. There's been serious speculation that they've been intentionally not optimizing PhysX to run on CPUs efficiently in order to force the GPU computation end of things more strongly. Which is going to backfire when the logos that play at the launch of a game stop showing that "Nvidia" logo and replace it with an AMD one.
We'll just have to see how strong Nvidia's industry lobby is, or how rapidly they can shift their hardware over to address new paradigms.
Which is kind of sad - their API support is very good, and standards like OpenCL would see serious advancements if they were to refocus efforts on it.
Of course... the biggest drawback to OpenCl is that since it can run on so many different platforms, it's got a lot of rope for programmers to hang themselves with when using the term: "cross platform." You can program for a lot of different environments, and run the same code on a lot of different environments... but it doesn't mean it's going to run very well in any of those environments (spare the one you had in mind when programming it).
But I'm kind of rambling at this point.