luaとperlなどの速度比較は少し検索すればいろいろ出てきますが、どれもluaが圧倒的に速いことになっています。
まあ確かに単純なループを回せば、perlの3倍くらい速いです。
で、FXの指標計算のためのperlスクリプト(約800行)をluaで書き直してみました。時は金ですからね。
さぞや速くなるかと思いきや、激遅じゃないですか。書きなおすの結構しんどかったのに・・・
何が遅いかと調べたら、perlのsplitとjoinに相当する関数です。
luaにはsplitに相当する標準関数は無いので、ネットで拾ってきて定義していますが。
luaのtable.concatは、perlのjoinの10倍以上遅いです。
タブ区切りとかのテキストファイル←→配列、というperlの王道?手法はluaには向かないようですね。
以下はテストスクリプトと実行結果です。
luaのスクリプト:
function split(delim, str)
if string.find(str, delim) == nil then
return { str }
end
local result = {}
local pat = "(.-)" .. delim .. "()"
local lastPos
for part, pos in string.gfind(str, pat) do
table.insert(result, part)
lastPos = pos
end
table.insert(result, string.sub(str, lastPos))
return result
end
loop = 1000000
a = {"abc", 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9}
t1 = os.clock()
for i = 0, loop do
b = table.concat(a, "\t")
end
t2 = os.clock()
print(loop.." times of table.concat: "..(t2 - t1).." sec")
t3 = os.clock()
for i = 0, loop do
aa = split("\t", b)
end
t4 = os.clock()
print(loop.." times of split: "..(t4 - t3).." sec")
---------------------------------
1000000 times of table.concat: 6.857 sec
1000000 times of split: 5.236 sec
---------------------------------
perlのスクリプト:
$loop = 1000000;
@a = ("abc", 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9);
$t1 = scalar(times);
for($i = 0; $i <= $loop; $i++) {
$b = join("\t", @a);
}
$t2 = scalar(times);
print $loop." times of join: ".($t2 - $t1)." sec\n";
$t3 = scalar(times);
for($i = 0; $i <= $loop; $i++) {
@aa = split("\t", $b);
}
$t4 = scalar(times);
print $loop." times of split: ".($t4 - $t3)." sec\n";
---------------------------------
1000000 times of join: 0.561 sec
1000000 times of split: 1.81 sec
---------------------------------
実行環境:
OS: Windows 7 64bit
CPU: AMD Phenom II X6 1090T @3.8GHz
luaforwindows 5.1.4
ActivePerl x64 5.14.2
trx force kit Eメール URL 2013年06月08日(土)03時05分 編集・削除
You got some beneficial ideas there. I did a search over a trouble and learnt most peoples will agree in your blog. If you are an experienced traveler, you’ll be able to know the ins and outs of travel to all parts with the world, and it is possible to have really specific ideas about what you need to see and in which you desire to go.