我想知道应该它需要多少个时钟周期来修改一个std ::原子(或atomic_flag)假设它是使用最严格的存储器模型设定?多少个时钟周期来修改C++ 11原子布尔?
1
A
回答
4
这是相当难以确定它实际上究竟有多少clockcycles需要。我会的,而是试图解释到底发生了什么,如果我们假设它是一个x86处理器(如注释说明),以及运行时库实现了atomic
使用“锁定”的指令 - 如果这些假设是错误的,那么“所有投注都关闭:俗话说得好:
当执行atomic
操作时,CPU将首先确保它具有“独占”访问(可能)高速缓存的值。这意味着发送一条消息给所有其他CPU说“我为这个变量的it”。每个其他CPU然后必须刷新其副本(如果修改)并将该值标记为“无效”,然后用“我完成”回复。
一旦所有的处理器都表示“我已完成”,主处理器可以继续。这个过程,特别是在有大量CPU(核心)的大型系统中可能需要相当长的时间(数百或数千个周期)。
当然,CPU可以知道没有其他的CPU已经看到它的值,或没有其他CPU已经发出关于该值的写入,在这种情况下,它可以非常快优化此。
你也许可以通过编写一些代码来了解这是多么糟糕[在特定的机器上],在两个线程中,例如1秒,试图更新和读取相同的原子变量,看看它有多好/坏。然后尝试两个“更新”循环(以便在两个线程之间进行更新)。
1
它是大约相同的,以未缓存的主存储器的访问。大约100-1000纳秒,或大约100个时钟周期。
相关问题
- 1. 测量时钟周期C#
- 2. 确定代码块需要多少个时钟周期
- 3. 易变vs原子布尔
- 4. 正在读取bool原子,需要多少个周期
- 5. 获得来自时钟周期时间
- 6. Django原子布尔值
- 7. CUDA时钟()导致零时钟周期
- 8. 如何计算rdtsc指令执行需要多少个时钟周期?
- 9. GCC的时钟周期数
- 10. Swift 3 - 原子布尔
- 11. Verilog输出是1个时钟周期
- 12. 如何在每n个时钟周期切换采样时钟?
- 13. 如何使用C++ 11个原子能
- 14. 在一个时钟周期内多次重新分配变量 - 凿子
- 15. 如何在多个时钟周期内执行for循环?
- 16. 原始修改日期时间/水银
- 17. C++ 11的std ::线程周期
- 18. 周期检测含有多个周期
- 19. 如何准确测量C++函数使用的时钟周期?
- 20. C++,C++ 11,std ::原子成员函数
- 21. Qt App Building中将来发布的时钟歪斜和修改时间
- 22. 原子文件修改
- 23. 每周六上午11点Javascript倒计时时钟
- 24. 应该布尔标志总是原子?
- 25. C++未修改的布尔数组更改(OS X)
- 26. 原子布尔与Java中的SynchronizedBoolean
- 27. 有关时钟周期的帮助
- 28. CUDA扭曲发散和时钟周期
- 29. 5个分钟的周期,不论
- 30. 使用5级流水线CPU在指定的指令序列中需要多少个时钟周期?
您错过了很多关键信息:什么处理器(体系结构,模型,类型),数据在修改时的位置(缓存,主内存,另一个处理器的缓存),还有多少其他处理器系统中有多少处理器拥有原子变量的副本? –
说Linux Ubuntu 12.04,2.5 GHz和Intel 64位架构。我想我关心的场景是该值已经在L1缓存中。那么还有两种情况:1)没有其他线程在运行,2)多线程访问变量,但为了简单起见,假设只有生产者和消费者(绑定在不同的核心上)。 –
介于几十到几千之间......这不是一个足够好的答案吗? –