과연 LuaJIT 가 2~10배 정도 속도가 나온다 나온다 말만 듣다가
이제서야 테스트를 해봅니다.
결과부터 말씀드리자면 상당히 놀라운 결과였습니다.
일단 테스트용 Lua 코드는 다음과 같습니다.
function TrafficTest()
for i = 0 , 10000, 1 do
iii = i * i*i*i*i*i*i*i*i*i*i*i
--중략, iii = i * i*i*i*i*i*i*i*i*i*i*i 와 같은 코드가 200라인 정도 있습니다.
end
end
테스트한 C++ 코드는 다음과 같습니다.
루아 팅커를 사용하여 lua 함수를 호출하였습니다.
int _tmain(int argc, _TCHAR* argv[])
{
lua_State *L = lua_open();
luaL_openlibs(L);
int Start, End;
printf("LuaJIT Performance Test\n");
printf("case one, LuaJIT is activated\n");
//LuaJIT on, 디폴트 상태로 켜져있지만 명시적으로 한번 더 넣어주고 한다.
luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE|LUAJIT_MODE_ON);
lua_tinker::dofile(L, "TestFunction.lua");
Start = GetTickCount();
//루프의 수를 10, 100, 1000 순서대로 늘려가면서 복잡도를 증가시켰습니다.
for (int i = 0; i < 10; i++)
{
lua_tinker::call<void>(L, "TrafficTest");
}
End = GetTickCount();
printf("Process Time : %d\n", End - Start);
//Case Two JIT off
printf("case two, LuaJIT is deactivated\n");
luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE|LUAJIT_MODE_OFF);
lua_tinker::dofile(L, "TestFunction.lua");
Start = GetTickCount();
//루프의 수를 10, 100, 1000 순서대로 늘려가면서 복잡도를 증가시켰습니다.
for (int i = 0; i < 10; i++)
{
lua_tinker::call<void>(L, "TrafficTest");
}
End = GetTickCount();
printf("Process Time : %d\n", End - Start);
return 0;
}
결과는 경이적이다 못해 충격적(일천한 제 경험 탓 일수도 있습니다만, 이게 과연 스크립트언어인가 할 정도로)입니다.
10(c 루프 횟수) x 10000(lua 루프 횟수)
JIT 사용시 : 0 ms
JIT 미사용시 : 2406 ms
100(c 루프 횟수) x 10000(lua 루프 횟수)
JIT 사용시 : 16 ms
JIT 미사용시 : 23937 ms
1000(c 루프 횟수) x 10000(lua 루프 횟수)
JIT 사용시 : 187 ms
JIT 미사용시 : 240016 ms
스크린샷을 올릴 방법을 몰라 텍스트로 일일이 쳐서 올립니다.
스크린샷을 포함한 글은 http://captainthomas.tistory.com/ 에서
보실 수 있습니다.
LuaJIT 테스트 해봤습니다.
Moderator: 류광
-
- Posts: 3805
- Joined: 2001-07-25 09:00
- Location: GPGstudy
- Contact:
좋은 내용 고맙습니다~
블로그 자체에 링크를 거셨는데 시간이 지나면 뒤로 밀릴테니 글 자체에 링크 겁니다:
캡틴☆토마스 :: LuaJIT 의 성능 테스트
그리고 지금 이 게시판 성격과는 살짝 어긋난 느낌이 있는데요... 다음 번에는 블로그에 쓰신 글을 글을 소개하는 형태로 소식을 써주시면 작성하시기에도 편하고 게시판 성격과 좀 더 잘 맞을 것 같습니다.
블로그 자체에 링크를 거셨는데 시간이 지나면 뒤로 밀릴테니 글 자체에 링크 겁니다:
캡틴☆토마스 :: LuaJIT 의 성능 테스트
그리고 지금 이 게시판 성격과는 살짝 어긋난 느낌이 있는데요... 다음 번에는 블로그에 쓰신 글을 글을 소개하는 형태로 소식을 써주시면 작성하시기에도 편하고 게시판 성격과 좀 더 잘 맞을 것 같습니다.
-
- Posts: 244
- Joined: 2002-05-09 09:00
오래간만에 GPG에 올리는 글이네요.
elluard 님의 글을 읽고 저도 한 번 테스트 해 봤습니다.
http://oranke.tistory.com/93
결론은?? 적재에는 시간이 좀 더 걸리고 실행에는 많이 빨라지더군요. ^^;;
elluard 님의 글을 읽고 저도 한 번 테스트 해 봤습니다.
http://oranke.tistory.com/93
결론은?? 적재에는 시간이 좀 더 걸리고 실행에는 많이 빨라지더군요. ^^;;
-
- Posts: 587
- Joined: 2004-05-09 20:37
링크를 따라 읽어봤는데oranke wrote:오래간만에 GPG에 올리는 글이네요.
elluard 님의 글을 읽고 저도 한 번 테스트 해 봤습니다.
http://oranke.tistory.com/93
결론은?? 적재에는 시간이 좀 더 걸리고 실행에는 많이 빨라지더군요. ^^;;
luaL_loadbuffer() 이걸로 테스트는 하는건 더 느려질수 밖에 없지 않나여?
그 함수로 특정 함수를 호출하는건 매번 파싱및 최적화 컴파일을 실행을 해야 하기때문이 아닐지
이미 컴파일된 상태의 함수호출로만 따져야 하지 않나 싶습니다
[보통 처음 시작할때 혹은 로딩? 아니면 특정 이벤트시에 , 루아소스를 컴파일해 읽는 작업을 하지 않나 싶습니다 ]
한마디로 적재로 거론 하신 내용은 무의미 하지 않을까요?
-
- Posts: 244
- Joined: 2002-05-09 09:00
mastercho 님 말씀대로 입니다.
저 시간이 의미를 가지는 건, 제가 만든 구조가 거지같아서에요. ㅠㅠ;;
초기에 루아를 적용하면서 기존 시스템의 스크립트 호출을 단순히 대체하는 방법을 사용했습니다. 몬스터가 죽으면 *** 루아파일을 실행시키면서 그 안의 ScriptMain()에 적절한 인자를 던져주는 방법으로 말이죠.
지금은 트리거가 루아 파일을 직접 실행하지 않고 이미 적재된 루아함수를 돌리는 방식으로 많이 변경되었지만, 예전에 만들었던 퀘스트들이 모두 이런 방식으로 바뀔 때 까지는 함께 혼용해야 하는 상황입니다. ^^;;
저 시간이 의미를 가지는 건, 제가 만든 구조가 거지같아서에요. ㅠㅠ;;
초기에 루아를 적용하면서 기존 시스템의 스크립트 호출을 단순히 대체하는 방법을 사용했습니다. 몬스터가 죽으면 *** 루아파일을 실행시키면서 그 안의 ScriptMain()에 적절한 인자를 던져주는 방법으로 말이죠.
지금은 트리거가 루아 파일을 직접 실행하지 않고 이미 적재된 루아함수를 돌리는 방식으로 많이 변경되었지만, 예전에 만들었던 퀘스트들이 모두 이런 방식으로 바뀔 때 까지는 함께 혼용해야 하는 상황입니다. ^^;;