你能解释一下多层原子性和缓存一致性之间的区别吗?它们之间有什么关系?
发布于 2022-08-20 12:12:23
一致性:
因此,一致性只是针对单个位置的加载/存储,而不是针对不同的地址;这是一致性的任务。
如果您需要多个地址的总顺序,则需要多拷贝原子性。因此CPU对不同CPU向不同地址发出的存储顺序不能有异议。
这方面的典型例子是IRIW试金石测试。
int a=0
int b=0
thread1:
a=1
thread2
b=1
thread3:
r1=a
[LoadLoad]
r2=b
thread4:
r3=b
[LoadLoad]
r4=a可能是r1=1,r2=0,r3=1,r4=0。那么不同的CPU能看到不同订单的商店吗?由于这些是加载和存储到不同的地址,所以这里不存在一致性问题。
在多拷贝原子系统中,上述情况是不可能发生的.
大多数现代CPU都是多拷贝原子字节(x86,ARMv8).对缓存行的修改是可线性化的,因为所有其他CPU都可以看到缓存线从开始写入缓存(等待RFO确认)到完成对缓存的写入之间的时刻(线性化点)。因为线性化是可组合的,所以整个缓存是可线性的。由于它是可线性的,所以总是存在一定的总阶数,这正是多拷贝原子性所需要的。
这并不意味着硬件内存模型总是有一个总的顺序,即使它构建在一个连贯的缓存之上。例如,由于存储到负载转发或与核心子集共享存储缓冲区,您可能会丢失总订单。
关于这个主题的一个伟大的书,你可以免费下载。
https://stackoverflow.com/questions/73426425
复制相似问题