在这种情况下:
冷跑比热跑慢了大约200毫秒:
( If 1.)和2.)替换为完全相同数据的文件的读取,则热运行和冷运行速度相同。。
如果将网络数据减少到200 K左右,从而将解压缩数据降到400 K,那么冷热之间的性能是一样的。
如果我在L2 2.之后立即执行刷新*),那么冷性能就会提高到与热性能相同的水平。我不明白这个。我尝试过更改许多编译器选项,只要使用优化器,我就会看到这种行为。
如果我清除较少的缓存,那么冷运行的性能就会相应地恶化。
*下面是我用来刷新1MB L2缓存的代码:
const size_t cache_size = 1024 * 1024;
char *cache = new char[cache_size];
srand(1);
for (size_t dc = 1; dc < cache_size; ++dc)
{
cache[dc] = cache[dc - 1] + rand() * 255;
}
使用一个巨大的开关语句来刷新指令缓存并没有太大的效果。我使用了32,000个案例,如下所示:How can I cause an instruction cache miss?
如果我将FFT操作的数据复制到内存不同部分中的重复结构中,然后对复制进行操作,则它与刷新L2没有相同的效果。
我想了解这是怎么回事。我强迫进程和线程关联到Tegra 3上的单个核心。我还能做哪些其他容易访问的度量?
发布于 2013-02-11 22:45:47
如果缓存被配置为写回(这通常是更高的性能),那么您的刷新将导致第一个FFTW的所有输出写入内存,而不是等待第二个FFTW需要缓存行。所以缓存是空的,而不是被脏行污染的。
https://stackoverflow.com/questions/14822275
复制相似问题