TIL 이것은 다양합니다 (많음). 다음은 gnu 컴파일러를 사용한 몇 가지 결과입니다 (btw 나는 또한 기계에서 컴파일하여 확인했습니다. xenial의 gnu g ++ 5.4는 정확하게 linaro의 4.6.3보다 훨씬 빠릅니다)
인텔 i7 4700MQ 제니 얼
short add: 0.822491
short sub: 0.832757
short mul: 1.007533
short div: 3.459642
long add: 0.824088
long sub: 0.867495
long mul: 1.017164
long div: 5.662498
long long add: 0.873705
long long sub: 0.873177
long long mul: 1.019648
long long div: 5.657374
float add: 1.137084
float sub: 1.140690
float mul: 1.410767
float div: 2.093982
double add: 1.139156
double sub: 1.146221
double mul: 1.405541
double div: 2.093173
Intel i3 2370M의 결과도 비슷합니다.
short add: 1.369983
short sub: 1.235122
short mul: 1.345993
short div: 4.198790
long add: 1.224552
long sub: 1.223314
long mul: 1.346309
long div: 7.275912
long long add: 1.235526
long long sub: 1.223865
long long mul: 1.346409
long long div: 7.271491
float add: 1.507352
float sub: 1.506573
float mul: 2.006751
float div: 2.762262
double add: 1.507561
double sub: 1.506817
double mul: 1.843164
double div: 2.877484
Intel (R) Celeron (R) 2955U (xenial을 실행하는 Acer C720 Chromebook)
short add: 1.999639
short sub: 1.919501
short mul: 2.292759
short div: 7.801453
long add: 1.987842
long sub: 1.933746
long mul: 2.292715
long div: 12.797286
long long add: 1.920429
long long sub: 1.987339
long long mul: 2.292952
long long div: 12.795385
float add: 2.580141
float sub: 2.579344
float mul: 3.152459
float div: 4.716983
double add: 2.579279
double sub: 2.579290
double mul: 3.152649
double div: 4.691226
DigitalOcean 1GB Droplet Intel (R) Xeon (R) CPU E5-2630L v2 (트러스티 실행)
short add: 1.094323
short sub: 1.095886
short mul: 1.356369
short div: 4.256722
long add: 1.111328
long sub: 1.079420
long mul: 1.356105
long div: 7.422517
long long add: 1.057854
long long sub: 1.099414
long long mul: 1.368913
long long div: 7.424180
float add: 1.516550
float sub: 1.544005
float mul: 1.879592
float div: 2.798318
double add: 1.534624
double sub: 1.533405
double mul: 1.866442
double div: 2.777649
AMD Opteron (tm) 프로세서 4122 (정밀)
short add: 3.396932
short sub: 3.530665
short mul: 3.524118
short div: 15.226630
long add: 3.522978
long sub: 3.439746
long mul: 5.051004
long div: 15.125845
long long add: 4.008773
long long sub: 4.138124
long long mul: 5.090263
long long div: 14.769520
float add: 6.357209
float sub: 6.393084
float mul: 6.303037
float div: 17.541792
double add: 6.415921
double sub: 6.342832
double mul: 6.321899
double div: 15.362536
이것은 http://pastebin.com/Kx8WGUfg의 코드를 다음 과 같이 사용합니다.benchmark-pc.c
g++ -fpermissive -O3 -o benchmark-pc benchmark-pc.c
여러 번 통과했지만 일반적인 숫자가 동일한 경우 인 것 같습니다.
한 가지 주목할만한 예외는 ALU mul 대 FPU mul 인 것 같습니다. 덧셈과 뺄셈은 사소하게 다르게 보입니다.
위의 차트 형식은 다음과 같습니다 (전체 크기를 보려면 클릭, 낮을수록 더 빠르고 선호 됨) :
@Peter Cordes를 수용하도록 업데이트
https://gist.github.com/Lewiscowles1986/90191c59c9aedf3d08bf0b129065cccc
i7 4700MQ Linux Ubuntu Xenial 64 비트 (2018-03-13에 대한 모든 패치 적용)
short add: 0.773049
short sub: 0.789793
short mul: 0.960152
short div: 3.273668
int add: 0.837695
int sub: 0.804066
int mul: 0.960840
int div: 3.281113
long add: 0.829946
long sub: 0.829168
long mul: 0.960717
long div: 5.363420
long long add: 0.828654
long long sub: 0.805897
long long mul: 0.964164
long long div: 5.359342
float add: 1.081649
float sub: 1.080351
float mul: 1.323401
float div: 1.984582
double add: 1.081079
double sub: 1.082572
double mul: 1.323857
double div: 1.968488
AMD Opteron (tm) 프로세서 4122 (정밀, DreamHost 공유 호스팅)
short add: 1.235603
short sub: 1.235017
short mul: 1.280661
short div: 5.535520
int add: 1.233110
int sub: 1.232561
int mul: 1.280593
int div: 5.350998
long add: 1.281022
long sub: 1.251045
long mul: 1.834241
long div: 5.350325
long long add: 1.279738
long long sub: 1.249189
long long mul: 1.841852
long long div: 5.351960
float add: 2.307852
float sub: 2.305122
float mul: 2.298346
float div: 4.833562
double add: 2.305454
double sub: 2.307195
double mul: 2.302797
double div: 5.485736
Intel Xeon E5-2630L v2 @ 2.4GHz (Trusty 64 비트, DigitalOcean VPS)
short add: 1.040745
short sub: 0.998255
short mul: 1.240751
short div: 3.900671
int add: 1.054430
int sub: 1.000328
int mul: 1.250496
int div: 3.904415
long add: 0.995786
long sub: 1.021743
long mul: 1.335557
long div: 7.693886
long long add: 1.139643
long long sub: 1.103039
long long mul: 1.409939
long long div: 7.652080
float add: 1.572640
float sub: 1.532714
float mul: 1.864489
float div: 2.825330
double add: 1.535827
double sub: 1.535055
double mul: 1.881584
double div: 2.777245
addl
로 대체 됨fadd
). 실제로 좋은 측정을 얻는 유일한 방법은 실제 프로그램의 핵심 부분을 얻고 다른 버전을 프로파일 링하는 것입니다. 안타깝게도 많은 노력을 기울이지 않고도 꽤 어려울 수 있습니다. 아마도 우리에게 타겟 하드웨어와 컴파일러를 알려 주면 사람들이 최소한 기존 경험 등을 제공하는 데 도움이 될 것입니다. 정수 사용에 관해서fixed_point
는 그러한 작업을 엄청나게 쉽게 할 수있는 일종의 템플릿 클래스를 만들 수있을 것 같습니다.