プチコン3号の変数代入スピードに関する実験
2015/04/11 SatoshiMcCloud
1.イントロダクション
プチコン3号のSmileBasicという言語では整数型より実数型の計算のほうが速いとか通常起こりえないことが起こっているらしい。
本実験では、型の違いなどによる計算速度の違いを明らかにするため、まずはもっともプリミティブな変数代入の速度を比較してみたい。
2.実験方法
図1.実験用プログラム
図のプログラムは、7行目の命令を1000000回実行し、その際にかかったフレーム数を表示する処理を10回行うものである。
これの7行目を、左辺を「A=」「A%=」「A#=」に、右辺を「0」「0.00」「1」「65535」「65535.75」「A」「A%」「A#」に変えながら実行し、それぞれにかかったフレーム数を比較する。その際、参考のために7行目をコメントアウトした状態でも実行し、記録する。
同様に、2行目のコメントアウトを解除し「OPTION DEFINT」を有効にした状態でもプログラムを実行し比較する。
3.実験結果
※旧式のNintendo3DSでプチコン3号ver3.1.0にて実験
OPTION DEFINT |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
なし |
左辺 |
なし |
A= |
A= |
A= |
A= |
A= |
A= |
A= |
A= |
A%= |
A%= |
A%= |
A%= |
A%= |
A%= |
A%= |
A%= |
A#= |
A#= |
A#= |
A#= |
A#= |
A#= |
A#= |
A#= |
右辺 |
なし |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
1回目 |
178 |
241 |
238 |
239 |
239 |
239 |
248 |
249 |
246 |
245 |
256 |
244 |
242 |
257 |
270 |
253 |
272 |
237 |
241 |
240 |
242 |
240 |
246 |
248 |
244 |
2回目 |
179 |
241 |
239 |
238 |
240 |
239 |
246 |
248 |
247 |
243 |
257 |
245 |
244 |
259 |
272 |
252 |
273 |
240 |
240 |
239 |
237 |
242 |
245 |
249 |
249 |
3回目 |
180 |
242 |
239 |
239 |
237 |
238 |
243 |
248 |
247 |
246 |
255 |
245 |
245 |
259 |
275 |
252 |
272 |
239 |
240 |
242 |
237 |
241 |
247 |
249 |
247 |
4回目 |
180 |
239 |
242 |
241 |
241 |
239 |
247 |
250 |
246 |
246 |
254 |
244 |
245 |
256 |
273 |
252 |
272 |
243 |
240 |
249 |
240 |
240 |
246 |
250 |
245 |
5回目 |
180 |
237 |
241 |
240 |
237 |
237 |
249 |
248 |
246 |
244 |
256 |
246 |
245 |
256 |
273 |
252 |
273 |
241 |
241 |
238 |
238 |
240 |
248 |
250 |
247 |
6回目 |
180 |
239 |
240 |
239 |
239 |
240 |
249 |
249 |
244 |
246 |
256 |
244 |
242 |
257 |
271 |
253 |
270 |
240 |
240 |
237 |
238 |
243 |
247 |
251 |
248 |
7回目 |
179 |
239 |
242 |
240 |
237 |
240 |
246 |
247 |
245 |
242 |
258 |
243 |
246 |
259 |
269 |
250 |
272 |
240 |
241 |
242 |
240 |
239 |
251 |
249 |
244 |
8回目 |
179 |
237 |
238 |
239 |
238 |
238 |
249 |
246 |
245 |
244 |
257 |
246 |
245 |
258 |
271 |
253 |
272 |
239 |
241 |
239 |
240 |
240 |
246 |
248 |
247 |
9回目 |
178 |
242 |
240 |
243 |
238 |
239 |
247 |
248 |
247 |
242 |
259 |
241 |
243 |
260 |
274 |
253 |
270 |
240 |
241 |
241 |
238 |
239 |
247 |
249 |
246 |
10回目 |
179 |
242 |
239 |
241 |
241 |
239 |
247 |
246 |
245 |
242 |
259 |
246 |
245 |
258 |
269 |
253 |
274 |
236 |
240 |
239 |
238 |
241 |
246 |
250 |
246 |
平均値 |
179.2 |
239.9 |
239.8 |
239.9 |
238.7 |
238.8 |
247.1 |
247.9 |
245.8 |
244 |
256.7 |
244.4 |
244.2 |
257.9 |
271.7 |
252.3 |
272 |
239.5 |
240.5 |
240.6 |
238.8 |
240.5 |
246.9 |
249.3 |
246.3 |
なし×3との差 |
0 |
60.7 |
60.6 |
60.7 |
59.5 |
59.6 |
67.9 |
68.7 |
66.6 |
64.8 |
77.5 |
65.2 |
65 |
78.7 |
92.5 |
73.1 |
92.8 |
60.3 |
61.3 |
61.4 |
59.6 |
61.3 |
67.7 |
70.1 |
67.1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPTION DEFINT |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
あり |
左辺 |
なし |
A= |
A= |
A= |
A= |
A= |
A= |
A= |
A= |
A%= |
A%= |
A%= |
A%= |
A%= |
A%= |
A%= |
A%= |
A#= |
A#= |
A#= |
A#= |
A#= |
A#= |
A#= |
A#= |
右辺 |
なし |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
1回目 |
176 |
226 |
246 |
224 |
227 |
243 |
241 |
241 |
263 |
225 |
249 |
224 |
228 |
246 |
239 |
239 |
263 |
225 |
235 |
227 |
230 |
233 |
246 |
245 |
243 |
2回目 |
175 |
225 |
246 |
226 |
227 |
243 |
242 |
241 |
261 |
227 |
245 |
225 |
227 |
244 |
240 |
239 |
260 |
227 |
236 |
227 |
226 |
235 |
247 |
247 |
244 |
3回目 |
173 |
223 |
247 |
225 |
225 |
244 |
241 |
240 |
259 |
226 |
245 |
228 |
225 |
244 |
244 |
243 |
263 |
227 |
236 |
227 |
226 |
232 |
247 |
248 |
244 |
4回目 |
173 |
225 |
247 |
225 |
226 |
244 |
244 |
242 |
263 |
225 |
244 |
225 |
225 |
243 |
242 |
244 |
262 |
226 |
237 |
225 |
227 |
236 |
247 |
246 |
244 |
5回目 |
174 |
225 |
249 |
223 |
225 |
245 |
239 |
240 |
260 |
226 |
245 |
225 |
222 |
240 |
244 |
241 |
262 |
226 |
235 |
224 |
227 |
232 |
246 |
244 |
243 |
6回目 |
177 |
225 |
247 |
226 |
221 |
243 |
241 |
243 |
261 |
229 |
244 |
227 |
224 |
243 |
242 |
241 |
263 |
223 |
236 |
225 |
227 |
232 |
246 |
246 |
243 |
7回目 |
173 |
225 |
245 |
225 |
224 |
244 |
241 |
242 |
259 |
227 |
248 |
226 |
224 |
245 |
242 |
243 |
263 |
229 |
236 |
224 |
226 |
233 |
245 |
246 |
243 |
8回目 |
174 |
226 |
246 |
227 |
223 |
244 |
238 |
242 |
260 |
226 |
248 |
225 |
225 |
241 |
238 |
243 |
263 |
226 |
236 |
228 |
226 |
234 |
244 |
245 |
244 |
9回目 |
175 |
225 |
247 |
226 |
226 |
244 |
240 |
242 |
257 |
228 |
245 |
225 |
224 |
242 |
241 |
240 |
263 |
227 |
237 |
228 |
225 |
234 |
245 |
244 |
243 |
10回目 |
174 |
226 |
246 |
228 |
224 |
241 |
243 |
240 |
264 |
227 |
249 |
224 |
227 |
244 |
242 |
242 |
263 |
226 |
235 |
226 |
222 |
233 |
246 |
246 |
244 |
平均値 |
174.4 |
225.1 |
246.6 |
225.5 |
224.8 |
243.5 |
241 |
241.3 |
260.7 |
226.6 |
246.2 |
225.4 |
225.1 |
243.2 |
241.4 |
241.5 |
262.5 |
226.2 |
235.9 |
226.1 |
226.2 |
233.4 |
245.9 |
245.7 |
243.5 |
なし×3との差 |
0 |
50.7 |
72.2 |
51.1 |
50.4 |
69.1 |
66.6 |
66.9 |
86.3 |
52.2 |
71.8 |
51 |
50.7 |
68.8 |
67 |
67.1 |
88.1 |
51.8 |
61.5 |
51.7 |
51.8 |
59 |
71.5 |
71.3 |
69.1 |
4.実験結果の整理と考察
|
|
|
|
|
|
|
|
|
|
デフォルト変数 |
左辺\右辺 |
0 |
0.0 |
1 |
65535 |
65535.75 |
A |
A% |
A# |
OPTION DEFINTなし |
A= |
60.7 |
60.6 |
60.7 |
59.5 |
59.6 |
67.9 |
68.7 |
66.6 |
A%= |
64.8 |
77.5 |
65.2 |
65.0 |
78.7 |
92.5 |
73.1 |
92.8 |
A#= |
60.3 |
61.3 |
61.4 |
59.6 |
61.3 |
67.7 |
70.1 |
67.1 |
OPTION DEFINTあり |
A= |
50.7 |
72.2 |
51.1 |
50.4 |
69.1 |
66.6 |
66.9 |
86.3 |
A%= |
52.2 |
71.8 |
51.0 |
50.7 |
68.8 |
67.0 |
67.1 |
88.1 |
A#= |
51.8 |
61.5 |
51.7 |
51.8 |
59.0 |
71.5 |
71.3 |
69.1 |
以下、「OPTION DEFINTなし」は「実数デフォルト」、「OPTION DEFINTあり」は「整数デフォルト」と表記
- 「A=」は、実数デフォルトでは「A#=」と、整数デフォルトでは「A%=」とほぼ変わらない。
- 実数デフォルトでは、
- 左辺が「A#=」「A=」の場合、右辺が定数のほうが変数のときより早い。右辺の中身が実数か整数かには左右されない。
- 左辺が「A%=」の場合、もちろん右辺が定数か変数かの影響を受けているが、それ以上に右辺の中身が実数か整数の影響を著しく大きく受けている。
- 右辺がどんな変数・定数であっても左辺が実数であったほうが代入スピードは速い
書きかけ中・・・