TI中文支持网
TI专业的中文技术问题搜集分享网站

在cache操作结束后调用_mfence是为什么

请教:

        在keystone程序中的writebackcache和invalidcache结尾处都有这样的操作:

        _mfence();

        _mfence();

       好像去掉也没有什么问题。它们的功能是什么?有存在的必要性吗?

littleWhite:

楼主你好,对于你提到的这个指令,我在文档中看到如下解释:

The MFENCE instruction is used to stall the instruction fetch pipeline until thecompletion of all CPU-triggered memory transactions.

For example,1. STORE_A2. MFENCE3. TRANSACTION_BThe MFENCE implementation stalls the CPU until the memory system asserts thatthere are no transactions "in flight," i.e. it is idle. This prevents the CPU fromproceeding to TRANSACTION_B before STORE_A completes

估计wb和inv两个函数是cache硬件进行的,cpu此时需要等待,所以加上这两条语句,防止cpu在cache一致性维护好之前就进行下一步操作,但是并不是一定会出现这样的特殊情况,所以这条语句有些时候并没有体现其作用,但是为了保险起见这条语句是必要的

Allen35065:

mfence  指令确保前一条对内存操作的指令完成后才继续向下执行,在这里保证Cache操作完成后才执行以后的指令,防止错误的操作

赞(0)
未经允许不得转载:TI中文支持网 » 在cache操作结束后调用_mfence是为什么
分享到: 更多 (0)