LINUX.ORG.RU

Померяемся процессорами? Скорость деления.


0

2
#include <stdio.h>
#define U64 unsigned long long
int main() {
  U64 i;
  // (gcc-4.3) 100 млрд. - 44 минуты (2640 секунд);
  // 10 млрд. - 3 минуты 39 секунд (219 секунд);
  // 10 млрд. - 3 минуты 40 секунд (220 секунд);
  // 1 млрд. - 20.6 секунды;
  // 100 млн. - 1.946 секунды;
  // up to 1.8*10^20 (18 446 744 073 709 551 616)
  U64 N = 1000000000ULL; // 1 млрд.
  U64 k = 0;
  for (i = 0; i < N; i++) {
    k += i%10; // последняя цифра
  }
  printf ("%llu\n", k);
  return 0;
}
gcc-4.3 -Wall -march=athlon64 -O3 -o _${NAME} ${NAME}.c
$ time ./_matrix 
4500000000

real    0m20.608s
user    0m20.609s
sys     0m0.000s

Время выполнения для N = 1 млрд - 20.6 секунды (см. выше).

CPU: Athlon II X2 240, 2800 MHz (L2 2x1024kB), DDR3 1333 MHz 9-9-9-24.

★★★★★

А у дельфина все равно длиннее.

Deleted
()

devl547@ideapad ~ $ clang -march=native -O2 -g0 test.c
devl547@ideapad ~ $ time ./a.out
4500000000

real   0m2.129s
user   0m2.124s
sys   0m0.000s

CPU: i5-430M@2.27

devl547 ★★★★★
()
$ time ./_m 
4500000000

real	0m1.907s
user	0m1.900s
sys	0m0.000s

5400+

jerrylee
()

1 млрд

gotf ~ % time ./test 
4500000000

real	0m2.005s
user	0m2.004s
sys	0m0.000s

AMD Athlon II X3 440. Что-то у тебя с тестом не то.

GotF ★★★★★
()

Время выполнения для N = 100 млн - 34.9 секунды
CPU: IBM 6x86MX PR200 187.5MHz 64MB PC100.

anonymous
()

Однозначно что-то не то.

[20:44][nervous@quicksilver]:[~]$ time ./test
4500000000

real	0m54.783s
user	0m53.507s
sys	0m0.032s

Intel(R) Atom(TM) CPU N270   @ 1.60GHz



nervous@argentum : ~ > time ./test
4500000000

real	0m1.836s
user	0m1.820s
sys	0m0.010s

AMD Athlon(tm) 64 X2 Dual Core Processor 6000+ @ 3GHz

Nervous ★★★★★
()

А если не страдать фигней и тупо в цикле делать:

for (i = 0; i < N; i+=10) {
k += 1;
k += 2;
k += 3;
k += 4;
k += 5;
k += 6;
k += 7;
k += 8;
k += 9;
}

что можно еще собрать, раз k нигде не юзается.

И в итоге:


devl547@ideapad ~ $ time ./a.out
4500000000

real   0m0.001s
user   0m0.000s
sys   0m0.001s

devl547 ★★★★★
()
avalon ~ # time ./_test
4500000000

real    0m1.202s
user    0m1.197s
sys     0m0.000s

Core i7 2600, 3400 MHz (L2 4x256kB), DDR3 1333 MHz

CTAPK
()

Какое к чёрту деление? С O3 никакого деления там использоваться не будет. Удивительно, почему он вообще не выбрасывает этот цикл.

unnamed
()
avatar@Nightmare /tmp % time ./bench
4500000000
./bench  629,79s user 2,98s system 92% cpu 11:23,48 total
vasily_pupkin ★★★★★
()

$ cc -march=native -O2 test.c
$ time ./a.out
4500000000

real   0m1.526s
user   0m1.517s
sys   0m0.000s
$ grep name /proc/cpuinfo
model name   : AMD Athlon(tm) II X2 250 Processor
model name   : AMD Athlon(tm) II X2 250 Processor

x3al ★★★★★
()
Ответ на: 1 млрд от GotF

> Что-то у тебя с тестом не то.

Ядро: /boot/vmlinuz-2.6.26-1-amd64
Система: Debian GNU/Linux 5.0.0 «Lenny» (i386)

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

Впрочем, с -O3 точно так же. Похоже, у ТС какие-то проблемы, мой процессор отличается только дефолтной частотой в 3Ггц (а после разгона ~3.3ГГц).
И да, x86-64.

x3al ★★★★★
()

Q6660 @ 1600Mhz

