Lua v.s. Lua-Jit
Lua-JITを試してみました.
Kyoto Tychoonで使えるという話を見かけましたので.
かずぽんブログ • kyototycoonのLuaスクリプティング拡張をLuaJITにしてみた
# cd /usr/ports/lang/lua # make # make install # /usr/local/bin/lua51/lua -v Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio # ls -l /usr/local/lib/lua51/liblua.* -r--r--r-- 1 root wheel 213184 Nov 4 14:33 /usr/local/lib/lua51/liblua.a lrwxr-xr-x 1 root wheel 15 Nov 4 14:33 /usr/local/lib/lua51/liblua.so -> liblua-5.1.so.1
# cd /usr/ports/lang/luajit/ # make # make install # /usr/local/bin/luajit -v LuaJIT 2.0.0 -- Copyright (C) 2005-2012 Mike Pall. http://luajit.org/ # ls -l /usr/local/lib/libluajit-5.1.* -rw-r--r-- 1 root wheel 542912 Nov 4 20:02 /usr/local/lib/libluajit-5.1.a lrwxr-xr-x 1 root wheel 22 Nov 4 20:02 /usr/local/lib/libluajit-5.1.so.2 -> libluajit-5.1.so.2.0.0 -rwxr-xr-x 1 root wheel 384944 Nov 4 20:02 /usr/local/lib/libluajit-5.1.so.2.0.0
まずは,適当に,ただのforループのテストをします.
# /usr/local/bin/lua51/lua -e 'local starttime = os.time(); for i = 0, 1000000000, 1 do local a=0; end; local endtime=os.time();print(os.difftime(endtime,starttime));' 18 # /usr/local/bin/luajit -e 'local starttime = os.time(); for i = 0, 1000000000, 1 do local a=0; end; local endtime=os.time();print(os.difftime(endtime,starttime));' 1
1億回のループが,18秒から1秒に?!
C言語だとどうなのでしょう.
/********** * cc test.cc -o test -Wall **********/ #include <stdio.h> #include <time.h> int main() { time_t starttime, endtime; int i; starttime = time(NULL); for (i = 0; i < 1000000000; ++i) { int a = 0; } endtime = time(NULL); printf("%d\n", endtime - starttime); return(0); }
やってみて分かったのですが,最適化オプションによって大きく変わりました.
# cc test.c -o test -Wall -O0; ./test test.c: In function 'main': test.c:16: warning: unused variable 'a' 4 # cc test.c -o test -Wall -O1 ; ./test test.c: In function 'main': test.c:16: warning: unused variable 'a' 0
- O0だと4秒,-O1だとゼロ秒と,一応,C言語の貫禄を見せつけました.