Короче, не беспокойся перед фактом. Но потрудитесь после.
Если вы хотите иметь производительность, вам приходится использовать оптимизацию производительности компилятора , которая может работать против здравого смысла. Следует помнить, что разные компиляторы могут компилировать код по-разному, и они сами имеют разные виды оптимизации. Если мы говорим о компиляторе g++
и говорим о повышении его уровня оптимизации с помощью -Ofast
или хотя бы флага -O3
, по моему опыту он может скомпилировать тип long
в код с еще большей производительностью чем любой unsigned
тип, или даже просто int
.
Это из моего собственного опыта, и я рекомендую вам сначала написать полную программу и позаботиться о таких вещах только после этого, когда у вас есть действительный код и вы можете скомпилировать его с оптимизацией, чтобы попытаться выбрать типы которые на самом деле работают лучше всего. Это также хорошее общее предложение по оптимизации кода для повышения производительности, сначала быстро напишите, попробуйте скомпилировать с оптимизацией, настройте параметры, чтобы увидеть, что работает лучше всего. Также вам следует попробовать использовать разные компиляторы для компиляции вашей программы и выбрать тот, который выводит наиболее производительный машинный код.
Оптимизированная многопоточная программа вычисления линейной алгебры может легко иметь> 10-кратную разницу в производительности точно оптимизирована по сравнению с неоптимизированной. Так что это имеет значение.
Вывод оптимизатора противоречит логике во многих случаях. Например, у меня был случай, когда разница между a[x]+=b
и a[x]=b
изменила время выполнения программы почти в 2 раза. И нет, a[x]=b
не был быстрее.
Вот, например, NVidia с указанием , что для программирования их графических процессоров:
Примечание: как уже было рекомендовано, подписанная арифметика
следует отдавать предпочтение арифметике без знака, где это возможно для
лучшая пропускная способность на SMM. Стандарт языка C помещает больше
ограничения на поведение переполнения для математики без знака, ограничение компилятора
возможности оптимизации.