LINUX.ORG.RU

AMD vs Intel


0

0

Вот потестил сколь сильно сказывается SIMD оптимизация (на уровне ассемблера с применением SSE, SSE2, SSE3(movshdup) ) скажется на производительности расчетных программ мат моделированияя квантовых систем.

Типичные вычисляемые величины:
sqrt(x^2+y^2), x^2+y^2, 1/(x^2+y^2), (x+y)^2, 1/sqrt(x^2+y^2)
В реальных задачах они в разных комбинациях входят в алгераические дробно рациональные выражения

Касательно стоит-ли оптимизировать на низком уровне - ответ ДА стоит. SIMD оптимизацию на сколько я понимаю можно сделать только ручками в ассемблере (увы в гцц интристики работают кривовато - периодически сегволтятся). Так при использовании float можно теоретически выйиграть в 4 раза (или на 300%) при использовании SIMD по отношению к линейному коду на С/С++/FORTRAN, при использовании double в 2 раза (или на 100%).

Эксперименты по расчету ОДИНАКОВОГО количества контрольных выражений (приведены выше) показали что выигрыш при
float = +202% (+67% для AMD)
double = +53% (-37% для AMD)
Использовались Intel Q9450 и Athlon 64 X2 4800+. Задачи все ОДНОПОТОЧНЫЕ так что количества ядер не влияет на результат, процы работают на номинальной частоте.

ЗЫ: Вообщето SIMD должен ускорять вычисления - одна инструкция много данных, но кажется AMD об этом не знает. Единтсвенное где АМД у интела выигрывает так это в скорости сложения и параллельного умножения с доступом к памяти. Сами процы между собой не сравнивались в силу их разночастотности (интел побыстрее и по скорости и по частоте). Идивляет сам факт наличия ПОРНОГРАФИЧНОЙ архитектуры у AMD

anonymous
Ответ на: комментарий от mv

RHEL-5.2 x86_64, gcc 4.1.2

cpufreqd в RHEL плохо на амд работает, циклов в 10 раз больше сделал, и стоит смотреть на меньшую цифру.

$ cat /proc/cpuinfo 
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 15
model		: 67
model name	: Dual-Core AMD Opteron(tm) Processor 1220 SE
stepping	: 3
cpu MHz		: 1000.000
cache size	: 1024 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 1
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips	: 2001.85
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc

processor	: 1
vendor_id	: AuthenticAMD
cpu family	: 15
model		: 67
model name	: Dual-Core AMD Opteron(tm) Processor 1220 SE
stepping	: 3
cpu MHz		: 1000.000
cache size	: 1024 KB
physical id	: 0
siblings	: 2
core id		: 1
cpu cores	: 2
fpu		: yes
fpu_exception	: yes
cpuid level	: 1
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips	: 2001.85
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc


$ g++ -o main main.cc

6140000 - 656000

$ g++ -o main -O1 main.cc

3520000 - 4090000

$ g++ -o main -O2 main.cc

3140000 - 3620000

$ g++ -o main-pack -msse3 main-pack.cc my.S

5140000 - 5900000

$ g++ -o main-pack -msse3 -O1 main-pack.cc my.S 

4160000 - 4650000

$ g++ -o main-pack -msse3 -O2 main-pack.cc my.S 

4030000 - 4690000

$ g++ -o main-pack -msse3 -O3 main-pack.cc my.S 

4150000 - 5020000

mv ★★★★★
()
Ответ на: комментарий от mv

>model name	: Dual-Core AMD Opteron(tm) Processor 1220 SE
>stepping	: 3
>cpu MHz	: 1000.000
>cache size	: 1024 KB

RHEL-5.2 врёт на счёт проца. На самом деле он:

cpu MHz: 2800+
cache size L1: 256kb
cache size L2: 2048kb

mv ★★★★★
()
Ответ на: комментарий от mv

Ещё: кол-во циклов было уменьшено в 1000 раз (не охота долго ждать), на последнем тесте - в 100 раз, потому что ядро поднимает частоту процу с некоторой задержкой. На Xeon'е частота фиксированная, на Core2Duo тоже прыгает, но нет проблем с такой большой задержкой, как в случае с AMD (это баг ядра, вроде). Для машин с прыгающей частотой проводилось по 5 замеров, приведено наилучшее и наихудшее время.

mv ★★★★★
()
Ответ на: комментарий от mv

Ну вот вы и получили -32% т. е. падение производительности при SIMD оптимизации на АМД проце, чего на интелях вам продемонстрировать не удалось. Там на против рост производительности. Так вот собственно и напрашивается вывод об архитектуре некоторых процессоров. Вообще-то народ парится SIMD оптимизацию сделать чтобы работало быстрее а не тормозило. Значит не зря сие процы столько стоят.

ЗЫ: Не у кого фонома нет помереть? Интересно блин... он просто мертво рожденный или совсем выкидышь...

Касательно последних строк в main файлах где вывод на консоль, то они для того чтобы оптимизация -O3 не убивала цикл...

anonymous
()
Ответ на: комментарий от anonymous

> ЗЫ: Не у кого фонома нет помереть? Интересно блин... он просто мертво рожденный или совсем выкидышь...

Не нашёл фенома. Судя по описанию с сайта, амд, наконец-то, L1 кэш уменьшила, что весьма благотворно скажется на производительности в многозадачных операционках, т.к. L1 каждый раз инвалидируется при переключении контекста.

mv ★★★★★
()
Ответ на: комментарий от mv

Собственно, вот почему: L1 работает в адресном пространстве контекста. Когда контекст меняется, данные в L1 инвалидируются, потому что указывали на данные не того пространства.

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.