12得票2回答
使用数组避免OpenMP中的错误共享问题

我已经开始学习如何使用OpenMP作为大学课程的一部分。作为实验练习,我们被要求并行化一个串行程序。 我们首先意识到了False Sharing的危险性,尤其是在并行循环中更新数组时。 然而,我发现很难将以下代码片段转换为可并行化的任务,而不会引起False Sharing: int i...

30得票3回答
False sharing 和 128 字节对齐/填充

在研究无锁/无等待算法时,我偶然发现了伪共享问题。进一步挖掘后,我找到了Folly的源代码(Facebook的C++库),特别是这个头文件和FOLLY_ALIGN_TO_AVOID_FALSE_SHARING宏的定义(目前在第130行)。最让我惊讶的是其值:128(而不是64)... ///...

29得票1回答
缓存行乒乓和伪共享是相同的吗?

为了我的学士论文,我必须评估多核系统上的常见问题。 在一些书籍中,我读到了关于虚假共享(false sharing)的内容,而在其他书籍中则是有关缓存行乒乓(cache-line-ping-pong)的。这些具体问题听起来非常熟悉,那么这些是相同的问题但是给出了其他名称吗? 可以有人给我列举...

13得票1回答
x86-64的缓存填充大小应该设置为128字节吗?

我在 crossbeam 的评论中发现了以下内容。 从英特尔的 Sandy Bridge 开始,空间预取器现在每次拉取一对 64 字节的缓存行,因此我们必须对齐到 128 字节而不是 64 字节。 来源: https://www.intel.com/content/dam/www/publ...

28得票2回答
为什么多个线程从同一缓存行读取不会导致严重的减速?

看这段代码:#include <atomic> #include <thread> typedef volatile unsigned char Type; // typedef std::atomic_uchar Type; void fn(Type *p) { ...

8得票2回答
错误共享和pthread

我有一个任务是演示伪共享,并编写了一个简单的程序: #include <sys/times.h> #include <time.h> #include <stdio.h> #include <pthread.h> long long in...

11得票3回答
C/C++应用程序中检测伪共享的工具

有没有检测和报告 C 或 C++ 应用程序中 False Sharing 的工具?

7得票3回答
False sharing和堆栈变量

我有一些小的但是经常使用的函数对象。每个线程都会有它自己的副本,所有的分配都是静态的。这些副本不会共享任何全局或静态数据。我需要保护这些对象免受虚假共享吗? 谢谢。 编辑:下面是一个使用Boost.Threads的玩具程序,data字段是否会发生虚假共享? #include <boo...

18得票1回答
什么是“伪共享”?如何重现/避免它?

今天我在并行编程课上和我的教授就“伪共享”问题有了不同的理解。我的教授的说法让我感到困惑,所以我立即指出了这一点。她认为,“伪共享”会导致程序结果出错。 我说,“伪共享”发生在将不同内存地址分配给同一高速缓存行时,向其中一个写入数据将导致另一个被移出缓存。如果处理器在这两个伪共享地址之间交替...

10得票1回答
使用缓存行对C语言全局共享状态的修改进行无锁检查

编辑:ST不允许新手发布超过两个链接。很抱歉缺少参考资料。 我正在尝试在一个C应用程序中减少锁定开销,其中检测全局状态的变化对性能非常重要。尽管我最近一直在阅读相关主题(例如来自H. Sutter等许多人的内容),但我仍然对我的实现不太有信心。我想使用类似于CAS操作和DCL的组合,对Cac...