【问题标题】:How to obtain cache line size on commercial UNIX OSes from a C/C++ program?如何从 C/C++ 程序获取商业 UNIX 操作系统上的缓存行大小?
【发布时间】:2011-05-24 18:50:33
【问题描述】:

在 Web 上很容易找到 Windows、Linux 和 OSX 的答案,但在商业 UNIX 操作系统上如何,例如 AIX(在 POWER 上)、HP-UX(在 Itanium 上)和 Solaris(在 SPARC 上)。尝试使用错误的缓存行共享代码不是我要寻找的答案。

编辑:添加了 CPU 架构。

【问题讨论】:

    标签: c++ caching solaris aix hp-ux


    【解决方案1】:

    如果您想优化性能,那么基准测试正是您应该做的。示例见ATLAS

    如果您不尝试优化性能,为什么还要关心缓存行大小,还关心行数和关联性?

    您需要支持哪些 CPU 架构?

    【讨论】:

    • 我绝对同意基准测试!我说我不想尝试错误的缓存行共享的意思是,实验不是我想要找出产品中缓存行大小的方式,而是更喜欢系统调用甚至内联 asm 调用。跨度>
    【解决方案2】:

    您可以查看hwloc 库(BSD 许可证),它为不同的系统和架构提供了此类信息。您可以使用命令行工具 lstopo 或提供的 API(请参阅documentation)。

    【讨论】:

      【解决方案3】:

      对于 Solaris(在 SPARC 和 x86 架构上),您可以使用该命令:

      $ prtpicl -v -c cpu | grep -i cache-line-size
        :l1-dcache-line-size   0x40 
        :l1-icache-line-size   0x40 
        :l2-cache-line-size    0x40 
      

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        • 2011-08-08
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多