Быстрее ли запустить векторное произведение точек, используя int32_t вместо double? - PullRequest
0 голосов
/ 24 сентября 2018

Я прочитал несколько постов (например, C ++ встроенных типов ), в которых говорится, что для современных процессоров Intel XEON нет разницы между использованием int32_t и использованием double.

Однако я заметил, что когда я делаю векторное умножение,

std::vector<T> a, b, c;
// run some initialization
for( std::size_t i = 0; i < 1000000; ++i){
    c[i] = a[i] * b[i];
}  

, если я устанавливаю T как int32_t, этот фрагмент кода работает намного быстрее, чем установка T в удвоение.

Язапуск этого на XEON E5620 + centOS

Может кто-нибудь уточнить здесь?Использует ли int32_t быстрее или нет?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы выполняете миллион умножений, используя 2 миллиона входов и 1 миллион выходов.При значениях 4 байта это 12 МБ.С 8-байтовыми значениями это 24 МБ.E5620 имеет кэш 12 МБ.

0 голосов
/ 24 сентября 2018

Это результат моего процессора;

Процессор Intel® Core ™ TM5 i5-8250U @ 1,60 ГГц gcc 7.3

чистый gcc, без оптимизации

short add/sub: 1.586071 [0]
short mul/div: 5.601069 [1]
long add/sub: 1.659803 [0]    
long mul/div: 8.145207 [0] 
long long add/sub: 1.826622 [0]    
long long mul/div: 8.161891 [0]  
float add/sub: 2.685403 [0]    
float mul/div: 3.758135 [0]
double add/sub: 2.662717 [0]
double mul/div: 4.189572 [0]

с gcc -O3

short add/sub: 0.000001 [0]
short mul/div: 4.491903 [1]
long add/sub: 0.000000 [0]
long mul/div: 6.535028 [0]
long long add/sub: 0.000000 [0]
long long mul/div: 6.543064 [0]
float add/sub: 1.182737 [0]
float mul/div: 2.218142 [0]
double add/sub: 1.183991 [0]
double mul/div: 2.529001 [0]

Результат действительно зависит от вашей архитектуры и оптимизации.Я помню, что 20 лет назад в моем университете была рабочая станция IBM Sparc, у которой производительность с плавающей запятой лучше, чем у целых чисел.

Пожалуйста, прочитайте этот хороший разговор;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...