Answers:
实际上有几个原因。
首先也是最重要的一点是,指令高速缓存中存储的数据通常与数据高速缓存中存储的数据有所不同-连同指令本身一样,还有下一条指令从何处开始的注释,以帮助解码器。某些处理器(例如Netburst,某些SPARC)使用“跟踪缓存”,该缓存存储对指令进行解码的结果,而不是以其编码形式存储原始指令。
其次,它稍微简化了电路-数据缓存必须处理读写操作,而指令缓存仅处理读取操作。(这就是为什么自修改代码如此昂贵的原因-写入不直接覆盖指令高速缓存中的数据,而是通过数据高速缓存到达L2高速缓存,然后指令高速缓存中的行无效并重新-从L2加载)。
第三,它增加了带宽:大多数现代处理器可以同时从指令高速缓存和数据高速缓存中读取数据。大多数服务器还在缓存的“入口”处有队列,因此它们实际上可以在任何给定周期中进行两次读取和一次写入。
第四,可以省电。当您需要维持存储单元本身的电源以维护其内容时,某些处理器可以在不使用时关闭某些关联电路(解码器等)的电源。借助单独的缓存,它们可以分别为这些电路供电以获取指令和数据,从而增加了电路在任何给定周期内保持断电的可能性(我不确定任何x86处理器都可以这样做-AFAIK,更多的是ARM事情)。