C11 / C ++ 11弱内存基准测试

问题描述 投票:8回答:4

[谁能指出基准结果,比较使用宽松的原子操作(尤其是memory_order_releasememory_order_acquire,还有memory_order_consumememory_order_relaxed)与默认memory_order_seq_cst来比较C11 / C ++ 11代码的性能吗?所有架构都很有趣。预先感谢。

c++ c atomic memory-model stdatomic
4个回答
1
投票

[我在ARMv7上做了一些基准测试,报告见https://github.com/reinhrst/ARMBarriers,在EuroLLVM上的演讲幻灯片,以及我使用的seqlock代码。

简短的故事:在seqlock代码中,“获取/发布”功能比顺序一致的版本快40%。“在此处输入图像描述”


0
投票

这可能不是最佳解决方案,但到目前为止,我一直在其中一个项目中使用CDSChecker进行基准测试。我还没有在完整的程序上使用它,而只是在独立的单元上使用了它。


0
投票

对于特定的代码块(窃取工作的队列),我发现paper对C11版本的弱原子进行了基准测试,仅使用sc-atomics,经过手工优化的程序集以及使用完全松弛原子的不正确版本。 (碰巧的是,后来由上述CDSChecker在C11版本中发现了一个错误。)欢迎类似的示例。


0
投票

这样的问题没有道理,理解原因很重要。

原子操作只是对标量对象的简单操作,除了它可以用于线程间通信之外;该顺序仅会影响其他内存位置的保证。

[[注意:标准文本并未正式保证这一点,但是它是为了保证这一点,因此,基于C / C ++线程语义的一致方法必须基于此。]

您可以比较乘法和余弦的速度,但不能比较输出“ hello world”和刷新cout的成本。流或文件上的刷新没有固有的价格标签:它与other操作有关。

您无法比较阻塞操作的速度,直到之前的某个操作完成与没有阻塞的操作为止。

而且,您不能在真空中进行基准测试。您需要一些工作量,一种操作模式。

您需要在现代CPU设计上学到很多东西,现代,我指的是过去二十年来发明的任何东西。您必须至少对真实的CPU的复杂性及其运行代码的方式,多核的运行方式以及内存缓存的一般原理有所了解,甚至梦想着抽象设计一个有用的基准。

或者,您可以只编写程序,然后对其进行概要分析,以查看原子操作是否确实存在问题。

© www.soinside.com 2019 - 2024. All rights reserved.