cpu별 int및 double 연산속도 측정.

ganadist의 이미지

osxdev.org에서 글 뒤벼보다가 재밌는게 있어서 함 테스트 해봤는데요.

http://osxdev.org/forum/viewtopic.php?t=712&start=19

main()
{
#ifdef DOUBLE
        double tmp = 1322;
#elif INT
        int tmp = 1322;
#endif
        int i,j;

        for(i=0;i<0xFFFFFFF;i++)
       {
                tmp *= tmp;
        }
}

각 cpu별로 테스트를 해보니 결과가 재밌네요..

시스템은 다음과 같습니다.
amd 3200+ (2500+을 뻥티기한거 작동clock은 2.2G) gentoo gcc 3.4.3
pentium3 1G dual Fedora core 3 gcc 3.4.2
pentium4 3.2G (ht enabled) Fedora core 3 gcc 3.4.2
Sun Ultra Enterprise E3500(Sparc 400MHz Dual) Solaris 8 gcc 2.95.2
amd64 2800+ (작동 clock은 1.8G) gentoo gcc 3.4.3

          INT       DOUBLE
amd     1.130s       1.699s
p3      2.697s      31.822s
p4      1.394s    1m27.612s
sun    26.947s      11.740s
amd64   1.364s       2.082s

P4가 제일 느리게 나오는군요. 기계의 잘못일까요? 컴파일러의 잘못일가요? (결국 질문인건가? 털썩..)

warpdory의 이미지

ganadist wrote:
osxdev.org에서 글 뒤벼보다가 재밌는게 있어서 함 테스트 해봤는데요.

http://osxdev.org/forum/viewtopic.php?t=712&start=19

main()
{
#ifdef DOUBLE
        double tmp = 1322;
#elif INT
        int tmp = 1322;
#endif
        int i,j;

        for(i=0;i<0xFFFFFFF;i++)
       {
                tmp *= tmp;
        }
}

각 cpu별로 테스트를 해보니 결과가 재밌네요..

시스템은 다음과 같습니다.
amd 3200+ (2500+을 뻥티기한거 작동clock은 2.2G) gentoo gcc 3.4.3
pentium3 1G dual Fedora core 3 gcc 3.4.2
pentium4 3.2G (ht enabled) Fedora core 3 gcc 3.4.2
Sun Ultra Enterprise E3500(Sparc 400MHz Dual) Solaris 8 gcc 2.95.2

          INT       DOUBLE
amd     1.130s       1.699s
p3      2.697s      31.822s
p4      1.394s    1m27.612s
sun    26.947s      11.740s

P4가 제일 느리게 나오는군요. 기계의 잘못일까요? 컴파일러의 잘못일가요? (결국 질문인건가? 털썩..)

AMD 짱 !


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

voider의 이미지

오.........
믿을수가 없는 결과네요...

컴파일된 어셈코드를 확인해보고 싶네요..

혹 젠투의 조작이 아닐까 하는 의심도 드네요
높은 성능을 낸 두 amd 모두가 젠투였으니...

미운 젠투~~

-- 아쉬운 하루 되세요 --

sangu의 이미지

CPU : AMD XP 2600+
메모리 : 512 메가

$time ./testDouble

real    0m2.454s
user    0m1.893s
sys     0m0.004s

$ time ./testInt
real    0m1.599s
user    0m1.226s
sys     0m0.001s

$ gcc -v
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.3 20050104 (Red Hat 3.4.3-13)

mycluster의 이미지

Xeon 2.8Ghz에 Redhat 7.3에서 Intel compiler로 다음과 같읍니다.

[MyCluster@MyCluster temp]$ time ./bench_d

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

[MyCluster@MyCluster temp]$ time ./bench_f

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

둘다 눈깜짝할 사이에 끝나는데요?

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

FrogLamb의 이미지

CPU: Pentium4 2.4G RAM: 1Gb gentoo
gcc version 3.4.3

froglamb@localhost ~ $ gcc -o testDouble -DDOUBLE -O6 -mtune="pentium4" -march="pentium4" test.c
froglamb@localhost ~ $ gcc -o testInt -DINT -O6 -mtune="pentium4" -march="pentium4" test.c
froglamb@localhost ~ $ time ./testDouble 
real    0m0.195s
user    0m0.163s
sys     0m0.002s
froglamb@localhost ~ $ time ./testInt

real    0m0.197s
user    0m0.161s
sys     0m0.001s
froglamb@localhost ~ $

----------------------------------------
Kwonjin Jeong

mycluster의 이미지

$ gcc -o aaa aaa.c -DDOUBLE
$ ./aaa
$ time ./aaa

real 0m2.509s
user 0m2.510s
sys 0m0.000s
$ gcc -o aaa -O3 aaa.c -DDOUBLE
$ time ./aaa

real 0m0.386s
user 0m0.380s
sys 0m0.000s

옵테론 240입니다. 역시 옵테론이 인텔계열에 비해서 엄청나게 느리군요 ^^
전 AMD빠르다는 사람을보면 항상 존경스럽습니다. 제가하는 일은 옵테론이 항상 느리더군요....

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

warpdory의 이미지

warpdory TMP # gcc -o testDouble -DDOUBLE -O6 -mtune="athlon-xp" -march="athlon-xp" testcode.c
warpdory TMP # gcc -o testInt -DINT -O6 -mtune="athlon-xp" -march="athlon-xp" testcode.c

warpdory TMP # time ./testDouble

real    0m0.318s
user    0m0.305s
sys     0m0.000s
warpdory TMP # time ./testInt

real    0m0.316s
user    0m0.306s
sys     0m0.001s
warpdory TMP #

시스템 사양은 ..

Quote:
warpdory TMP # uname -a
Linux xxxxxxx 2.6.10-gentoo-r4 #1 SMP Sun Jan 9 11:16:54 KST 2005 i686 AMD Athlon(tm) XP 2500+ AuthenticAMD GNU/Linux
warpdory TMP #

warpdory TMP # gcc --version
gcc (GCC) 3.4.3 20041125 (Gentoo Linux 3.4.3-r1, ssp-3.4.3-0, pie-8.7.7)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

warpdory TMP #

warpdory TMP # cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 10
model name : AMD Athlon(tm) XP 2500+
stepping : 0
cpu MHz : 1830.299
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
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 mmx fxsr sse pni syscall mmxext 3dnowext 3dnow
bogomips : 3620.86


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

Necromancer의 이미지

p4 최적화옵션 위력 대단합니다.

최적화 안한거.

winmaker@meow winmaker $ gcc -o test test.c -DDOUBLE
winmaker@meow winmaker $ time ./test

real    1m36.363s
user    1m36.313s
sys     0m0.042s

최적화 옵션 잔뜩 먹인거

winmaker@meow winmaker $ gcc -o test test.c -DDOUBLE -mcpu=pentium4 -march=pentium4 -msse2 -O3 -fomit-frame-pointer -fprefetch-loop-arrays -funroll-loops -fexpensive-optimizations -momit-leaf-frame-pointer
winmaker@meow winmaker $ time ./test

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

참고로 저 최적화 옵션은 제가 make.conf에 맨날 지정해두고 쓰죠 :lol:
누구는 안좋다고 욕하지만.

참고로 시스템은 p4 2.6c, 512m ram입니다.

Written By the Black Knight of Destruction

정태영의 이미지

저런 테스트는.. -Ox 옵션과 함께 사용되면.. 의미가 없어집니다..
옵티마이즈 레벨이 올라가면..

저런식으로 중간에 계산된 결과가 사용되지 않는 경우..
런타임에 계산을 하지 않고..

컴파일타임에 계산을 해서 결과값이 바이너리에 아예 들어가버리거든요 :)

-O3 옵션등이 쓰이면 무효입니다 :)
거의 0초에 가깝게 나올겁니다

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

mycluster의 이미지

Quote:
-O3 옵션등이 쓰이면 무효입니다
거의 0초에 가깝게 나올겁니다

최적화를 지원하는 컴파일러와 시피유에서 최적화를 하지 않고서
써야만하는 이유가 뭐가 있을까요?

