記事一覧

luaがなんでも速い訳じゃない

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

トラックバック一覧

nike hyperdunk from nike hyperdunk
ろばのみみ - luaがなんでも速い訳じゃない
2013年05月15日(水)18時11分 受信

コメント一覧

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.

trx workout Eメール URL 2013年06月09日(日)01時51分 編集・削除

This webpage has so a lot great details on it, I verify on it everyday. I wish other websites spent as a lot work as this one does generating data legible to readers like myself. I recommend this write-up to all of my facebook friends. This webpage will make some massive passive profit I’m positive. I hope my site does along with this one, it refers to jewelry consumers houston.

nike air max bw Eメール URL 2013年06月11日(火)16時29分 編集・削除

Hi there, just became alert to your blog through Google, and found that it is truly informative. I’m going to watch out for brussels. I’ll be grateful if you continue this in future. Lots of people will be benefited from your writing. Cheers!