汇编语言如何使具有特定缓存设计的计算机运行得更快?

问题描述 投票:2回答:1

我是汇编语言和缓存设计的新手,最近我们的教授向我们提出了一个关于编写汇编语言指令的问题,以使具有特定缓存设计的计算机运行得更快。我不知道如何使用汇编来提高性能。我能得到任何提示吗?

两个缓存设计是这样的:

高速缓存A:128组,2路组关联,32字节块,直写和无写分配。高速缓存B:256组,直接映射,32字节块,回写和写分配。

问题是:

描述一个小的汇编语言程序片段,两个指令就足够了,这使得计算机A(使用Cache A设计)的运行速度尽可能快于计算机B(使用Cache B设计)。

而另一个问题恰恰相反:

编写一个小的汇编语言程序片段,两个指令就足够了,这使计算机B的运行速度尽可能快于计算机A.

caching assembly cpu-architecture processor cpu-cache
1个回答
1
投票

要使用直接映射缓存速度慢但关联缓存速度快,最好的选择可能是2个load1。

由于该计算机上的缓存别名而不是另一台计算机而导致冲突未命中。即两个不能同时在高速缓存中连续命中的负载,因为它们索引相同的集合。

假设代码段将在循环中运行,或者在代码段运行之前该缓存已经因其他原因而已经很热。您可能还可以假设寄存器包含一个有效指针,该指针具有相对于32字节缓存边界的某些已知对齐,即您可以为代码段设置前置条件。


脚注1:或者可能是商店,但是负载未命中更明显需要停止CPU,因为它们不能被存储缓冲区隐藏。只有通过记分板才能在实际使用加载结果之前停止


要使直写/不写分配缓存运行缓慢,可以存储然后加载相邻的地址或刚刚存储的地址。在回写/写入分配缓存上,负载将会命中。 (但只有在等待商店错过才能将数据带入缓存之后。)

如果还存在具有存储转发的存储缓冲区,则重新加载刚存储的相同地址可能在两台计算机上都很快。

并且后续运行相同的剪切将获得缓存命中,因为加载将在缓存中分配行。

如果您的机器是具有后递增寻址模式的CISC,那么如果您将它们想象为循环体,则可以使用2个指令。目前还不清楚你应该/允许为缓存假设什么样的前提条件。

只有2个商店到同一行或甚至相同的地址可以证明直写成本:通过回写+写分配,你将在第二个商店受到打击。

© www.soinside.com 2019 - 2024. All rights reserved.