이거하고 똑같은거죠... 막 시동거는 버스 옆을 달려서 앞지른후에
역시 내가 달리기가 빠르지? 버스도 기름써서 달리면 무효지... 나처럼
그냥 가야지.. 하고 말하는 것과 다름이 없어 보이는군요.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

Necromancer의 이미지

winmaker@meow winmaker $ gcc -o test test.c -DDOUBLE -mcpu=pentium4 -march=pentium4 -msse2 -O2
winmaker@meow winmaker $ time ./test

real    0m0.159s
user    0m0.158s
sys     0m0.001s
winmaker@meow winmaker $ gcc -o test test.c -DDOUBLE -mcpu=pentium4 -march=pentium4 -msse2 -O1
winmaker@meow winmaker $ time ./test

real    0m0.175s
user    0m0.174s
sys     0m0.000s
winmaker@meow winmaker $ gcc -o test test.c -DDOUBLE -mcpu=pentium4 -march=pentium4 -msse2 -O0
winmaker@meow winmaker $ time ./test

real    1m36.869s
user    1m36.820s
sys     0m0.014s

역시나...

Written By the Black Knight of Destruction

Necromancer의 이미지

......

-O3 집어넣은거...

        .file   "test.c"
        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    $268435454, %eax
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
.L6:
        subl    $15, %eax
        jns     .L6
        leave
        ret
        .size   main, .-main
        .section        .note.GNU-stack,"",@progbits
        .ident  "GCC: (GNU) 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)"

-O0 최적화옵션 넣은거...

        .file   "test.c"
        .section        .rodata
        .align 8
.LC0:
        .long   0
        .long   1083484160
        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
        andl    $-16, %esp
        movl    $0, %eax
        subl    %eax, %esp
        fldl    .LC0
        fstpl   -8(%ebp)
        movl    $0, -12(%ebp)
.L2:
        cmpl    $268435454, -12(%ebp)
        jle     .L5
        jmp     .L3
.L5:
        fldl    -8(%ebp)
        fmull   -8(%ebp)
        fstpl   -8(%ebp)
        leal    -12(%ebp), %eax
        addl    $1, (%eax)
        jmp     .L2
.L3:
        leave
        ret
        .size   main, .-main
        .section        .note.GNU-stack,"",@progbits
        .ident  "GCC: (GNU) 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)"

둘을 비교해 보시기 바랍니다. -O3하면 FPU 명령이 한개도 없습니다. -_-;

정태영님 말씀이 맞군요.

Written By the Black Knight of Destruction

정태영의 이미지

MyCluster wrote:
Quote:
-O3 옵션등이 쓰이면 무효입니다
거의 0초에 가깝게 나올겁니다

최적화를 지원하는 컴파일러와 시피유에서 최적화를 하지 않고서
써야만하는 이유가 뭐가 있을까요?

이거하고 똑같은거죠... 막 시동거는 버스 옆을 달려서 앞지른후에
역시 내가 달리기가 빠르지? 버스도 기름써서 달리면 무효지... 나처럼
그냥 가야지.. 하고 말하는 것과 다름이 없어 보이는군요.

정수 연산 능력이나.. 부동소숫점 연산 능력을 테스트 하기 위한 테스트에서..
그저.. fork 성능 비교정도밖에 하지 않는 결과를 만들어내는데..

그 테스트가 의미가 있다고 생각하십니까..?
최적화 옵션을 넣고 테스트를 하고 싶다면..

main() 
{ 
#ifdef DOUBLE 
    double tmp = 1322; 
#elif INT 
    int tmp = 1322; 
#endif 
    int i,j; 

    for(i=0;i<0xFFFFFFF;i++) 
    { 
        tmp *= tmp; 
#ifdef DOUBLE 
        printf( "%lf\n", tmp );
#elif INT 
        printf( "%ld\n", tmp );
#endif 
    } 
} 

정도의 코드로 하지 않으면 의미가 없어집니다..

저렇게 하지 않는다면 -O3 옵션의 경우..

main() 
{ 
} 

를 실행한 것과 전혀 다르지 않을테니까요..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

FrogLamb의 이미지

MyCluster wrote:
Quote:
-O3 옵션등이 쓰이면 무효입니다
거의 0초에 가깝게 나올겁니다

최적화를 지원하는 컴파일러와 시피유에서 최적화를 하지 않고서
써야만하는 이유가 뭐가 있을까요?

이거하고 똑같은거죠... 막 시동거는 버스 옆을 달려서 앞지른후에
역시 내가 달리기가 빠르지? 버스도 기름써서 달리면 무효지... 나처럼
그냥 가야지.. 하고 말하는 것과 다름이 없어 보이는군요.

흐음...

-O3가 넘어가면 아예 연산 부분을 건너 뛰어버리는게 문제가 아닐까 싶네요

확실히 2^28번 연산을 하는데 저정도 시간이 걸리는건 좀 이해가 안갑니다

----------------------------------------
Kwonjin Jeong

mycluster의 이미지

문제가 그거라는 것이지요...

정작 실제적인 일을 하는데 아무런 효용도 없는 벤치마크 코드를 갖고서,
이게 좋다 저게 좋다라는 식의 결과를 올린것 자체가 무의미한것이지요...

전에도 이런 비슷한 글이 올라왔던걸로 기억하는데, 정말로 필요한 것은
실제로 하고자 하는 일에서 어떤것이 좋은가를 비교하는 것이지, 전투용
장갑차가 고속도로에서 100Km/h도 안나오니 저건 고속성능이 나빠라고
이야기하는 것과 똑같은 내용입니다.

결국, 무의미한 것을 두고 시피유가 어느것이 좋네 마네 하는 문제에 대해서
무의미한 시간만으로 이게 좋다라고 비교하는 것이 한마디로 시간낭비라는
것이지요...

최적화해서
main() {
}
가 되는 무의미한 옵션이라면 저는 다시 묻고 싶군요. 최적화하지 않고서
실제로 안에 코드가 들어간 저 코드의 의미가 무엇인지요?

그냥 재미로 이렇게 하면 이 시피유가 빠릅니다라는 것을 광고하고 싶은것이라면 그러려니 하고 넘어가지요...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

정태영의 이미지

MyCluster wrote:
문제가 그거라는 것이지요...

정작 실제적인 일을 하는데 아무런 효용도 없는 벤치마크 코드를 갖고서,
이게 좋다 저게 좋다라는 식의 결과를 올린것 자체가 무의미한것이지요...

전에도 이런 비슷한 글이 올라왔던걸로 기억하는데, 정말로 필요한 것은
실제로 하고자 하는 일에서 어떤것이 좋은가를 비교하는 것이지, 전투용
장갑차가 고속도로에서 100Km/h도 안나오니 저건 고속성능이 나빠라고
이야기하는 것과 똑같은 내용입니다.

결국, 무의미한 것을 두고 시피유가 어느것이 좋네 마네 하는 문제에 대해서
무의미한 시간만으로 이게 좋다라고 비교하는 것이 한마디로 시간낭비라는
것이지요...

최적화해서
main() {
}
가 되는 무의미한 옵션이라면 저는 다시 묻고 싶군요. 최적화하지 않고서
실제로 안에 코드가 들어간 저 코드의 의미가 무엇인지요?

그냥 재미로 이렇게 하면 이 시피유가 빠릅니다라는 것을 광고하고 싶은것이라면 그러려니 하고 넘어가지요...

아니요.. 수치 해석등을 위해 코드를 작성하고 돌리게 되면.. 혹은.. 중간 중간 결과값을 이용해야 하는 경우라면.. 저 위에서 했던 테스트 등에서 측정한 결과와 비슷한 결과가 나오겠지요....

