【问题标题】:RISC-V instruction to write dirty cache line to next level of cacheRISC-V 指令将脏缓存行写入下一级缓存
【发布时间】:2020-07-22 09:41:13
【问题描述】:

是否有任何 RISC-V 指令可以将脏缓存行写回下一级缓存或主内存,例如 x86 中的 clwb 或 ARMv8 中的 cvac -A?

我想确保提交到非易失性持久内存。

我的目的是将下面提到的 ARMv8_A 代码改编为 RISC-V 并在 Gem5 中执行。

#代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <stdint.h>

void clean_invalidate(uint64_t addr){
        uint64_t ctr_el0 = 0;
        if(ctr_el0 == 0)
                asm volatile("mrs %0, ctr_el0":"=r"(ctr_el0)::);
        const size_t dcache_line_size = 4 << ((ctr_el0 >>16)&15);
        addr = addr & ~(dcache_line_size - 1);
        asm volatile("dc cvau, %0"::"r"(addr):);
}


int main(){
        int a[1000];
        int index = 0;
        uint64_t addr = 0;
        double time_spend = 0.0;
        clock_t begin = clock();
        for(int i=0;i<100;i++){
                index = rand()%1000;
                a[index] = index;
                addr = (uint64_t)(&a[index]);
                asm volatile("dsb ish");
                clean_invalidate(addr);
                asm volatile("dsb ish");
                int b = a[index];
        }
        clock_t end = clock();
        time_spend = (double)(end-begin)/CLOCKS_PER_SEC;
        printf("Time:%f\n",time_spend);
        return 0;
}

【问题讨论】:

  • 您是否正在寻找像 x86 cldemote(仅在 Tremont atom 上)这样的性能提示,它可以帮助其他内核更快地加载线路,或者是适合提交到非易失性内存(如 x86)的有保证的行为clwb?
  • @PeterCordes 感谢您的评论,我正在寻找对 x86 clwb 等非易失性内存的提交。我遇到了这个演讲,(youtube.com/watch?v=HsxoXMdo4L0&t=28s),演讲者提到了在 risc-v 中包含“clwb”,但在最新的 risc-v ISA 规范中也找不到任何内容。再次感谢
  • 我不知道您的问题的答案,但希望能为未来的读者澄清它。您可能希望删除有关仅推送到下一级缓存的内容,因为这可能不足以确保提交到持久内存。顺便说一句,inline-asm 是错误的:asm volatile("dsb ish"); 确实 not 暗示 "memory" 破坏者,所以它不是有序的(用于编译时重新排序)wrt。通过编译器生成的代码访问内存。

标签: assembly cpu-architecture riscv instructions persistent-memory


【解决方案1】:

不,最新版本的 RISC-V 不支持数据缓存行刷新指令(甚至不支持不可缓存的写入)。

在您在 cmets 中链接到的演示文稿中,此人仅提议对 RISC-V 进行必要的更改以支持持久内存。该人不隶属于 RISC-V 组织。官方没有迹象表明任何此类指令将很快添加到 ISA。

您可以做的是在 gem5 模拟器中自己实现 clwb(也可能是 sfence),或者切换到已经支持持久内存的 ISA。

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2023-03-22
    • 2023-04-01
    • 2013-10-31
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多