On chip to me, is integrated. but with multi core. shared facilities on the die are a bit of a bottleneck sometimes (I don't do this for a living, thats how I understand it)
So the whole 'hyperthreading is cool, 2x the CPU' thing: it turns out that as long as your e.g. integer only, true. If you invoke FP, not true: they stall.
L1 cache in some instances is now big enough some people's code never leaves it.
Nobody who lives above a compiler should ever have to worry about this. I live above scripts. I don't really worry about this. I just hark back to when I ran these boxes, on raised floors, remembering how .. distasteful adjunct computing equipment was. It was completely asynchronous, required it's own resets, interfered with cabling, had effects on the bus (unibus!) you didn't entirely understand, they made life "harder" for operations.
Did they speed things up? Sure!