real	0m2.187s
user	0m2.183s
sys	0m0.000s
ciiccii
()

> time ./a.out
4500000000

real 0m1.625s
user 0m1.623s
sys 0m0.001s


Сьюзи 11.3, гцц 4.5.0
Intel(R) Core(TM)2 Quad CPU Q9450 @ 2.66GHz

Уже таки не топ далеко как =)

tzukko
()

Мде

Тест:

total@total-home ~ $ gcc -Wall -march=native -O2 test.c
total@total-home ~ $ time ./a.out
4500000000

real	0m34.719s
user	0m34.559s
sys	0m0.008s
Проц:
model name	: AMD Sempron(tm) Processor 2800+
cpu MHz		: 1599.626
cache size	: 128 KB

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

Похоже, у ТС какие-то проблемы, мой процессор отличается только дефолтной частотой в 3Ггц

Каким бенчмарком проверить работу процессора/памяти?
Я попробовал nbench: http://www.tux.org/~mayer/linux/bmark.html

$ ./nbench 

BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :            1214  :      31.13  :      10.22
STRING SORT         :          264.48  :     118.18  :      18.29
BITFIELD            :      3.0865e+08  :      52.94  :      11.06
FP EMULATION        :          214.68  :     103.01  :      23.77
FOURIER             :           31084  :      35.35  :      19.86
ASSIGNMENT          :          32.761  :     124.66  :      32.33
IDEA                :          6561.4  :     100.35  :      29.80
HUFFMAN             :            2281  :      63.25  :      20.20
NEURAL NET          :          46.544  :      74.77  :      31.45
LU DECOMPOSITION    :          1549.6  :      80.28  :      57.97
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 76.883
FLOATING-POINT INDEX: 59.643
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : Dual AuthenticAMD AMD Athlon(tm) II X2 240 Processor 2813MHz
L2 Cache            : 1024 KB
OS                  : Linux 2.6.26-1-amd64
C compiler          : gcc version 4.3.2 (Debian 4.3.2-1.1) 
libc                : 
MEMORY INDEX        : 18.701
INTEGER INDEX       : 19.557
FLOATING-POINT INDEX: 33.080
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.

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

Гг.

samael@avalon ~/nbench-byte-2.2.3 $ ./nbench

BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          1750.3  :      44.89  :      14.74
STRING SORT         :          981.76  :     438.68  :      67.90
BITFIELD            :      5.6345e+08  :      96.65  :      20.19
FP EMULATION        :          567.16  :     272.15  :      62.80
FOURIER             :           39899  :      45.38  :      25.49
ASSIGNMENT          :          55.835  :     212.46  :      55.11
IDEA                :           11116  :     170.02  :      50.48
HUFFMAN             :          5217.9  :     144.69  :      46.20
NEURAL NET          :           93.24  :     149.78  :      63.00
LU DECOMPOSITION    :            2705  :     140.13  :     101.19
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 160.193
FLOATING-POINT INDEX: 98.384
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : 8 CPU GenuineIntel Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz 3392MHz
L2 Cache            : 8192 KB
OS                  : Linux 2.6.37-tuxonice
*** buffer overflow detected ***: ./nbench terminated
======= Backtrace: =========
[0x4582c5]
[0x45828e]
[0x457dd9]
[0x42b375]
[0x4651f4]
[0x457e7a]
[0x457dbd]
[0x402ec0]
[0x41ae29]
[0x400409]
======= Memory map: ========
00400000-004dc000 r-xp 00000000 08:08 11010470                           /home/samael/nbench-byte-2.2.3/nbench
006dc000-006df000 rw-p 000dc000 08:08 11010470                           /home/samael/nbench-byte-2.2.3/nbench
006df000-006e5000 rw-p 00000000 00:00 0 
01b5b000-01bdc000 rw-p 00000000 00:00 0                                  [heap]
7f81c2952000-7f81c2953000 rw-p 00000000 00:00 0 
7fff001ec000-7fff0020d000 rw-p 00000000 00:00 0                          [stack]
7fff0039c000-7fff0039d000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Аварийный останов
CTAPK
()
Ответ на: комментарий от CTAPK
INTEGER INDEX       : 76.883
FLOATING-POINT INDEX: 59.643
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
CPU                 : Dual AuthenticAMD AMD Athlon(tm) II X2 240 Processor 2813MHz
L2 Cache            : 1024 KB

> INTEGER INDEX       : 160.193
> FLOATING-POINT INDEX: 98.384
> Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
> CPU                 : 8 CPU GenuineIntel Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz 3392MHz
> L2 Cache            : 8192 KB


