C'est deja le cas d'une certaine maniere tu stock une addresse virtuelle dans le cache et tu fais la traduction d'adresse dans une TLB.
De maniere generale il n'y a plus aucun gain visible au dela d'une associativite de 16 et les gains sont mineurs au dela de 8 (en considerant 1 seul thread), obtenir une associativite "complete" apporterait qq chose de minime aux microprocesseurs modernes (quelques pourcents en moyenne si la latence et le debit restaient les memes).
Le probleme de la solution de virtualiser une fois de plus l'espace d'adressage et que tu es force d'avoir une TLB plus complexe, en effet chaque acces au cache doit etre verifie par les TLB comme accedant a une page dans laquelle il a les droits de lecture ou d'ecriture appropries. Le traffic de coherence arrive aux caches en adresses physiques et aurait besoin d'etre traduit aussi afin de pouvoir verifier sa presence dans le cache, ralentissant de facto tout les snoops et les autres processeurs.
Une TLB plus compliquee implique une augmentationde la latence d'acces a moins que le cache soit completement virtuel (ce qui n'est plus le cas a ma connaissance depuis que les CPUs supportent le SMP pour des problemes de coherence).