Инструкция RISC-V для записи грязной строки кэша на следующий уровень кеша

Существуют ли какие-либо инструкции RISC-V для обратной записи грязной строки кеша на следующий уровень кеша или в основную память, например clwb в x86 или cvac в ARMv8-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;
}

1 ответ

Решение

Нет, последняя версия RISC-V не поддерживает инструкции по очистке строки кэша данных (или даже некэшируемую запись).

В презентации, на которую вы ссылались в комментариях, этот человек предлагает только необходимые изменения в RISC-V для поддержки постоянной памяти. Этот человек не связан с организацией RISC-V. Официально нет никаких указаний на то, что подобные инструкции скоро будут добавлены в ISA.

Что вы можете сделать, так это реализовать clwb (и вероятно sfence тоже) в симуляторе gem5 или переключитесь на ISA, который уже поддерживает постоянную память.

Другие вопросы по тегам