Мой процессор отстает от i7 на треть по floating-point, что вполне реально.
Значит проблема в компиляторе или дебиане (только что установленном).

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

>Каким бенчмарком проверить работу процессора/памяти?

Берешь lame/oggenc/x264/etc и оптимизируешь код. А потом меряешься.

devl547 ★★★★★
()
gcc -O3 1.c 
20:24 /dev/shm
time ./a.out 
4500000000
9.73user 0.00system 0:09.74elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+127minor)pagefaults 0swaps
20:25 /dev/shm
time ./a.out 
4500000000
9.68user 0.00system 0:09.69elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+127minor)pagefaults 0swaps
20:25 /dev/shm
gcc 1.c 
20:25 /dev/shm
time ./a.out 
4500000000
11.03user 0.00system 0:11.10elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+126minor)pagefaults 0swaps
20:25 /dev/shm
time ./a.out 
4500000000
11.03user 0.00system 0:11.04elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+126minor)pagefaults 0swaps
20:25 /dev/shm

А если разбить на 4 потока (по числу ядер), побыстрее получится :)

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

>А если разбить на 4 потока (по числу ядер), побыстрее получится :)

Нафига? Уж проще тогда сразу алгоритм оптимизировать.

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

> Уж проще тогда сразу алгоритм оптимизировать.

Или сразу посчитать на бумажке: (9/2)*N

P.S. Кстати, gcc-3.4 дал чуть хуже, чем 4.3, результаты: 22.741 секунды.

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

BYTEmark* Native Mode Benchmark ver. 2 (10/95) Index-split by Andrew D. Balsa (11/97) Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          1811.6  :      46.46  :      15.26
STRING SORT         :          288.88  :     129.08  :      19.98
BITFIELD            :       4.807e+08  :      82.46  :      17.22
FP EMULATION        :          559.84  :     268.64  :      61.99
FOURIER             :           33213  :      37.77  :      21.22
ASSIGNMENT          :           37.66  :     143.30  :      37.17
IDEA                :            9712  :     148.54  :      44.10
HUFFMAN             :          3214.9  :      89.15  :      28.47
NEURAL NET          :          64.802  :     104.10  :      43.79
LU DECOMPOSITION    :            1903  :      98.59  :      71.19
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 114.120
FLOATING-POINT INDEX: 72.912
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : Dual AuthenticAMD AMD Athlon(tm) II X2 250 Processor 3000MHz
L2 Cache            : 1024 KB
OS                  : Linux 2.6.37-ccs
C compiler          : gcc version 4.5.2 20110127 (prerelease) (GCC) 
libc                : libc-2.13.so
MEMORY INDEX        : 23.386
INTEGER INDEX       : 33.011
FLOATING-POINT INDEX: 40.440
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.

Должно быть примерно одинаково, процессоры отличаются только частотой, и той не критично.

x3al ★★★★★
()

4500000000

real   0m44.811s user   0m29.845s sys   0m0.037s

CPU: Intel Celeron CPU 2.20GHz cache size   : 128 KB

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

Можете еще попробовать такой код:

#include <stdio.h>
#define U64 unsigned long long
int main() {
  U64 i;
  U64 N = 100000000ULL; // 100 млн.
  U64 k = 0;
  for (i = 0; i < N; i++) {
    k += i*(1+k%3); // последняя цифра
  }
  printf ("%llu\n", k);
  return 0;
}
$ time ./_matrix 
14999999849999996

real    0m4.524s
user    0m4.512s
sys     0m0.004s

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

>i386

Хех. Видимо, придется ставить 64-битную систему. А я думал, системный софт на быстродействии не скажется, 64-битности ядра будет достаточно.

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

devl547@ideapad ~ $ clang -march=native -O2 -g0 -s test.c
devl547@ideapad ~ $ time ./a.out
14999999849999996

real   0m0.827s
user   0m0.824s
sys   0m0.000s

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

Intel(R) Core(TM)2 Quad CPU Q8300 @ 2.50GHz, 2Гб оперативки DDR2.

Eddy_Em ☆☆☆☆☆
()

AMD Athlon II X2 245:

[/tmp] $ time ./test
4500000000

real    0m1.468s
user    0m1.468s
sys     0m0.000s

Apple A4:

[/tmp] # time ./test
4500000000

real    10m40.019s
user    10m28.120s
sys     0m1.340s

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

$ time ./a.out
14999999849999996

real   0m0.533s
user   0m0.523s
sys   0m0.000s

x3al ★★★★★
()

