кэшировать некий набор инструкций? Например функцию.
Нельзя
Окей. А нестандартными методами? Билтины, ассеблернве вставки?
финтеховцы в чате
Ты что имеешь в виду под "кэшировать"?
Но очень хочется 😂… это странно
Вообще нет, это мой маленький pet project потребовал)
Ну у нас есть кэш инструкций и кэш данных. Загрузить конкретную функцию в кэш инструкций
Это где это ты такой кэш взял?
В смысле - где это у вас?
Вообще на x86)
Давайте покажу псевдокодом: template<class float_t, int n> float_t fancy_math_func(int p, float_t x) { constexpr std::array<func_ptr_t, n> ptrs = ...; //Likely if (p < n) { auto* fast_impl = ptrs[p]; return *(fast_impl)(x); } // Unlikely else return default_impl(p, x); } template<class float_t, int p> float_t fast_impl(float_t x) { // With ~1% probability if(is_integer(x)) return special_impl<p>(x); // Likely else return long_unrolled_impl<p>(x); }
По формам prefetch уже искал?
А вот в том то и вопрос - можно ли префетчить указатели на фцнкцию? Если да - то как указывать размер напрмер в билтине?
Хм... Инструкции вроде бесполезно, по крайней мере в x64. Ну и likely понятно, оно чуть про другое
То есть у тебя получается, что тебе критичен кэшмисс кода? Не очевидно, как ты его получил. Если это виртуальный вызов/его аналог указателем на функцию, то просто подними полиморфизм выше по операции
Обсуждают сегодня