Originally posted by: Megamixman
GPU's are specifically designed to be able to calculate data in certain ways. Put it this way, the shader units are specific sequences of Math units that perform the shading algorithm. This constrains them to certain types of calculations, mostly calculations that need to be done on the fly such as in games or for previews for CAD or 3D programs. The Final scene from a 3d Program takes on a complexity that is not designed for on the fly calculations. It is meant for detail. Secondly Video cards are not designed to calculate data. Of course if you work in the 3D industry you are working with Render clusters so that isn't a big problem.
gpus aren't designed to calculate data.. then exactly what is it designed for? answer that without using the words "calculate/compute/add/subtract/multiply/divide". gpus are designed to do vector math (lienar algebra).. computer graphics are based on sets of vectors (matrices).
Branch Prediction, micro ops, etc. were ways for Intel to keep the computer going in the path they wanted. Until now CPU's have been advancing through pure MHz. It's called business; there is more to a technological advance then just scientific genius, especially in a major company of a capitalist economy.
micro-ops was a way to fix the problem with x86 instructions not being capable of executing in parallel with the given set of gprs. without a branch prediction unit, the pipeline would be useless. all this stuff is a way for companies to make cheap "superscalar" processors..
Shading is also not just integer math. When did you get that idea. If it was still integer math, Halo wouldn?t even look half as good as it did. After all, our eyes see colors not distinct geometric objects with a shade applied to them. That is processed in the brain.
never said that it was.. what i was saying was that a gpu would process integer math extremely slow compared to a cpu. the multiple pipelines used by gpus are utilized when performing ops on matrices and vectors.
edit: and when i say integer math, i mean a single integer, not matrix or vector math with integers.
GPUs are in no way primitive. Converting 3D data into 2D is also not primitive. It is very complex. Computers can't do all the calculations required for that in reality. What we have are estimates. Even then those estimates are computationally intensive. The advantage a GPU designer has is that he doesn?t need a Branch Prediction Unit, because there only so many different operations that need be done. Secondly he has to design within Technological limits. I don?t know anyone at Intel that would want to put 16 Presscot cores on one chip. Seriously this almost like asking, which is faster a Mac or a PC.
alrite let me rephrase myself.. gpus are complex, but aren't as complex as cpus. when looking at them from a global pov, then yea.. it's extremely complex. but relative to cpus these days, they're simple. much of the time spent on gpus is spent optimizing path delays and simple logic. "..doesn't need a Branch Prediction Unit.." exactly. gpus don't benefit from the stuff i mentioned.. which are the more complex parts that comprise cpu synthesis.
I will take a shot at this. For one, scheduling is done by the operating system, not by the CPU. Second, branching, or branch prediction, is a fancy way of saying "I will assume the answer is X, and work as though it is X, instead of wasting clock cycles waiting for an answer. If the answer is not X, then no harm, no foul." Misprediction penalty is non-existant. If the wrong branch is taken, it is as if no branch were taken at all. All work is thrown out and the correct path is loaded.
instruction scheduling is a way to keep from bubbles forming in the pipeline.. from what i've learned this is implemented by hardware and software (compilers, not os')
An example: If I told you to add two numbers together, and the numbers to add were either W+X or Y+Z, but I would have to get back to you on which two, you could start working on W+X. If I came back and said it is Y+Z, you can immediately quit work on W+X and start Y+Z. No time is wasted.
that's not how a pipeline works.. say i told you to add w to x and compare x with y, if they're equal to each other go to A otherwise go to B. say x is equal to y, then A is executed.. let's say A modifies the value for x.. then after A executes another comparison of x and y is made, this time if it's true it goes to C otherwise D. assume that the branch prediction table wasn't updated during or after A, then when it sees the branch it's prediction is 'true' and it'll start executing set C. when it comes to the realization that x is not equal to y, you have a misprediction and the pipeline gets flushed.
GPU's are not primitive. The 6800 has 222 million transistors and can perform tasks that a CPU cannot. I would agree that CPU's can perform more tasks and take more planning, but to say that a GPU is primitive is a relative term.
well, thats what i meant it as.. the gpu is primitive relative to the cpu. i'm not arguing that a gpu is equivalent to a calculator.
there's nothing that a gpu can do that a cpu can't do.. it may take 100 cycles longer, but it'll still be able to do it.