Теоретически, на современных процессорах, которые быстрее:Что быстрее для побитового NOT операции: предварительно вычислены таблицы или `~`
- прием не приводит из таблицы
- или расчета его
~
(в C) операции ?
Предполагая, что вся таблица подходит для кеша L1.
побитовое не:
uint8_t bitwise_not(uint8_t arg) { return ~arg; }
Таблица нет:
// precalculcating table (once)
uint8_t table[0x100];
for (int i = 0; i < 0x100; ++i) { table[i] = ~static_cast<uint8_t>(i); }
// function
uint8_t table_not(uint8_t arg) { return table[arg]; }
// xor_not:
uint8_t xor_not(uint8_t arg) { return arg^0xff; }
На не одну операцию, а несколько миллиардов операций, читает из кэша L1 быстрее, чем любой логической операции или нет? (Я думаю, что L1 быстрее, но не может это доказать.)
Практически, как измерить его?
Вы пытались сравнить код? Вероятно, было бы легче, если бы кто-то указал на ошибку в методе бенчмаркинга, вместо того, чтобы писать для вас ориентир. –
@ JonnyHenly Как правильно сравнивать его? Для обеих функций он всегда измеряется до 1 нс. Подсчет тактов процессора ('rdtsc') неправильный метод для измерения, потому что количество тактов ничего не говорит о времени выполнения (в 2015 году). – vladon
Одна операция такого типа слишком быстрая, чтобы легко сравнивать, поэтому вам нужно будет повторить операцию миллионы или миллиарды раз, чтобы получить время, которое можно измерить. –