首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::hardware_destructive_interference_size的可靠性

std::hardware_destructive_interference_size的可靠性
EN

Stack Overflow用户
提问于 2019-09-10 17:33:49
回答 1查看 230关注 0票数 4

C++17引入了常量,这些常量似乎对缓存感知编程非常有用:size

代码语言:javascript
复制
inline constexpr std::size_t hardware_destructive_interference_size,
inline constexpr std::size_t hardware_constructive_interference_size

但我想知道他们能有多可靠?

是否保证以后在同一CPU体系结构中不会出现具有其他缓存行大小的新CPU模型?

也就是说,对于x64,行大小是64 bytes。但是,它是否可以成为例如128 bytes的一些未来x64兼容的CPU模型?

64 byte缓存行大小而编译的代码最终将变成错误行为。

当然,缓存行大小的改变不会破坏代码的逻辑(如果这可能不是一个类似心脏出血的算法)。但这仍然会引起一些副作用。错误的共享保护将停止工作。

对这些常量的依赖可能会给人以下感觉:

我的代码是由标准保证正确运行平台无关。

有时候这种感觉可能不太对。在编译代码后,由于硬件的更改。

或者..。每个CPU架构可能有固定的标准缓存线大小或类似的东西吗?

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 18:19:32

..。有点手舞足蹈,但太长了,不能发表评论:

但我想知道他们能有多可靠?

你只引用了声明。对于它们的定义,标准只指定:/*implementation-defined*/。标准只是保证一个符合标准的实现必须提供一个定义。

是否保证以后在同一CPU体系结构中不会出现具有其他缓存行大小的新CPU模型?

据我所知,这就是在标准中保持这些常量的全部意义。如果您为不同的体系结构编译代码,那么这些值将是“自动”正确的。不用再用魔法数字了。不再是由您来处理与缓存访问有关的体系结构,而是由库实现者来处理。

PS:便携并不意味着“编译一次,到处运行”,而是“写一次,到处编译”。

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

https://stackoverflow.com/questions/57875779

复制
相关文章

相似问题

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