실제 사용에서.. -O0 옵션등을 붙이고 컴파일 해서 쓰라고 한 적은 없습니다.. 다만 CPU 의 ALU/FPU 연산 능력 테스트 결과에.. 최적화 옵션을 통한.. 무의미한 결과값들로 인해 테스트의 신빙성이 없어지는 거에 대해서 한마디 했을 뿐입니다.. 너무 삐딱하게 얘기를 하시는군요 :(

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

mycluster의 이미지

Quote:
수치 해석등을 위해 코드를 작성하고 돌리게 되면.. 혹은.. 중간 중간 결과값을 이용해야 하는 경우라면..

제가 하는 일이 수치해석이라서 기본적으로 최적화를 최대한 하고 그에 맞춰서 결과가 어긋나지 않을 옵션을 모든 시피유에서 적용하고 성능을 비교하지요...

처음부터 최적화를 하나도 하지 않고 결과가 맞다라고 이야기하는 수치해석은 없지요. 그리고, 최적화를 하지 않아야만 중간중간의 결과가 틀리지 않는다면 그건 근본적으로 그렇게 코딩한 알고리즘 자체가 잘못된 것입니다.

손파일을 통해서 최대한 변수의 오차가 생기지 않도록 최적화를 수행하는 것이 필수적이지요.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

flyingykk의 이미지

이 프로그램은 1322를 제곱한 결과를 제곱하고, 또 그 결과를 제곱하고, 또 그 결과를 제곱하고... 하잖아요?
printf를 넣어서 확인해보면 결국 for 루프를 10번도 돌지 못하고 int의 경우엔 0, double의 경우엔 inf를 출력하던데요.

artsilly의 이미지

정태영 wrote:
MyCluster wrote:
문제가 그거라는 것이지요...

정작 실제적인 일을 하는데 아무런 효용도 없는 벤치마크 코드를 갖고서,
이게 좋다 저게 좋다라는 식의 결과를 올린것 자체가 무의미한것이지요...

전에도 이런 비슷한 글이 올라왔던걸로 기억하는데, 정말로 필요한 것은
실제로 하고자 하는 일에서 어떤것이 좋은가를 비교하는 것이지, 전투용
장갑차가 고속도로에서 100Km/h도 안나오니 저건 고속성능이 나빠라고
이야기하는 것과 똑같은 내용입니다.

결국, 무의미한 것을 두고 시피유가 어느것이 좋네 마네 하는 문제에 대해서
무의미한 시간만으로 이게 좋다라고 비교하는 것이 한마디로 시간낭비라는
것이지요...

최적화해서
main() {
}
가 되는 무의미한 옵션이라면 저는 다시 묻고 싶군요. 최적화하지 않고서
실제로 안에 코드가 들어간 저 코드의 의미가 무엇인지요?

그냥 재미로 이렇게 하면 이 시피유가 빠릅니다라는 것을 광고하고 싶은것이라면 그러려니 하고 넘어가지요...

아니요.. 수치 해석등을 위해 코드를 작성하고 돌리게 되면.. 혹은.. 중간 중간 결과값을 이용해야 하는 경우라면.. 저 위에서 했던 테스트 등에서 측정한 결과와 비슷한 결과가 나오겠지요....

실제 사용에서.. -O0 옵션등을 붙이고 컴파일 해서 쓰라고 한 적은 없습니다.. 다만 CPU 의 ALU/FPU 연산 능력 테스트 결과에.. 최적화 옵션을 통한.. 무의미한 결과값들로 인해 테스트의 신빙성이 없어지는 거에 대해서 한마디 했을 뿐입니다.. 너무 삐딱하게 얘기를 하시는군요 :(

원래 그렇잖아요. 항~상 :lol:

jenix의 이미지

MyCluster wrote:
Quote:
수치 해석등을 위해 코드를 작성하고 돌리게 되면.. 혹은.. 중간 중간 결과값을 이용해야 하는 경우라면..

제가 하는 일이 수치해석이라서 기본적으로 최적화를 최대한 하고 그에 맞춰서 결과가 어긋나지 않을 옵션을 모든 시피유에서 적용하고 성능을 비교하지요...

처음부터 최적화를 하나도 하지 않고 결과가 맞다라고 이야기하는 수치해석은 없지요. 그리고, 최적화를 하지 않아야만 중간중간의 결과가 틀리지 않는다면 그건 근본적으로 그렇게 코딩한 알고리즘 자체가 잘못된 것입니다.

손파일을 통해서 최대한 변수의 오차가 생기지 않도록 최적화를 수행하는 것이 필수적이지요.

...

cpu 연산능력 테스트하는데

최적화 해버리면 연산능력 측정이 가능합니까?

그건 컴파일러 능력을 측정하는거지요.

아예 연산을 건너띄어버리는데..

답답하시군요,.

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

ganadist의 이미지

값이 코드에 박혀있어서 최적화 시켜버리면 미리 계산된 값이 어셈코드에 박혀버리는 것 같네요..

값을 파라메터로 받을 수 있도록 바꾸고 최적화 옵션을 넣어서 돌려보겠습니다.

최적화 하기전과의 값과 비교를 하기 위해서 argv[1]의 값은 똑같이 1322로 넣었습니다.

그리고 mpc5200이라는 모토롤라의 임베디드용 cpu에서도 테스트해보았습니다.
powerpc계열로 400MHz네요. OS는 qnx 6.3.0이고 gcc는 3.3.1입니다.

#include <stdlib.h>

main(int argc, char* argv[])
{
#ifdef DOUBLE
        double tmp = atof(argv[1]);
#elif INT
        int tmp = atoi(argv[1]);
#endif
        int i,j;

        for(i=0;i<0xFFFFFFF;i++)
       {
                tmp *= tmp;
        }
#ifdef DOUBLE
    printf("%lf\n", tmp);
#elif INT
    printf("%ld\n", tmp);
#endif
}

최적화 옵션:
p3 : "-O3 -mtune="pentium3" -march="pentium3" -fomit-frame-pointer -fprefetch-loop-arrays -funroll-loops -fexpensive-optimizations -momit-leaf-frame-pointer -msse -mmmx"
p4 : " -O3 -mtune="pentium4" -march="pentium4" -fomit-frame-pointer -fprefetch-loop-arrays -funroll-loops -fexpensive-optimizations -momit-leaf-frame-pointer -msse -mmmx -msse2"
amd : "-O3 -mtune=athlon-xp -march=athlon-xp -fomit-frame-pointer -fprefetch-loop-arrays -funroll-loops -fexpensive-optimizations -momit-leaf-frame-pointer -msse -mmmx -m3dnow"

solaris : "-O3 -fomit-frame-pointer -funroll-loops -fexpensive-optimizations"
mpc : "-O3 -fomit-frame-pointer -fprefetch-loop-arrays -funroll-loops -fexpensive-optimizations"

          INT       DOUBLE
amd     0.528s       0.527s
p3      1.078s      28.294s
p4      0.857s    1m25.483s
sun    17.039s       2.113s 
mpc     1.44s        3.43s

PS. 그냥 재미로 하는거니 서로 얼굴 붉히지 마세요.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

mycluster의 이미지

Quote:
cpu 연산능력 테스트하는데

최적화 해버리면 연산능력 측정이 가능합니까?

최적화해서 연산하면 그건 연산능력아닌가요? 도대체 '연산(computation)'이라는 것의 의미가 뭔지요? 컴퓨터는 컴퓨팅을 위한 도구이고 입력을 넣어서 얼마나 빨리 아웃풋을 내는가 하는 것이 연산능력이지... 그럼 뭐가 연산능력인가요? 제가 모르고 있는 컴퓨터의 연산능력의 정의를 좀 명확하게 내려주시면 감사하겠음...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

정태영의 이미지

MyCluster wrote:
Quote:
cpu 연산능력 테스트하는데

최적화 해버리면 연산능력 측정이 가능합니까?

최적화해서 연산하면 그건 연산능력아닌가요? 도대체 '연산(computation)'이라는 것의 의미가 뭔지요? 컴퓨터는 컴퓨팅을 위한 도구이고 입력을 넣어서 얼마나 빨리 아웃풋을 내는가 하는 것이 연산능력이지... 그럼 뭐가 연산능력인가요? 제가 모르고 있는 컴퓨터의 연산능력의 정의를 좀 명확하게 내려주시면 감사하겠음...

그런식이라면 컴파일 하는 시간을 재야겠지요..?
더이상의 의미 없는 토론은 이제 그만 하고 싶군요 _-_

저 테스트 프로그램이 맘에 안든다면..
255x255 사이즈의 두 매트릭스를 x 연산하는.. 테스트용 프로그램을 만들어 주세요

그런 다음에 최적화 옵션을 최대로 주고 테스트하면 되겠꾼요 _-_

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

mycluster의 이미지

Quote:
저 테스트 프로그램이 맘에 안든다면..
255x255 사이즈의 두 매트릭스를 x 연산하는.. 테스트용 프로그램을 만들어 주세요

이말은 이 글을 올린사람한테 하시는것이 맞겠지요? 글올린 사람이 멍청한 글을 올렸다는 것에 대해서는 생각이 안미치시는가봐요...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

jenix의 이미지

MyCluster wrote:
Quote:
cpu 연산능력 테스트하는데

최적화 해버리면 연산능력 측정이 가능합니까?

최적화해서 연산하면 그건 연산능력아닌가요? 도대체 '연산(computation)'이라는 것의 의미가 뭔지요? 컴퓨터는 컴퓨팅을 위한 도구이고 입력을 넣어서 얼마나 빨리 아웃풋을 내는가 하는 것이 연산능력이지... 그럼 뭐가 연산능력인가요? 제가 모르고 있는 컴퓨터의 연산능력의 정의를 좀 명확하게 내려주시면 감사하겠음...

...

장난하십니까 지금 -.-;;

뭔가 대단히 착각하고 계신듯 한데..

어셈코드 보시면 모르시겠습니까?

최적화 한 코드랑 안한 코드랑 컴퓨터가 연산하는 계산량 이 동일합니까?

컴파일러 능력이랑 cpu 능력도 구분 못하십니까?

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

mycluster의 이미지

Quote:
어셈코드 보시면 모르시겠습니까?

저는 프로그래머가 아니라 결과를 구하는 사람이라서 어셈코드를 잘 짜시는 분들의 심리를 파악하지 못하겠군요... 어셈코드를 보라고 문제를 올린 것이 아닐건데요?

Quote:
최적화 한 코드랑 안한 코드랑 컴퓨터가 연산하는 계산량 이 동일합니까?

계산량을 보자는 것이었다는 것을 파악하지 못했군요...
저는 컴파일해서 런시켜서 시간을 보자는 것으로 해석했는데요?

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

jenix의 이미지

MyCluster wrote:
Quote:
어셈코드 보시면 모르시겠습니까?

저는 프로그래머가 아니라 결과를 구하는 사람이라서 어셈코드를 잘 짜시는 분들의 심리를 파악하지 못하겠군요... 어셈코드를 보라고 문제를 올린 것이 아닐건데요?

Quote:
최적화 한 코드랑 안한 코드랑 컴퓨터가 연산하는 계산량 이 동일합니까?

계산량을 보자는 것이었다는 것을 파악하지 못했군요...
저는 컴파일해서 런시켜서 시간을 보자는 것으로 해석했는데요?

아 예.

평생 결과만 구하세요 그럼 =3

잠금 +1

p.s. 여기서 더 이상 리플달면 mycluster 님만 웃겨집니다. 그만다세요 :D:D:D:D

코미디가 따로없군요. 알만하신분이 계속이러시니.

---------------------------------------------------------------------------
http://jinhyung.org -- 방문해 보세요!! Jenix 의 블로그입니다! :D

mycluster의 이미지

Quote:
코미디가 따로없군요. 알만하신분이 계속이러시니.

좀 생산적인 일에 정력을 쓰라고 말하고 싶습니다. 평생 개발자로 사실것인지는 모르겠지만, 저런 식으로 소스코드가 어떻고 저떻고는 집에서 취미로 하실때나 좋습니다. 물론 재미로 인생을 사신다면 뭐 말리지는 않겠지만, 나름대로 결과에 대해서 좀 고민하고 사시는 습관을 들이시기를 바랍니다.
개발자라는 말이 평생 개발만 하고 있으라는 뜻으로 해석하신다면야 더 이상 별로 할말이 없겠지만요...
충분히 이해하셨으리라 봅니다.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

cocas의 이미지

MyCluster wrote:
Quote:
코미디가 따로없군요. 알만하신분이 계속이러시니.

좀 생산적인 일에 정력을 쓰라고 말하고 싶습니다. 평생 개발자로 사실것인지는 모르겠지만, 저런 식으로 소스코드가 어떻고 저떻고는 집에서 취미로 하실때나 좋습니다. 물론 재미로 인생을 사신다면 뭐 말리지는 않겠지만, 나름대로 결과에 대해서 좀 고민하고 사시는 습관을 들이시기를 바랍니다.
개발자라는 말이 평생 개발만 하고 있으라는 뜻으로 해석하신다면야 더 이상 별로 할말이 없겠지만요...
충분히 이해하셨으리라 봅니다.

kldp 자유게시판에 글을 올리는 건 충분히 집에서 취미로 한거라고 생각합니다만 생각이 다르신가 보네요. 올리신 분이 설마 MyCluster님이 의도하신 생각을 전혀 모르시는 분 같지도 않고 말이죠.

@ 소모 논쟁 유발하는 글만 남기고 가지만 저도 잠금신청합니다.

dsh의 이미지

잠금 + 하죠.
불필요한 댓글로 정력을 낭비하시는 거 같네요.

권순선의 이미지

처음 글올리신 분이

Quote:
글올린 사람이 멍청한 글을 올렸다는 것에 대해서는 생각이 안미치시는가봐요...

라는 모욕적인 표현을 들을 정도로 뭔가 크게 잘못한 것이 있다고는 생각하지 않습니다. 표현에 조금 신중을 기해 주셨으면 좋겠습니다.

mycluster의 이미지

Quote:
처음 글올리신 분이

인용:
글올린 사람이 멍청한 글을 올렸다는 것에 대해서는 생각이 안미치시는가봐요...

라는 모욕적인 표현을 들을 정도로 뭔가 크게 잘못한 것이 있다고는 생각하지 않습니다. 표현에 조금 신중을 기해 주셨으면 좋겠습니다.

글올리신분에게 사과드립니다.
그리고, 개발자분들의 관심사에 주제넘게 끼어든 잘못을 반성하고 싶군요.

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

vacancy의 이미지

제가 보기엔 같은 코드를 놓고
여러 cpu가 어떻게 수행하나 보자는 것 같은데,
-O3 넣어 텅빈 코드 만들어서 보자는 건 좀 억지 같네요.
결과가 중요하다는 얘길 하십니다만,
이런 케이스엔 그 결과가 '같은 코드에서의 수행 시간'인데요.
곱해진 결과가 아니고요.

뭐 어쨌든 잠그는게 낫겠습니다.
자유 게시판에 올라온 글에 이런 댓글들이 있는게 이상하네요.

kkb110의 이미지

MyCluster님이 프로그래머가 아니라고 하셔서 하는말이지만
뭐 사람인데 모를수도 있고 자기가 보기에 저건 좀 쓸데없는 짓인거 같다라는 생각이 들수도 있겠죠

하지만 생각이 다르다고 구지 공격적일 필요는 없었었지 않았었나.. 합니다.

chaos4chaos의 이미지

최근 한 달 내에 읽어본 kldp 게시물들 중에 가장 실망스러운 글타래입니다.
처음 글 올리신 분이 실망스럽다는 것이 아니고,
그동안 좋은 글로 잦은 감동을 경험케 했던 분들이...
너무 급작스럽게 무너지시는 군요... 다들 :shock:

FOREVER_Ch@oS

vacancy의 이미지

MyCluster wrote:
Quote:
처음 글올리신 분이

인용:
글올린 사람이 멍청한 글을 올렸다는 것에 대해서는 생각이 안미치시는가봐요...

라는 모욕적인 표현을 들을 정도로 뭔가 크게 잘못한 것이 있다고는 생각하지 않습니다. 표현에 조금 신중을 기해 주셨으면 좋겠습니다.

글올리신분에게 사과드립니다.
그리고, 개발자분들의 관심사에 주제넘게 끼어든 잘못을 반성하고 싶군요.

반성하시는건지 비꼬시는건지.

unipro의 이미지

세 사람(영구, 맹구, 칠득이)에게 1에서 100까지 더하는 문제를
냈습니다. 1에서 100까지 무식하게 더하는데 걸린 시간은 영구가
제일 짧게 걸렸고 맹구 그리고 칠득이 순서로 끝났습니다.

그런데, 실제 생황에서는 그렇게 무식하게 계산하지 않습니다.
그것은 위에 방법보다 더 유용한 다른 방법이 알기 때문입니다.
가우스 같은 천재가 아닌 보통 사람들도 :cry: 중학교 정도를
거치면 "100 * 101 / 2" 정도의 식을 만들어서 계산을 할 줄
압니다. 이 계산결과에 따르면 오히려 맹구가 더 빨랐고, 다음이
칠득이 마지막으로 영구 순서로 나왔습니다.

정리하자면 첫번재 방법은 "영구 > 맹구 > 칠득이" 이고,
두번째 방법 은 "맹구 > 칠득이 > 영구" 입니다.

그렇다면 "1 부터 100까지 더하는 연산을 누가 가장 빨리 할까요?"
라고 묻는다면 아마도 "맹구"라고 말하는 것이 더 적절하다고
하겠습니다. 실제로 쓰일 방법으로 적용하는 결과가 옳기
때문입니다. 이점에서는 "MyCluster"님의 얘기가 맞습니다.

그렇지만 적절한 공식을 만들 수 없는 단순 덧셈에 대해서 누가
가장 빠른지에 대한 목적의 실험이었다면, "영구"라고 대답하는
것이 옳겠죠. 이점에서는 "정태영"님이 맞겠죠.

바라보는 시각의 차이로 말입니다 옥신각신 하지 말자구요. 제에게
여러가지 좋은 정보를 주시는 분들이 사소한 의견의 차리를 보이는
것 같아서 중간에 끼어들었습니다.

그럼.... :D

내 블로그: http://unipro.tistory.com

beta의 이미지

평소에 두분 사이 안 좋으신가? 먼 답글이 저렇게 공격적이래.. - -;

발 담갔다. 이제 익숙해 지는길만이..

shji의 이미지

unipro님 글에 추천 한표...
그리고 처음 글 쓰신 제목이 cpu별 int, double 연산 속도...
였으므로, 제목만 본다면 최적화를 해서 결과만을 보자는
말은 아니었던 것으로 생각됩니다만..
그렇다고 감정이 상할 정도의 이슈는 아닌데요..

정태영의 이미지

나름대로 재밌게 볼 수 있는 주제였음에도 기이하게 흘러가버렸군요.. -_-;;

중반 이후로.. dummy999 님의 글에 답변 달 때와 비슷한 기분이
들기도 하고.. 너무 감정적인 글들만 올라와서..
기분이 묘하더군요.. -_-;;

뭐 나름대로 죄책감을 느끼기는 하지만..
잠금에 한 표 더 던집니다 :evil:

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

mycluster의 이미지

정태영님에게 감정 있는거 아니니 혹시 기분나쁘셨다면 이해바랍니다.

나름대로 재밌는 주제가 될 수도 있겠지만, 저는 처음 글을 올리신 분의 의도가 무엇이었는지 상당히 궁금해서였읍니다. 원출처를 봐도 정확히 뭘 의도하는 성능측정인지 분간이 잘 안되더군요...

제가 가끔 겪는 것인데 모 시피유 회사에서 저런류의 BMT결과를 갖고서 자기네의 CPU가 훨씬 성능이 좋다는 식으로 자료를 갖고 옵니다.

그러면 제가 그냥 위와 같은 방식으로 통상 사용하는 프로그램들을 돌려서 시간을 보여주면 답변이 '그렇게 컴파일러 최적화하고 뭐하고 해서 시피유의 성능을 비교하면 객관성이 없다'는 식으로 이야기를 하고는 자기네 물건의 장점을 이야기하더군요...

문제는, 전에도 글을 올렸듯이 성능측정이라는 것이 어디에 목적을 둘것인가 하는 것입니다. 이글도 마찬가지로, 오로지 동일한 연산횟수에 대해서 어느것이 빠르냐 느리냐는 것을 보고 싶은 것인지 아니면 컴파일러의 성능을 보자는 것인지 혹은 최종사용자가 궁극적으로 뭔가를 하고자하는데 어느것이 더 나은 결과를 주는지를 보고자 하는 것인지에 대해서 별로 고려되지 않은 성능측정이라고 밖에 볼수가 없고, 따라서 이러한 성능 측정은 제 기준으로는 보는 사람에게 있어서 왜곡된 결과를 줄 위험이 상당히 크다는 생각입니다.

실제로 어떠한 물건을 구매함에 있어서 명확하지 않은 성능측정결과를 첨부하라는 식의 RFP도 엄청나오고 문제를 내는 사람도 별 생각이 없이 내버리고, 물건파는 영업사원은 적당히 사기를 치고 있는 사례를 종종 보면 '성능측정'이라는 것은 상당히 신중하게 접근해야할 문제일 수 밖에 없다고 봅니다...

P.S. 감정상하신분들에게는... 죄송합니다. 기분들 푸세요

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

kkb110의 이미지

제생각은 이렇습니다.

먼저 무엇을 위한 실험인지를 확실히 해야겠지요. 이런 정의를 내리면 될것같습니다.

"각 CPU에서 ASM명령어 MUL(정수곱셈)과 FMUL(부동소수점곱셈)을 처리하는 속도를 알아본다"

물론 cpu성능을 좌우하는것은 이것말고도 무지하게 많겠죠.
수백가지의 다른 ASM명령어들, 캐쉬의 차이, 아니면 메모리fsb의 차이 등등.
하지만 그중에서 MUL명령어와 FMUL명령어 처리속도를 보자는겁니다.

이런비유가 적당할것 같습니다.

10명 사람이 누가 더 달리기를 잘 하나 마라톤을 한다고 칩시다. 같은거리에 도달하는데 얼마나 시간이 걸리느냐를 재면 되겠죠.
편의상 런닝머신에서 한다고 칩시다.
그런데 런닝머신에서뛰면 한시간뛰든 백시간뛰든 그자리니까
뛰지않습니다. 컴파일러가 최적화해서 안뛰고 가만히 있는거죠.
이러면 당연히 누가 달리기를 더 잘하나 잴수가 없습니다.

100시간뛰어도 제자리이지만 누가 더 달리기를 잘하는지 보려면 런닝머신에서 계속 뛰어야겠지요.

그러니까 MUL과 FMUL의 연산능력을 비교할라면 최적화시키지않고 계속 명령어를 돌려야겠죠. 실험정의는 이쯤 하고

MUL과 FMUL이 최적화하면 별로 안쓰이는것이라면 모를까 성능을 좌우하는 큰 요인중 하나입니다. 예로 뭉틍그려서 예기하면 Intel 팬4플렛폼은 연산이 좀 느린대신 메모리데이터흐름이 빠른편이고 AMD 애슬론플렛폼은 연산(MUL, FMUL 등)이 빠른대신 메모리속도가 늦은 편입니다.(1년전예기입니다 지금은 잘 -_-;)

결론적으로 AMD플렛폼은 부동소수점연산이 많은 게임에서 더 나은 성능을 보였고 INTEL플렛폼은 다른건 조금씩 다 AMD플렛폼보다 뒤지지만 동영상편집소프트웨어에서는 훨씬 나은 성능을 보였죠.

요새 갈수록 아키텍쳐가 복잡해져서 클럭이 얼마다 나누기연산이 몇클럭 소모된다 이런 단편적인 정보만으로 성능이 어떻다라고 말할수는 없지만 지금에있어서 MUL과 FMUL명령어의 처리 능력은 매우 중요한 고려사항중 하나 라고 생각됩니다.

물론 MyCluster님이 말씀하시는것도 충분히 이해가 갑니다. 저도 예전에 말씀하신 그러한 사례를 본 적이 있습니다.
용산에갔는데 밖에서 AMD 팜플렛을 나눠주던데 보니까 벤치마크표가 있더군요. 연산능력 밴치마크였는데 물론 AMD것이 동급의 INTEL것보다 30~40%정도 높았습니다 압도적인 그래프였지요.
보니까 웃음이 나오더군요. 당시 INTEL플렛폼의 RD램 플렛폼 속도는 AMD의 DDR플렛폼 속도보다 3~4배정도 더 빨랐습니다. 그리고 제가입수한 정보로는 다른 자질구래한 아키텍쳐도 INTEL의 것이 좀 더 좋았습니다.

MyCluster님 말씀처럼 단편적인 정보로는 비교가 되질 않습니다. 결론적으로는 종합적 성능이 가장 중요하지요. 하지만 지금은 종합적으로 이것이 저것보다 10%정도 더 빠르다 이렇게 말하기는 힘듭니다. 어떤것은 A라는 작업을 더 잘하고 어떤것은 B라는 작업을 더 잘하기도 하니까요. 그래서 자세한 분석도 필요한겁니다. 게다가 이곳은 이분야의 전문가 내지 준전문가의 커뮤니티이니까 좀더 자세한 단편적인 정보도 필요하다고 봅니다. 더군다나 단편적인 정보중에서도 "연산능력"은 매우 중요한 단편적인 정보이지요.

urmajest의 이미지

정태영 wrote:

저런식으로 중간에 계산된 결과가 사용되지 않는 경우..
런타임에 계산을 하지 않고..

컴파일타임에 계산을 해서 결과값이 바이너리에 아예 들어가버리거든요 :)

저 경우는 compile-time에 계산을 한게 아니고, tmp가 live-out하지 않아서 dead code elimination을 한 것 같네요.

그리고 우리가 벤치마크하고자 하는 것은 정수(혹은 부동소수) 1322를 FFFFF번 제곱하는데 걸리는 시간이라는 점을 봤을 때, -O3 최적화는 그 연산 자체를 제거하기 때문에(연산된 결과가 사용되지 않으므로) 의미가 없는 것이라는 점에서 정태영님의 말씀이 맞는 것 같아요. "최적화"를 한게 문제가 아니라 우리가 측정하고자하는 코드가 "사라졌기" 때문에 -O3 최적화로 누가 빠르냐를 측정하는 것은 의미가 없겠죠?

kkb110의 이미지

글을 다시 읽어보니 MyCluster님의 말씀처럼 이 커뮤니티에서도 오해의 소지가 다분한것 같습니다.

실험 결과는 잘 참고하되 cpu의 여러 기능중 하나의 성능에 불과하다는것, 그래서 전체성능을 대변하는것은 아니라는것. 이것만 확실하게 짚고 넘어갔으면 합니다.

ydhoney의 이미지

와..

이상한 답글이 달린 재미없는 토론이예요. -_-;

잠금한표!

artsilly의 이미지

vacancy wrote:
MyCluster wrote:
Quote:
처음 글올리신 분이

인용:
글올린 사람이 멍청한 글을 올렸다는 것에 대해서는 생각이 안미치시는가봐요...

라는 모욕적인 표현을 들을 정도로 뭔가 크게 잘못한 것이 있다고는 생각하지 않습니다. 표현에 조금 신중을 기해 주셨으면 좋겠습니다.

글올리신분에게 사과드립니다.
그리고, 개발자분들의 관심사에 주제넘게 끼어든 잘못을 반성하고 싶군요.

반성하시는건지 비꼬시는건지.

잠금에 한표 비꼼에 두표!

alsong의 이미지

수치해석과 프로그래머의 갭인가요 ^^; 보는시각에 차이가 있군요.

충분히 견해차이가 날 수 있겠군요.

제가 네이X에서 연산에 대해서 찾아 봤습니다.

http://100.naver.com/100.php?id=716537

요약
수, 함수 등에서 일정한 법칙에 따라 결과를 내는 조작.

연산속도라고 하면 수치해석에서는
수, 함수 등에서 일정한 법칙에 따라 얼마나 결과를 빨리 내는가라고 생각하고

일반적 프로그래머입장(수치해석을하는 프로그래머 제외^^)에서

㎓는 클락스피드를 나타내는 것으로 2.5㎓는 매초당 칩이 25억번 연산을 하는 것을 의미한다.
연산속도란 명령어 셋을 얼마나 빨리 실행하는가
라는데 중점을 두어서 서로의 갭이 생긴것 같군요.

영어만을 전공하신분이 전공서적을 조금 이상하게(?) 번역할수 있듯이
전공분야가 다를땐 용어의 쓰임새가 다를수 있므로 커뮤니티 성격에 맞게 이해하는것이 필요합니다.

그나저나 백수 언제 탈출하냐... ㅡㅡ; 배고파라.

icanfly의 이미지

MyCluster wrote:

제가 하는 일이 수치해석이라서 기본적으로 최적화를 최대한 하고 그에 맞춰서 결과가 어긋나지 않을 옵션을 모든 시피유에서 적용하고 성능을 비교하지요...

처음부터 최적화를 하나도 하지 않고 결과가 맞다라고 이야기하는 수치해석은 없지요. 그리고, 최적화를 하지 않아야만 중간중간의 결과가 틀리지 않는다면 그건 근본적으로 그렇게 코딩한 알고리즘 자체가 잘못된 것입니다.

손파일을 통해서 최대한 변수의 오차가 생기지 않도록 최적화를 수행하는 것이 필수적이지요.

글타래를 죽 읽다가 궁금한 점이 있어서 이렇게 글을 올립니다.
MyCluster님은 수치해석을 전공으로 학위를 하고 계시거나 학위를 마치신분 같은데...저도 석사학위를 할때 전공은 아니지만 수치해석에 관심이 있어서 수업도 듣고, 유한요소법같은것도 공부해보고 했었습니다. 이 글타래의 내용과 좀 벗어 나는 경향이 있는지는 모르겠으나, 수치해석이라는 학문은 엄밀히 말해서 컴퓨터가 없어도 할 수 있는 학문이 아닌가요? 전 그렇게 생각하고 있었는데...실제로 수치해석이란 필드에서 뛰고 있는 전공자분들은 어떤식으로
생각하고 계신지 궁금합니다.
어떤 해석법이 더 빠르고 뛰어난지는 수학적으로 증명되는거 같던데요. 해석적 증명을 벗어나서 실질적 실험으로 비교해보고 싶다면..같은 cpu에 같은 옵션을 주고 컴파일했을때, 절대적인 수치의 차이는 있을지라도 두 알고리즘의 성능차이는 수학적으로 증명된 차이만큼 나게 되는거 아닌가 하는데......전 그렇게 생각해서....
솔직히 컴퓨터로 코딩하고 계산해보는건 수치해석이란 학문에서
그냥, 안해보면 좀 섭섭하고 허전하니까 해보는 부록정도가 아닌가
생각하고 있었는데.....아닌경우도 있는지 궁금합니다. 꼭 실험적 근거가 그렇게 중요한 부분으로 전공학자들에게 받아들여지고 있는지도 궁금합니다.

doldori의 이미지

icanfly wrote:

솔직히 컴퓨터로 코딩하고 계산해보는건 수치해석이란 학문에서
그냥, 안해보면 좀 섭섭하고 허전하니까 해보는 부록정도가 아닌가
생각하고 있었는데.....아닌경우도 있는지 궁금합니다. 꼭 실험적 근거가 그렇게 중요한 부분으로 전공학자들에게 받아들여지고 있는지도 궁금합니다.

저야 수치해석 자체를 연구하지는 않았고 그저 잘 좀 써먹는 법만 궁리한 사람이라
수치해석 학자들이 어떻게 생각하는지는 모릅니다만, 저같은 사람들은 그 "부록"에
훨씬 더 관심이 많답니다.
mycluster의 이미지

Quote:
수치해석이라는 학문은 엄밀히 말해서 컴퓨터가 없어도 할 수 있는 학문이 아닌가요? 전 그렇게 생각하고 있었는데...실제로 수치해석이란 필드에서 뛰고 있는 전공자분들은 어떤식으로 생각하고 계신지 궁금합니다.

일단 제가 생각하는 견해를 기준으로 말씀드리겠읍니다. 수치해석이라는 용어자체도 역시 사용하는 사람의 관심사에 따라서 굉장히 다른 의미로 다가온다고 볼수 있읍니다. 제가 생각하는 대표적인 구분을 본다면 하나는 수치알고리즘 자체를 연구하는 것이고 하나는 수치실험을 하는 것으로 나눌 수 있읍니다.
간단하게 둘 차이를 본다면 수치알고리즘을 연구하는 것은 어떠한 수학문제를 해결하기 위한 알고리즘 자체를 연구하는 것이고, 수치실험이라는 것은 수치해석적인 기법을 통해서 실제 문제를 효율적으로 풀고 simulation 해보자는 것을 생각하면 쉽게 나눌수 있다고 봅니다.(물론 이렇게 두부짜르듯이 안됩니다만)

Quote:

어떤 해석법이 더 빠르고 뛰어난지는 수학적으로 증명되는거 같던데요. 해석적 증명을 벗어나서 실질적 실험으로 비교해보고 싶다면..같은 cpu에 같은 옵션을 주고 컴파일했을때, 절대적인 수치의 차이는 있을지라도 두 알고리즘의 성능차이는 수학적으로 증명된 차이만큼 나게 되는거 아닌가 하는데......전 그렇게 생각해서....

이말씀은 제가 제대로 이해했는지 모르겠지만, 맞는말입니다. 어떠한 알고리즘이 더 효율적이냐 아니냐 하는것을 볼때는 같은 CPU에서 옵션을 주고 효율적이냐 아니냐를 보고 수치의 차이가 오차가 정해진 범위내에 있느냐를 검증하는 것이 필수적입니다. 하지만 이와 더불어서, 똑같은 알고리즘을 서로다른 구조의 기계에서 돌려서 그 성능을 비교하는 것도 필수적입니다. 뿐만아니라 동일한 기계에서 컴파일러를 바꿔가면서도 성능을 비교합니다. 어떤 알고리즘은 특정 아키에서는 적합하도록 만들어졌지만 새로운 아키에서는 전혀 비효율적인 경우가 많습니다. 대표적으로 벡터머신에 적합한 알고리즘, SMP에 맞는 알고리즘, MPP에 맞는 알고리즘 등등... 이에 대해서는 In search of Cluster같은 책에 좀 나와있더군요.

문제는 이와같은 알고리즘의 성능비교에 있어서 중요한 것은 결국 최종적으로 얼마나 빨리 결과를 돌려주느냐가 중요한 관점이고(왜냐면 시간=돈이므로...) 이건 특히 알고리즘을 적용해서 수치실험을 반복적으로 수행하는 사람에게 있어서는 굉장히 중요한 문제입니다.

그리고, 이러한 비교를 하다보면 수학적으로는 엄밀성을 가지는 알고리즘에도 불고하고 약간의 편법(tricky)을 동원한 다소 비 수학적인 알고리즘에 비해서 현저히 비효율적이라고 판단될때, 실제 사용자는 판단을 해야합니다. 수학적인 엄밀함을 포기하고, 효율성을 추구할 것인가... 아니면 수학적인 엄밀함을 통해서 물리적 현상을 명확하게 규명할 것인가 하는 결단을 내려야합니다. 이는 논문을 쓸때도 마찬가지라고 보시면 됩니다. 어떤 저널은 수학적인 엄밀성이 명확하지 않으면 실리지 않는 반면에 어떤 저널은 결과의 정확성만 보장되면 충분한 가정에 대한 설명을 통해 게재가 됩니다.

답변이 명확한지는 모르겠읍니다만 통상 전산학과에서 수치해석을 전공하는 분은 알고리즘의 해석적/수학적 관점에서 문제를 보는 경향이 강하고, 저처럼 application을 수치해석을 통해서 푸는 사람들은 결과를 수단과 방법을 가리지않고(답이 맞다면...) 최적화를 통해서 빠른 결과를 얻는 알고리즘을 택하고자 합니다.

제가 했던일중의 하나는 수학적인 엄밀성을 다소 포기하더라도 특정 알고리즘에서 훨씬 효율적인 알고리즘으로 문제를 재 정의하는 것이었고, 이를 통해서도 여전히 수학적인 엄밀알고리즘을 해야한다는 분들과는 상당한 논쟁이 있어오고 있읍니다...

P.S. 하지만 제 생각은 그렇습니다. 원래 지배방정식 자체에 상당한 가정이 들어가있는데, 그 가정이 포함된 지배방정식을 수학적으로 엄밀하게 풀어야만 한다고 주장하시는 분들과는 생각의 차이를 좁힐 수가 없읍니다...

--------------------------------
윈도위의 리눅스 윈도위의 윈도우 리눅스위의 익스플로러

warpdory의 이미지

icanfly wrote:

솔직히 컴퓨터로 코딩하고 계산해보는건 수치해석이란 학문에서 그냥, 안해보면 좀 섭섭하고 허전하니까 해보는 부록정도가 아닌가 생각하고 있었는데.....아닌경우도 있는지 궁금합니다. 꼭 실험적 근거가 그렇게 중요한 부분으로 전공학자들에게 받아들여지고 있는지도 궁금합니다.

물리학/반도체쪽에서 수치해석을 안해보면 섭섭하고 허전해서 하는 경우는 학부 수업 시간 정도입니다. 적어도 제 분야에서 수치해석에서 오류 한번 발생하면 학교다닐 땐 수십만원에서 기껏해야 2,300 만원 깨지지만(공정 한번에 대충 싼 게 10여만원 비싼 게 300 만원 넘습니다. 서울대 반도체 공동연구소 기준.), 회사에서는 수조원을 날릴 수도 있기 때문입니다.

저도 FEM/FED 방법으로 시뮬레이션을 수없이 해 왔지만 ... CPU 마다, 라이브러리마다, OS 마다, 컴파일러마다 내놓는 결과는 다 다릅니다. 같은 코드라 할지라도요. 결과도 다르고, 걸리는 시간도 다릅니다. (같은 하드웨어 일지라도 결과 내놓는 시간이 어떤 컴파일러를 쓰면 반나절 걸리던 것이 어떤 걸 쓰면 일주일 내내 걸릴 때도 있습니다.) 이럴 때 결국 그걸 선택하는 건 ... 뭐 학교에서야 교수 몫이겠지만, 회사에서는 다른 얘기가 되죠. 일반적으로 최종적으로 선택받는 건, 계산속도 빠른 것도 중요하겠지만, 실험결과를 얼마나 잘 보여주느냐 입니다. 1초만에 계산이 끝나면 뭐합니까.. 실험에서 건진 값을 하나도 제대로 해석해 주지 못한다면 말짱 꽝인데...


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

cdpark의 이미지

일단 P4에게 불리한 테스트군요.

Pentium 4는 20단계의 깊은 파이프라인을 사용합니다. 덕분에 높은 클럭을 쓸 수 있지만, 잃는 것도 많죠.
tmp *= tmp; 라는 코드는 이 깊은 파이프라인에 쥐약입니다. tmp 값이 20단계의 파이프라인을 거쳐 계산이 끝나기 전에는 다음 단계의 곱셈을 수행할 수 없으니깐요.

어느 정도 공평(?)한 연산을 위해서는 100x100 배열의 곱을 계속 구하는 프로그램을 짰어야 합니다. 그리고 연산 중간의 loop도 손으로 풀어주고요. (그리고 그 와중에 low major/column major 문제도 발생하죠?)

이런 한 줄짜리 code로 벤치마크를 수행할 수 있다면 얼마나 행복하겠습니까? -_-;;

cdpark의 이미지

그리고 float와 double의 속도 비교도 재미있을겁니다.

오래된 CPU의 경우에는 float가 훨씬 더 빠르지만, 최근 CPU에서는 둘 간의 차이가 거의 없습니다. 몇몇 CPU의 경우 double이 더 빠릅니다. :shock:

대표적인 예가 MIPS 8000 시리즈! (아아.. 추억의 SGI)

avelose의 이미지

글타래를 잘 못 파악 했군요. 뒤쪽엔 제 생각과 같은 얘기가 있었군요. :roll:
------------------------------------------------------------------------
정태영님이 255x255의 행렬 곱셈에서나 통용되는 얘기구요.

지금의 예는 이런 것이죠.
-O0옵션을 실례로 들어 보면
영구 맹구 칠득이가 1~100까지 일일히 더 합니다.
이 부분에서 영구 > 맹구 > 칠득이의 순으로 정답을 말합니다.
일단 이 부분에서 영구가 더하기 실력이 좋습니다.
-O3옵션을 실례로 들어보면
영구 맹구 칠득이가. 각각 1~100까지의 수를 더한 값이 5050이란 것을 알고 있는 상태에서 누가 더 빠르게 말하냐 밖에 안됩니다.

뭐 이것으로 성능 테스트도 가능하겠군요. 누구의 응답시간이 빠른 건가하는.. 하지만 일반 계산능력 시험이라는 한에선 절대 옳은 방식은 아닙니다. 그리고. kldp의 문제점이라고 볼 수는 있는 문제가 또 나오고 말았군요. 글 쓰는 입장에서 읽는 사람들도 생각하실 수 있었으면합니다. 개발자도 아닌 분이 어셈코드보고(개발자라도 어셈 모를 수도 있고) 말하고자 하는 바를 알기란 힘듭니다. 자신과 남을 같다고 생각는 것은 좋습니다. 그러나 자신과 남이라는 각각의 위치를 생각한 것이 바탕이 되어야 하지 똑같은 위치라고 생각하는 것은 엉뚱한 상상을 부릅니다.
또한 남이 조금 모른다고 해서 너무 몰아 붙이는 것도 좋지 않다고 생각합니다. 자신이 좀 잘났으면 잘난 만큼 다른 이들도 알기 쉽게 말할 줄 알았으면 합니다.
------------------------------------------------------------------------

'현실은 수학으로 표현할 수 없다.'
'수학은 거짓의 학문이다.'
'난 수학이 정말 싫다.'

jekyo의 이미지

재미있을 뻔 했을 글타래였는데 그냥 플레임이 되어버렸군요..

의미가 있고 없고를 떠나서 그렇게 상대방을 공격해야할만큼 심각한 논쟁거리는 아니었잖습니까?

unipro의 이미지

avelose wrote:
글타래를 잘 못 파악 했군요

제글의 의도를 잘 못 파악 했군요 :(

저의 의도는 "실제로 어떻게 최적화가 일어나는지 방법을 이해하는
것"이 아니라, "원하는 결과를 얻는 가장 빠른 상황에서의 연산에
가치를 둔 것으로 생각되는 분의 입장과 단지 그 연산을 하는 것에
목적이 있다고 여겨지는 분의 입장간에 차이가 있다" 입니다.

실행시간에 같은 결과를 내는 코드를 컴파일 시간에 처리했다는 것을
설명하는 것이 내가 두분의 글에서 느낀 점을 얘기하는데 중요한
것은 아니었습니다. :wink:

이 쓰레드가 수면위에 올라오지 않도록 해야 하는데 쓸데없는
글을 하나 적었군요. :oops:

내 블로그: http://unipro.tistory.com

voider의 이미지

아유 무서워라.... :shock:

-- 아쉬운 하루 되세요 --

ydhoney의 이미지

개인적인 생각입니다만, 자기 분야에서 안쓴다고 폄하할 필요는 없지 않을까요?

이건 마치 자기가 시스템프로그래밍을 하는데 시스템프로그래밍에서 Smalltalk를 쓰지 않으니

Smalltalk는 아무짝에도 쓸모가 없는 언어이다..라는 결론을 도출하는것으로 보입니다만..?

avelose의 이미지

커헉 그부분은 unipro님에게 한말이 아니었습니다.
제가 1페이지에 적으신 unipro님의 글을 보충하는 식으로 적다가 2페이지에 제 글과 같은 내용이 있는 것을 발견하고 그냥 지울까하다가 제가 글타래를 잘못 보고 적었다는 내용을 적은 것이었습니다. 기분 상하게 만들었다면 죄송합니다. 커헉..

'현실은 수학으로 표현할 수 없다.'
'수학은 거짓의 학문이다.'
'난 수학이 정말 싫다.'

버려진의 이미지

전 컴파일러의 뛰어난 능력에 원츄를 날리고 싶네요. (중얼)

s9204의 이미지

예전에 수업시간에 노교수님께 들은 이야기인데요.
컴퓨터가 거의 없던 시절에도 수치해석을 했다더군요. 일본에서 유학하시던 시절의 이야기인데

대학원생을 두그룹으로 나눕니다.

여관방을 두개 잡고 그 안에 집어 넣습니다.

똑같은 (수치해석)문제를 나눠주고 풀라고 합니다.
Runge-Kutta니 Gausse-Seidel 이니(철자 맞나?)이런것을 열심히 종이에 계산했겠죠.

답나올때까지 며칠동안 문밖출입이 금지인건 당연하겠죠?

두 방에서 답이 나오면 대조하고, 일치하면 올바른 수치해석이 수행되었습니다. 아니라면?

다시 방에 들어갑니다. ㅋㅋㅋ

믿고싶지 않지만 뻥치실 분이 아니라서 :lol:

버려진의 이미지

s9204 wrote:
예전에 수업시간에 노교수님께 들은 이야기인데요.
컴퓨터가 거의 없던 시절에도 수치해석을 했다더군요. 일본에서 유학하시던 시절의 이야기인데

대학원생을 두그룹으로 나눕니다.

여관방을 두개 잡고 그 안에 집어 넣습니다.

똑같은 (수치해석)문제를 나눠주고 풀라고 합니다.
Runge-Kutta니 Gausse-Seidel 이니(철자 맞나?)이런것을 열심히 종이에 계산했겠죠.

답나올때까지 며칠동안 문밖출입이 금지인건 당연하겠죠?

두 방에서 답이 나오면 대조하고, 일치하면 올바른 수치해석이 수행되었습니다. 아니라면?

다시 방에 들어갑니다. ㅋㅋㅋ

믿고싶지 않지만 뻥치실 분이 아니라서 :lol:

인구 증가 정책인가보군요. :lol:

ganadist의 이미지

p4에서 컴파일 옵션을 "-march=pentium4 -pipe -mmmx -msse -msse2 -frename-registers -fforce-addr -falign-functions=64 -fprefetch-loop-arrays -mfpmath=sse -fomit-frame-pointer -maccumulate-outgoing-args -mno-push-args" 로 주니 순식간에 끝나는군요.

----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러

warpdory의 이미지

촙5 wrote:
s9204 wrote:
예전에 수업시간에 노교수님께 들은 이야기인데요.
컴퓨터가 거의 없던 시절에도 수치해석을 했다더군요. 일본에서 유학하시던 시절의 이야기인데

대학원생을 두그룹으로 나눕니다.

여관방을 두개 잡고 그 안에 집어 넣습니다.

똑같은 (수치해석)문제를 나눠주고 풀라고 합니다.
Runge-Kutta니 Gausse-Seidel 이니(철자 맞나?)이런것을 열심히 종이에 계산했겠죠.

답나올때까지 며칠동안 문밖출입이 금지인건 당연하겠죠?

두 방에서 답이 나오면 대조하고, 일치하면 올바른 수치해석이 수행되었습니다. 아니라면?

다시 방에 들어갑니다. ㅋㅋㅋ

믿고싶지 않지만 뻥치실 분이 아니라서 :lol:

인구 증가 정책인가보군요. :lol:

동성끼리 몰아서 따로 따로 넣으면 인구는 늘지 않겠죠.
(그래서 일본에... .. 흠흠..)


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.