Лучше luxrender'ом потестите или кодированием в x264, будет яснее годен ли комп для 3D и мультимедии или нет. А то сухими тестами только грубую оценку получить можно, например есть два старых системника, один с семпрон 2500+ драя целка на 2500MHz память одинакова, матери похожи, а скорость рендеринга выше на семпроне в 2 раза, все потому что кэш больше.

anonymous
()

pc:/tmp # time ./a.out 
4500000000

real    0m1.673s
user    0m1.673s
sys     0m0.000s
pc:/tmp # egrep "model|MHz" /proc/cpuinfo|head -2
model           : 30
model name      : Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz
pc:/tmp # egrep "model name|MHz" /proc/cpuinfo|head -2
model name      : Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz
cpu MHz         : 2940.188
Murr ★★
()

real   0m4.658s
user   0m4.640s
sys   0m0.000s

model name   : Pentium(R) Dual-Core CPU T4400 @ 2.20GHz

xorik ★★★★★
()

Если уж так прёт меряться выполнением одной и той же операции (непонятно, о чём это скажет), надо иметь хотя бы общий ассемблерный код. Вся разница во времени зависит в первую очередь от того, чем станет код после -O3 -march=native на данном компиляторе. Самое верное — взять распараллеленный рендеринг или обработку видео, как уже советовали. But nobody cares...

unnamed
()

тест некорректен, у меня на AMD Phenom II x6 1055T (2.8 ГГц) 10 миллиардов считалось 15.2 секунд, наверняка что-то не то

I-Love-Microsoft ★★★★★
()

$ gcc -Wall -march=native -m64 -O3 speed.c
$ time ./a.out
4500000000

real   0m5.624s
user   0m5.614s
sys   0m0.000s

$ gcc -Wall -march=native -m32 -O3 speed.c
$ time ./a.out
4500000000

real   0m22.224s
user   0m22.124s
sys   0m0.003s

$ grep model /proc/cpuinfo
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz
model      : 30
model name   : Intel(R) Core(TM) i7 CPU Q 720 @ 1.60GHz

andreyu ★★★★★
()

Время выполнения для N = 1 млрд - 20.6 секунды (см. выше).

CPU: Athlon II X2 240, 2800 MHz (L2 2x1024kB), DDR3 1333 MHz 9-9-9-24.

Переустановил систему на 64-битную (Debian 6.0.0 for amd64), что дало существенный прирост скорости (в 11 раз):

$ gcc-4.4 -Wall -march=native -O3 -m64 -o _${NAME} ${NAME}.c
$ time ./_matrix 
4500000000

real    0m1.779s
user    0m1.780s
sys     0m0.000s

Что немного отстает от следующих в линейке процессоров:

 $ time ./a.out
4500000000

real   0m1.526s
user   0m1.517s
sys   0m0.000s
$ grep name /proc/cpuinfo
model name   : AMD Athlon(tm) II X2 250 Processor
model name   : AMD Athlon(tm) II X2 250 Processor

pacify ★★★★★
() автор топика

Кстати, при попытке собрать и запустить nbench под 64-битным Дебианом может выдаваться следующее:

$ ./nbench 
unexpected reloc type in static binaryОшибка сегментирования

Поэтому я перекомпилировал исходник без make, вручную:

$ gcc-4.4 -DLINUX -march=native -O3 -o nbench emfloat.c misc.c nbench0.c nbench1.c sysspec.c hardware.c -lm
Вот что выдал nbench:
$ ./nbench 

BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          1552.1  :      39.80  :      13.07
STRING SORT         :           243.2  :     108.67  :      16.82
BITFIELD            :      4.0525e+08  :      69.51  :      14.52
FP EMULATION        :          465.12  :     223.19  :      51.50
FOURIER             :           26602  :      30.25  :      16.99
ASSIGNMENT          :           32.19  :     122.49  :      31.77
IDEA                :          8180.7  :     125.12  :      37.15
HUFFMAN             :          2566.7  :      71.17  :      22.73
NEURAL NET          :          55.653  :      89.40  :      37.61
LU DECOMPOSITION    :          1591.5  :      82.45  :      59.54
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 95.641
FLOATING-POINT INDEX: 60.640
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 : Dual AuthenticAMD AMD Athlon(tm) II X2 240 Processor 2813MHz
L2 Cache            : 1024 KB
OS                  : Linux 2.6.32-5-amd64
C compiler          : gcc-4.4
libc                : 
MEMORY INDEX        : 19.797
INTEGER INDEX       : 27.458
FLOATING-POINT INDEX: 33.633
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.

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