Swift array map の性能測定の続き
前回の続き
前回の記事に対して@es_kumagai さんからフィードバックをいただきました。
今週忙しくて、やっと見る時間が取れました。
結論から言うと、今回の検証方法(ターミナルからswiftやswiftc を利用する)においては、標準のmapより速い実装が手に入りました。
たった1000件での比較ですが、こうなりました。前回から計測方法も多少改善しました。手抜きですみません。
map : 0.000211954116821289 map7: 0.000133037567138672
まあ1/10000 秒の差とか、もはやモバイル開発においてはどうでもいい話ですね。めちゃくちゃ大量のデータ扱うこともそう滅多にないでしょうし。
ボトルネックはやはりarrayの初期化だったようです。
コードはフィードバックでいただいたものを貼っておきますね。ありがとうございます。
-O
オプション
なお、-O
をつけるとDouble値の出力がおかしくなりました。
どうして。。?
$ xcrun -sdk macosx swiftc -O map.swift $ ./map === : 0.000318050384521484 map : 0.000821113586425781 map : 5.79357147216797e-05 map7: 3.00407409667969e-05 map : 5.10215759277344e-05 map7: 2.88486480712891e-05 map : 5.10215759277344e-05 map7: 2.62260437011719e-05 map : 4.98294830322266e-05 map7: 2.59876251220703e-05
計測に使用したコードはこちらにあげました。
なおコマンドラインから指定できるコンパイルオプションはこうなっているようです。
-Onone Compile without any optimization -Ounchecked Compile with optimizations and remove runtime safety checks -O Compile with optimizations
通常は-Onone
が使われているようです。
まとめ
ひとまず今回の検証方法においては、標準のmapより速い実装が手に入りました。
ちなみに、Playgroundではこうなります。
map : 0.181938886642456 map7 : 0.619832992553711
モヤっとしますね。
まだまだ不明点だらけで、勉強しないといけないことが山積みだということがわかりました。
以上です。