each core must have an individual cache to be called a core. Everyone knows this.
Alright, you asked for it. There are all kinds of things you can do to optimize a CPU for the software workloads you want. It's true that the 8 cores in the FX chips are not full cores in the 'classic' sense, but they are about 80% of the way there. Hear me out.
If you had two employees sharing a telephone, would you call them one employee? Obviously not. The fact that they have to share a telephone might imply that they could be half as productive as a single employee with their own telephone, but in the world of microprocessors, it doesn't work like that. Most of the time, there will not be any significant contention. Yes, you can construct a scenario where the contention will be higher (both employees are telemarketers), but the actual scenario in daily computing is more like two employees who only occasionally want to use the phone at the same time. You can also think of two homes sharing a driveway. If the driveway is badly designed, it will be only one lane wide, and you'll have to wait for your neighbour to move his car for you to get in or leave quite often. However, if the driveway is two lanes wide, you'll never have to contend with your neighbour to use the driveway, but you might have to move your car for your wife to get in or out. If you make the shared driveway 4 lanes wide, you eliminate this problem, etc., so even though there's 'only' 1 driveway shared between two houses, it could be virtually irrelevant depending on how intelligently the shared driveway is designed. So, moving on.
So here's the simplest explanation of what's going on in a CPU. CPUs only really do one thing: add. They add 1s and 0s VERY, VERY, VERY quickly. Furthermore, every mathematical operation ever performed in a CPU (addition, subtraction, multiplication and division) is performed by adding (eg. 6x6 would be 6+6+6+6+6+6=36. 6-2 would be 6+(-2)=4). OK, got your mind around that? Great.
Next, CPUs can add integer numbers (those without decimals like '24') and floating point numbers (those with numbers after the decimal point like '3.141592658'). If you ask a CPU to add integers, the 'integer' unit(s) do it (and these are what are mainly improved when we look at generational 'core' upgrades - Pentium II to Pentium III, AMD K6-2 to K7, etc.). However, if you ask a CPU to add floating-point numbers, several possible things can happen. In the past (since the 386DX - before the 386DX, you'd need a separate x87 co-processor chip, or your integer-only CPU would have to emulate an x87!), a floating-point calculation would be done by the x87 floating point unit inside the CPU. However, CPU engineers came up with all kinds of different ways to speed up floating-point calculations, depending on what kind of sequence of calculations you were wanting to perform. AMD came up with 3DNow! and Intel came up with SSE to supplement the old x87 unit. Nowadays, programs can be designed to package floating-point calculations as SSE/AVX/FMA or even GPU-coded (Direct Compute, PhysX) operations, completely bypassing the x87 unit. At first, this was done for games, heavy math and scientific computing programmes, but now, with tools like OpenCL, etc. just about any floating-point can be directed to the fastest hardware available on a given computer. The programme detects OpenCL-compatible hardware, and installs the OpenCL version of the code. In short, only older programmes rely solely on the legacy x87 unit, and that's why AMD decided to cut down the number of x87 units to 4 in an 8 integer core CPU so they could add more integer cores - cores that are still the best way to add integers! Any decent programmer worth his salt writing fresh code today that's performance-sensitive will be coding the floating-point to execute as AVX/FMA or GPU-accelerated code, unless they absolutely can't (very rare). Otherwise, they're coding for a 15 year old processor. Period.
I know it's hard because AMD's module design doesn't cleanly fall into a single or dual core classic case design scenario, but really, we've got to learn to accept a little bit of complexity and stop trying to over-simplify everything, even when it means we end up being highly inaccurate. Simple bottom line, AMD's 8 integer core CPUs, based on contemporary, multi-core optimzed code, is much more like an 8 core CPU than a 4 core CPU, most of the time, in most use cases. End of story.