この記事はアドカレに参加しています。
luajitでもbit演算できるらしい
先日、19日目の記事を読みました。なんか、luajitでもbit演算できるみたいですね。
ところで、aviutlの独自関数にもSHIFTというものがあります。
同じ機能、、、
高速化手段、、、
準備に手間がかからない、、、
簡単、、、
そう、時間を計測してどっちが速いのか確かめたくなりますね。
コード
コードを以下に示します。
テキストボックスにコピペすると、patch.aulのコンソールに計測結果が表示されます。
<?
local t1,t2
local d=require("M_Blur_Module")
t1=d.time()--normal計測開始
local a=1
for i=0,100000 do
a=a*256
a=a/256
end
t2=d.time()--normal計測終了
local TIME=t2-t1
debug_print(a)
debug_print(string.format("normal : %f[ms]",TIME))
t1=d.time()--aviutl計測開始
local a=1
for i=0,100000 do
a=SHIFT(a,8)
a=SHIFT(a,-8)
end
t2=d.time()--aviutl計測終了
local TIME=t2-t1
debug_print(a)
debug_print(string.format("aviutl : %f[ms]",TIME))
t1=d.time()--luajit計測開始
local bit=require("bit")
local a=1
for i=0,100000 do
a=bit.lshift(a,8)
a=bit.rshift(a,8)
end
t2=d.time()--luajit計測終了
local TIME=t2-t1
debug_print(a)
debug_print(string.format("luajit : %f[ms]",TIME))
debug_print("\n")
?>
結果
普通の演算、SHIFT関数、bit.~の順番に表示されるので、その結果の一部を以下に示します。
patch.aul
[20:28:03] 1
[20:28:03] normal : 0.471600[ms]
[20:28:03] 1
[20:28:03] aviutl : 7.597200[ms]
[20:28:03] 1
[20:28:03] luajit : 0.121300[ms]
[20:28:03]
[20:28:04] 1
[20:28:04] normal : 0.362400[ms]
[20:28:04] 1
[20:28:04] aviutl : 5.965100[ms]
[20:28:04] 1
[20:28:04] luajit : 0.181900[ms]
[20:28:04]
[20:28:04] 1
[20:28:04] normal : 0.264100[ms]
[20:28:04] 1
[20:28:04] aviutl : 5.277200[ms]
[20:28:04] 1
[20:28:04] luajit : 0.275000[ms]
[20:28:04]
[20:28:05] 1
[20:28:05] normal : 0.355300[ms]
[20:28:05] 1
[20:28:05] aviutl : 5.236900[ms]
[20:28:05] 1
[20:28:05] luajit : 0.192200[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.377300[ms]
[20:28:05] 1
[20:28:05] aviutl : 5.495800[ms]
[20:28:05] 1
[20:28:05] luajit : 0.268300[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.364400[ms]
[20:28:05] 1
[20:28:05] aviutl : 5.702700[ms]
[20:28:05] 1
[20:28:05] luajit : 0.204600[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.356200[ms]
[20:28:05] 1
[20:28:05] aviutl : 5.459700[ms]
[20:28:05] 1
[20:28:05] luajit : 0.246400[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.359800[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.340700[ms]
[20:28:05] 1
[20:28:05] luajit : 0.164700[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.448500[ms]
[20:28:05] 1
[20:28:05] aviutl : 6.729800[ms]
[20:28:05] 1
[20:28:05] luajit : 0.156100[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.329900[ms]
[20:28:05] 1
[20:28:05] aviutl : 6.056100[ms]
[20:28:05] 1
[20:28:05] luajit : 0.191300[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.500800[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.507000[ms]
[20:28:05] 1
[20:28:05] luajit : 0.168000[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.526800[ms]
[20:28:05] 1
[20:28:05] aviutl : 6.608800[ms]
[20:28:05] 1
[20:28:05] luajit : 0.179300[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.549300[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.195000[ms]
[20:28:05] 1
[20:28:05] luajit : 0.158800[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.393800[ms]
[20:28:05] 1
[20:28:05] aviutl : 6.150200[ms]
[20:28:05] 1
[20:28:05] luajit : 0.183900[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.409400[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.438400[ms]
[20:28:05] 1
[20:28:05] luajit : 0.163300[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.522100[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.759400[ms]
[20:28:05] 1
[20:28:05] luajit : 0.203800[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.496600[ms]
[20:28:05] 1
[20:28:05] aviutl : 9.940500[ms]
[20:28:05] 1
[20:28:05] luajit : 0.154200[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.357300[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.445300[ms]
[20:28:05] 1
[20:28:05] luajit : 0.165500[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.476500[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.427600[ms]
[20:28:05] 1
[20:28:05] luajit : 0.167600[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.557000[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.452300[ms]
[20:28:05] 1
[20:28:05] luajit : 0.169400[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.500100[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.896800[ms]
[20:28:05] 1
[20:28:05] luajit : 0.176800[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.503100[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.418200[ms]
[20:28:05] 1
[20:28:05] luajit : 0.140100[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.600300[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.284200[ms]
[20:28:05] 1
[20:28:05] luajit : 0.200100[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.494000[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.328000[ms]
[20:28:05] 1
[20:28:05] luajit : 0.145800[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.385900[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.974600[ms]
[20:28:05] 1
[20:28:05] luajit : 0.174700[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.410800[ms]
[20:28:05] 1
[20:28:05] aviutl : 6.615500[ms]
[20:28:05] 1
[20:28:05] luajit : 0.160600[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.494300[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.241100[ms]
[20:28:05] 1
[20:28:05] luajit : 0.144100[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.479600[ms]
[20:28:05] 1
[20:28:05] aviutl : 8.411200[ms]
[20:28:05] 1
[20:28:05] luajit : 0.169900[ms]
[20:28:05]
[20:28:05] 1
[20:28:05] normal : 0.451300[ms]
[20:28:05] 1
[20:28:05] aviutl : 7.938900[ms]
[20:28:05] 1
[20:28:05] luajit : 0.138800[ms]
[20:28:05]
[20:28:06] 1
[20:28:06] normal : 1.403000[ms]
[20:28:06] 1
[20:28:06] aviutl : 7.887800[ms]
[20:28:06] 1
[20:28:06] luajit : 0.182800[ms]
[20:28:06]
やはりluajitは速いですね~
SHIFT関数が遅いのは、aviutlのデフォルト状態(lua5.1)に比べると速いとか、そんなかんじなんですかね…
さいごに
みなさんluajitを使いましょう…………と言いたいところですが、どうやらlua5.4が意外と速いらしいですね。僕の手元にlua5.4環境がないので、時間があるときに試してみたいです。(aviutlではlua5.4を使用できないので、別途でプログラムを書く必要がありそう?)