【发布时间】:2021-07-21 08:43:35
【问题描述】:
我正在学习硬件事务内存(HTM),但它的详细实现是有限的。 我知道 HTM 中的事务缓冲其在 L1cache 中的读/写集,并通过缓存一致性协议检测冲突。下面是我学到的使用HTM的程序案例。
while (1) { // keep trying
int status = _xbegin(); // set status = -1 and start transaction
if (status == _XBEGIN_STARTED) { // status == XBEGIN_STARTED == -1
(*a) ++; // non atomic increment of shared global variable
(*b) ++;
_xend(); // end transaction
break; // break on success
} else { //
x_abort(0xff);
} //
}
所以,我对“(*a)++”和“(*b)++”之间发生冲突时会发生什么感到困惑。说,T0增加a,而T1读a。缓存协议将检测到冲突并中止 T0。但是T0会发生什么?它会继续运行其余代码,即 (*b)++ 和 _xend() 吗?我认为它不会继续运行,而是会重试。但是它怎么知道循环的起点在哪里呢?这个具体是怎么实现的?
【问题讨论】:
标签: c memory architecture cpu-cache transactional-memory