gpt4 book ai didi

caching - 对于单个缓存行,单边 RDMA 读取是原子的吗?

转载 作者:行者123 更新时间:2023-12-02 04:45:12 27 4
gpt4 key购买 nike

我的小组(一个名为 Isis2 的项目)正在试验 RDMA。我们对缺乏单方面 RDMA 读取的原子性保证的文档感到困惑。在过去的一个半小时里,我一直在寻找有关这方面的任何信息,但无济于事。这包括仔细阅读 rdmamojo.com 上的博客,该博客以回答每个 RDMA 问题而闻名......

在我们关注的情况下,我们希望编写器对始终适合单个缓存行的对象进行原子写入。假设这发生在机器 A 上。然后我们计划在机器 B 上有一个单边原子 RDMA 读取器,它可以从 A 读取大块内存,跨越许多这些对象(但同样,没有对象会被非原子地写入,并且所有内容都将适合某个单个缓存行)。因此 B 读取 X、Y 和 Z,并且这些对象中的每一个都位于 A 上的一个缓存行中,并使用原子写入进行写入。

因此,原子写入将是本地的,但 RDMA 读取将从远程机器到达,并且在没有本地 CPU 参与的情况下完成。

尽管是在远程机器上启动的,我们的单边读取是否与原子本地读取在“语义上等效”? (我怀疑是这样:否则,单边 RDMA 读取对于曾经修改过的数据将毫无用处......)。 “规则”记录在哪里?

最佳答案

好的,同时我似乎找到了正确的答案,我相信罗兰的回答并不完全正确——部分正确但不完全正确。

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf ,这是英特尔架构手册(我需要再次检查 AMD...)我发现了这一点:英特尔 64 和 IA-32 架构中的原子内存操作仅保证内存操作数的一个子集
尺寸和对齐方案。 IA-32 的第 8.1.1 节中描述了保证原子操作的列表
英特尔® 架构软件开发人员手册,第 3A 卷。

然后在题为 MULTIPLE-PROCESSOR MANAGEMENT 的部分中,可以找到许多有关保证原子操作的信息(第 2210 页)。特别是,英特尔保证其内存子系统对于 native 类型(位、字节、各种大小的整数、浮点数)将是原子的。这些对象必须对齐以适合缓存线(当前英特尔平台上的 64 字节),而不是跨越缓存线边界。但是英特尔保证无论什么设备使用内存总线,存储和获取都是原子的。

对于更复杂的对象,如果您想确保获得安全执行,则需要锁定。此外,如果您正在执行多核操作,则必须使用英特尔指令的锁定(原子)变体来确保并发写入的一致性。对于在 C++ 或 C#(Java 也是?)中标记为 volatile 的变量,您会自动获得它。

这加起来是对本地类型的本地写入可以安全地与远程启动的 RDMA 读取配对。

但是请注意字符串、字节数组——这些不是原子的,因为它们很容易跨越缓存线。此外,对具有多个数据字段的复杂对象的操作可能不是原子的——对于这种情况,您需要一种更复杂的方法,例如 MSR 的 FaRM 论文(快速远程内存)中的方法。我自己的需要更简单,不需要 FaRM 实现的精心设计的版本编号方案......

关于caching - 对于单个缓存行,单边 RDMA 读取是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com