首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用L1和L2缓存查找C++的大小

使用L1和L2缓存查找C++的大小
EN

Stack Overflow用户
提问于 2018-04-14 12:08:14
回答 1查看 1.8K关注 0票数 1

我需要找到L1和L2缓存的大小,以便在Windows操作系统中使用c++简单程序进行赋值。我能够在两台不同的计算机中找到L3缓存的大小,方法是计算访问数组中的元素所需的时间。当时间的跳变很大时,我们就从缓存级别转到ram级别。

如何从这里计算出L1和L2的大小?

限制是我不能读取配置或使用内置的函数来确定值。我必须用时间代替读/写操作。

EN

回答 1

Stack Overflow用户

发布于 2018-04-14 12:11:31

我需要找到使用c/c++简单程序进行赋值的L1和L2缓存的大小。

一般来说,不能(理论上)。

由于符合标准的C11实现(read n1570)甚至不需要在具有缓存的真正计算机上运行。同样,对于C++11或C++14 (读n3337)。

它可以运行:

  • 对于人(使用一群奴隶来运行C程序将是不道德的、低效的、缓慢的,但这是可能的;在课堂上使用半个小时的学生是教授C或C++的一种有趣的方式--整个班级变成了C或C++的实现)。
  • 在没有任何缓存的计算机上。今天,微控制器(如阿杜伊诺)可以用C或C++编程(而且通常是这样),而且没有任何缓存。
  • 在你最喜欢的x86-64笔记本电脑上。您最好阅读更多关于Intel和AMD处理器如何处理缓存的内容。
  • (如Power9主板英特尔爱迪生覆盆子皮浏览器中的仿真器等)。你会有惊喜的!

如何从这里计算出L1和L2的大小?

您可以查看生成的汇编程序代码(使用GCC编译使用g++ -O1 -fverbose-asm -S,然后查看生成的.s文件),想象一下您拥有什么样的处理器和ISA,并进行一些有教养的猜测(根据测量的时间)。避免询问太强的优化 (因为您的程序可能有未定义行为)。

在许多OSes上,您可以使用操作系统特定的API来查询处理器。在Linux上,您可以使用proc(5)/proc/cpuinfo

如果您确实运行了您的程序,对其进行了几次测试,并给出了时间,您可以对缓存大小进行合理的猜测(但您需要假设您的进程没有被安排得太频繁;在非常加载的系统上,情况并非如此;您应该避免使用痛击

顺便说一句,我猜在以此类推 下,您的程序可能是 优化,您没有想过(参见)。注意,在new分配的数组中使用单元格而不初始化它们(原则上)是未定义行为 (或者至少是未指定行为)。因此,我相信一个足够明智的编译器可以将您的程序优化为相当于某些abort()的程序(或者只保留printf)。

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

https://stackoverflow.com/questions/49831274

复制
相关文章

相似问题

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