Josh Knight :
Its starting to make some sense to me, but how could we find the IPC of a cpu?
CPUs do not have any particular IPC. You have to calculate it for your specific load.
The exact IPC depends on the instruction mix in your load and how 'compatible' it is with the specific CPU you are using.
If you look at CPU diagrams, you see that various ALUs and other resources are divided between execution ports. If a given program tends to hit any given port in a disproportionate manner, the execution may slow down due to highly uneven load across ports. The way this affect each CPU depends on how many ports are capable of executing the instructions that are causing the backlog and how they are distributed between ports.
Other things that can affect IPC is how far ahead the CPU is capable of looking for stuff to do (look-ahead/reorder buffer), the size of the renamed register file, branch prediction accuracy, cache size and latency, prefetch algorithms, cache eviction algorithms, etc.
How all of these behave depends heavily on instruction mix, data structures, code structures, etc. so you will find just about as many IPC results for any given CPU as there are pieces of software out there. The results will usually be in the same general ballpark but rarely exactly the same.
You may not even be able to reproduce the same IPC figure on the same PC using the same software due to all the stuff that happens in the background that may mess with cache lines, context switches and other background stuff.
IPC is useful as a general performance/efficiency indicator but not something with universal meaning.