Quote:
Originally Posted by Mr.Blah That and some apps just can't be made multithreaded efficiently, something to do with the shared memory I think. |
Kind of. That's what pipelining was for. It was a way to act like parallelism, but also behave like a linear process. It allowed instructions to fetch, execute and store while others were doing the same thing on a different clock cycle. It solved most of the shared memory problems and wait times to store data in a cache or the RAM. This is why GPUs have more processing power than CPUs these days.
The CPU still uses a very large cache array, while the GPU uses a very complicated pipeline architecture. However, CPUs are best for solving static instructions like math calculations and things that are already written in stone (C++ code, etc), which is why the cache plays a vital role when fetching data and instructions. I don't know how the cache is set up in today's chips, but what I know is that they do separate the L1, L2, and L3 cache in such a way that it allows higher priority to either data or instructions, depending on what the processor is designed for (I'm talking the construction of any CPU, not just a Pentium, Phenom, etc.).
The GPU are extremely valuable when it comes to dynamic instructions, etc. because it needs to calculate rapidly changing variables, like in video games. Because of its pipelining architecture, it can solve vector algebra much quicker than a CPU (solving an N x N matric by a CPU is an order of N^2), but parallelism can solve that much more quickly), which is why GPUs are becoming widely used in solving highly complex environments. It is also why we put multiple CPUs in a server. However, with today's technology, we can push a higher amount of numbers out with less GPUs, than an array of CPUs.
A computer is stupid. Seriously. It can only do one thing, but it can do it really well.
We just have to figure out where we can do it the fastest.