YAPC::Kansai 2017 OSAKA でのrisouさんのスライドから
- プログラミングPerlの勉強もあるんだけど、その前にどうしても試したいので試したのがこれ
高速化の初歩
https://www.slideshare.net/risou/first-step-of-performance-tuning
- これを見て写経して
use Benchmark
- 注:100回ほど比較してますんで、ローカルで試す時は適当に調整を
use strict; use warnings; use Benchmark qw/cmpthese/; use Clone qw/clone/; cmpthese( 100, { "AOS" => \&AOS, "SOA" => \&SOA, } ); # Array of Struct sub AOS { my $aos = []; for ( 1 .. 100_000 ) { push @$aos, { number => $_, double => $_ * 2 }; } my $copy = clone($aos); } # Struct of Array sub SOA { my $soa = {}; my @numbers; my @doubles; my @count; for ( 1 .. 100_000 ) { push @numbers, $_; push @doubles, $_ * 2; } $soa = { number => \@numbers, double => \@doubles }; my $copy = clone($soa); } # s/iter AOS SOA # AOS 1.00 -- -66% # SOA 0.345 191% -- [Finished in 136.1s]
- なるほど。
- Array of Struct で書いている自分のコードもあるから、Struct of Array で書き直すの楽しみになってきた
その他
use Data::Dumper
して出力しないとデータの構造が頭に浮かばなくて、全然修行足りてない。がんばる