首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >刷新ARM上的L2缓存(Tegra 3)意外地提高了性能

刷新ARM上的L2缓存(Tegra 3)意外地提高了性能
EN

Stack Overflow用户
提问于 2013-02-11 22:39:49
回答 1查看 669关注 0票数 2

在这种情况下:

  1. 在一个单独的线程中,我通过网络接收到大约1MB的TCP缓冲区。
  2. 对此缓冲区进行解压缩将产生大约2MB的数据。
  3. 两个调用同一个动态链接库函数,我拥有这个库函数的源代码。基本上一堆FFT使用FFTW3.3.3和霓虹灯支持。我认为第一套FFT是冷的,第二套是热的。

冷跑比热跑慢了大约200毫秒:

  • 冷度: 570毫秒
  • 热度: 260毫秒

( If 1.)和2.)替换为完全相同数据的文件的读取,则热运行和冷运行速度相同。

如果将网络数据减少到200 K左右,从而将解压缩数据降到400 K,那么冷热之间的性能是一样的。

如果我在L2 2.之后立即执行刷新*),那么冷性能就会提高到与热性能相同的水平。我不明白这个。我尝试过更改许多编译器选项,只要使用优化器,我就会看到这种行为。

如果我清除较少的缓存,那么冷运行的性能就会相应地恶化。

*下面是我用来刷新1MB L2缓存的代码:

代码语言:javascript
运行
复制
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上的单个核心。我还能做哪些其他容易访问的度量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-11 22:45:47

如果缓存被配置为写回(这通常是更高的性能),那么您的刷新将导致第一个FFTW的所有输出写入内存,而不是等待第二个FFTW需要缓存行。所以缓存是空的,而不是被脏行污染的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14822275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档