Быстрые целочисленные типы быстрее, когда хранятся в регистрах процессора? - PullRequest
0 голосов
/ 06 января 2020

Я думал о быстрых целых типах:

int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, uint_fast8_t, uint_fast16_t, uint_fast32_t, uint_fast64_t

за последние дни, и я задал вопрос о почему (если так) эти типы быстрее, чем другие целочисленные типы:

Почему быстрые целочисленные типы быстрее, чем другие целочисленные типы?


Что-то, о чем я сейчас еще думаю, это , если :

  1. Более быстрые типы на 1028 * быстрее в определенной среде (зависит от реализации / архитектуры) и, следовательно, эта среда отражает идеальную среду для этого вопроса,
  2. Объекты с классом register равны хранятся в регистре процессора (но, как правило, не всегда должны храниться там при объявлении с классом register), они быстрее в той же среде и
  3. регистр ЦП способен удерживать требуемое целое значение,


    • Целочисленные типы ast даже * быстрее, если объявлены с классом хранения register?

Как:

register int_fastY_t i;

* ( Подразумевается помещение выше. )

Или они мешают друг с другом и снизить производительность?

Ответы [ 2 ]

4 голосов
/ 06 января 2020

Все быстрее при сохранении в регистрах ЦП.

register не заставляет компилятор сохранять значение в регистре. register абсолютно ничего не делает. Только очень старые компиляторы использовали register, чтобы знать, какие переменные хранить в регистрах. Новые компиляторы делают это автоматически. Даже 20-летние компиляторы делают это автоматически.

Звучит так, будто вы пытаетесь сделать программу быстрее, но вы не понимаете, что на самом деле делает программа, поэтому вы спрашиваете обо всех скоростных показателях. связанные вещи, о которых вы когда-либо слышали.

Напоминаю, что если вы используете x86-64, например, с G CC, то int_fast16_t совпадает с int64_t, что то же самое, что int и register абсолютно ничего не делает, поэтому register int_fast16_t совпадает с int. Это не волшебная c команда ускорения.

Если вы хотите использовать такие приемы для ускорения вашей программы, вам следует начать с чтения кода сборки, который создает ваш компилятор. Информация для G CC или Visual C ++ . Затем вы можете искать неэффективный ассемблерный код, а когда вы его найдете, вы можете узнать, как его ускорить. Прямо сейчас вы наклоняетесь на ветряные мельницы .

1 голос
/ 06 января 2020

Боюсь, что ответ здесь является любимым у консультанта: «это зависит». Использование нового ключевого слова не сделает базовый процессор быстрее - это подсказка компилятору для использования самого быстрого типа. Во многих архитектурах хранение чисел в регистрах делает арифметику c быстрее, но это не значит, что она будет быстрее в любой архитектуре, и в любом случае ключевое слово register является еще одним указанием компилятору - оно не ' Гарантировать любые ограничения на сгенерированный код, особенно после оптимизации.

...