java와 jni의 성능비교를하고잇는데 이해할수없는 현상이 일어낫습니다.
똑같은 코드를 jni와 java에서 구동한 결과 java가 더 빠르다는 결과가 나온것입니다.
문제는 float배열 의 연산속도였습니다.
-------------------
C코드 (jni)
-------------------
float test[1024];
void test_test()
{
int i;
for ( i=0; i<100000000; i++)
{
test[10] = test[10] + test[11];
}
}
작업시간 1580 ms
작업시간 1586 ms
작업시간 1501 ms
작업시간 1580 ms
----------------
JAVA코드
----------------
float test = new test[1024];
public int test(){
int i;
for ( i=0; i<100000000; i++)
{
test[10] = test[10] + test[11];
}
}
작업시간 3781 ms
작업시간 1398 ms
작업시간 1287 ms
작업시간 1293 ms
처음 호출했을때 읽는속도때문에 c보다 더 느립니다. 하지만 그 뒤론느 c보다 더 빠른 속도를 보이고있습니다.
여기까지는 정말 이해가 안되는겁니다.
java가 c를 이기다니.... native를 vm이 이기다니..
이러면서 c보다는 jni가 문제라며 jni를 비난하고있었습니다.
그러다가 문뜩 float를 int로 바꿔봤습니다.
-------------------
C코드 (jni)
-------------------
int test[1024];
void test_test()
{
int i;
for ( i=0; i<100000000; i++)
{
test[10] = test[10] + test[11];
}
}
아.. 뭐.. flaot가 int보다 연산이 많은건 알겠습니다...
그런데 그렇다고 java보다 느려질거까진 없잖아요..?
혹시 float 버그인가 해서. double도 해봤지만 float와 비슷한 결과...
도대체 뭐가 문제일까요? 그냥 제가 뭔가 잘못한거라면 좋겠는데.. ㅠㅠ
c는 그적그적해서 뭐가 문제인지 모르겠네요.
혹시 왜 float연산이 java보다 느린지 아시는분계신가요?