回答編集履歴
1
コードの間違いを訂正
answer
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
訂正:スミマセン!除算のコードが間違って乗算になってました。コードと測定結果を訂正いたします。
|
2
|
+
|
3
|
+
---
|
1
4
|
回答にはならないのですが、64bitのPCのプロセッサの性能を試したときに驚いた結果(おじさんなもので驚いたといった方がいいのかも知れませんが)をご紹介してみようと思います。
|
2
5
|
|
3
6
|
```C
|
@@ -52,12 +55,12 @@
|
|
52
55
|
DEFINE(F, c, mul, *, 0, 8, 16)
|
53
56
|
DEFINE(D, c, mul, *, 0, 8, 16)
|
54
57
|
|
55
|
-
DEFINE(C, c, div,
|
58
|
+
DEFINE(C, c, div, /, 0, 8, 16) // 元は第四引数が/ではなく*になってました
|
56
|
-
DEFINE(S, c, div,
|
59
|
+
DEFINE(S, c, div, /, 0, 8, 16)
|
57
|
-
DEFINE(I, c, div,
|
60
|
+
DEFINE(I, c, div, /, 0, 8, 16)
|
58
|
-
DEFINE(L, c, div,
|
61
|
+
DEFINE(L, c, div, /, 0, 8, 16)
|
59
|
-
DEFINE(F, c, div,
|
62
|
+
DEFINE(F, c, div, /, 0, 8, 16)
|
60
|
-
DEFINE(D, c, div,
|
63
|
+
DEFINE(D, c, div, /, 0, 8, 16)
|
61
64
|
|
62
65
|
void test(int (*f)(void), const char *label) {
|
63
66
|
double sum = 0, sum2 = 0;
|
@@ -100,24 +103,24 @@
|
|
100
103
|
```
|
101
104
|
結果(各々20回測定した際の平均と標準偏差)
|
102
105
|
```text
|
103
|
-
0.
|
106
|
+
0.241 sec ( 0.008) C/c + 0
|
104
|
-
0.
|
107
|
+
0.248 sec ( 0.006) S/c + 0
|
105
|
-
0.
|
108
|
+
0.269 sec ( 0.011) I/c + 0
|
106
|
-
0.
|
109
|
+
0.250 sec ( 0.000) L/c + 0
|
107
110
|
0.263 sec ( 0.006) F/c + 0
|
108
|
-
0.
|
111
|
+
0.256 sec ( 0.009) D/c + 0
|
109
|
-
0.
|
112
|
+
0.248 sec ( 0.015) C/c * 0
|
110
|
-
0.
|
113
|
+
0.250 sec ( 0.010) S/c * 0
|
111
|
-
0.
|
114
|
+
0.252 sec ( 0.006) I/c * 0
|
112
|
-
0.
|
115
|
+
0.270 sec ( 0.010) L/c * 0
|
113
|
-
0.
|
116
|
+
0.255 sec ( 0.009) F/c * 0
|
114
|
-
0.
|
117
|
+
0.259 sec ( 0.008) D/c * 0
|
118
|
+
0.394 sec ( 0.012) C/c / 0 //元のコードでは乗算の性能になってました。除算はやはり少し遅いw
|
119
|
+
0.431 sec ( 0.008) S/c / 0
|
120
|
+
0.384 sec ( 0.010) I/c / 0
|
121
|
+
0.398 sec ( 0.029) L/c / 0
|
115
|
-
0.
|
122
|
+
0.253 sec ( 0.012) F/c / 0
|
116
|
-
0.250 sec ( 0.005) S/c / 0
|
117
|
-
0.270 sec ( 0.012) I/c / 0
|
118
|
-
0.252 sec ( 0.006) L/c / 0
|
119
|
-
0.
|
123
|
+
0.381 sec ( 0.007) D/c / 0
|
120
|
-
0.254 sec ( 0.008) D/c / 0
|
121
124
|
```
|
122
125
|
|
123
126
|
自分の環境は以下です。今時のPCとして平均をかなり下回っている気がします。4万円のPCなので...
|
@@ -141,6 +144,7 @@
|
|
141
144
|
|
142
145
|
- こういう測定ではもはや整数型も浮動小数型も実際上の速度は同程度
|
143
146
|
- 加算や乗算や除算の機械語命令は必要クロック数が異なる気がするが差が見えない
|
147
|
+
(訂正:間違って除算でなく乗算になってしまた!除算に訂正したところ加算・乗算より除算が遅い結果になりました。除算が遅いという結果になった方がむしろ自分には自然に思えました!)
|
144
148
|
|
145
149
|
しかし実はメモリーアクセスが遅くてプロセッサーの演算スピードの差が見える前にメモリーアクセスのボトルネックで頭打ちになっているということの方がありそうな気がします。
|
146
150
|
|