Пользователь
Понятно. Я думал стандартным расширением ISA делали. Но смысл такой же.
Это абсолютно стандрартный подход для Performance Counters, в RISC-V найти аппаратную защелку для даннго типа инструкций практически нереально. Подобное поведение описано спецификацией.
Только запрет прерываний для этой комманды не поможет. Нужно использовать специальную обертку:```
static uint64_t __riscv_get_cycle64(void)
{
#if __riscv_xlen == 64
uint64_t val;
asm volatile(
"rdcycle %0"
: "=r"(val));
return val;
#else
uint32_t hi1, hi2, low;
do
"rdcycleh %0\n"
"rdcycle %1\n"
"rdcycleh %2"
: "=r"(hi1), "=r"(low), "=r"(hi2));
} while (hi1 != hi2);
return ((uint64_t)hi1 << 32) | low;
#endif
}```
1) Порт отладки, пины RX & TX от какого интерфейса?2) Какие расширения ISA у процессора? количество ядер и тактовая частота не показатель.
Понятно. Я думал стандартным расширением ISA делали. Но смысл такой же.
Это абсолютно стандрартный подход для Performance Counters, в RISC-V найти аппаратную защелку для даннго типа инструкций практически нереально. Подобное поведение описано спецификацией.
Только запрет прерываний для этой комманды не поможет. Нужно использовать специальную обертку:
```
static uint64_t __riscv_get_cycle64(void)
{
#if __riscv_xlen == 64
uint64_t val;
asm volatile(
"rdcycle %0"
: "=r"(val));
return val;
#else
uint32_t hi1, hi2, low;
do
{
asm volatile(
"rdcycleh %0\n"
"rdcycle %1\n"
"rdcycleh %2"
: "=r"(hi1), "=r"(low), "=r"(hi2));
} while (hi1 != hi2);
return ((uint64_t)hi1 << 32) | low;
#endif
}
```
1) Порт отладки, пины RX & TX от какого интерфейса?
2) Какие расширения ISA у процессора? количество ядер и тактовая частота не показатель.