루프의 실행 시간을 측정하려고합니다. 이는 간단한 행렬 추가입니다. 때로는 예를 m로 I 입력 1000 N에 대해 0을 반환getCurrentThreadUserTime()을 사용하여 실행 시간 가져 오기
//get integers m and n from user before this.
long start,end,time;
int[][] a = new int[m][n];
int[][] b = new int[m][n];
int[][] c= new int[m][n];
start = getUserTime();
for(int i = 0;i < m;i++)
{
for(int j = 0;j < n;j++)
{
c[i][j] = a[i][j]+b[i][j];
}
}
end = getUserTime();
time = end - start;
/** Get user time in nanoseconds. */
public long getUserTime() {
ThreadMXBean bean = ManagementFactory.getThreadMXBean();
return bean.isCurrentThreadCpuTimeSupported() ?
bean.getCurrentThreadUserTime() : 0L;
}
문제가 : 여기 내 코드입니다. 즉 두 개의 1000x1000 행렬이 추가됩니다. 때로는 0과 때로는 15ms를 반환합니다 (둘 다 계속 반복됩니다).
나는 15ms 또는 0. 믿을 지 모르겠다. 그들 사이에 큰 차이가있다. 정확도는 OS 의존적이며 정확한 나노초는 아니지만 15 밀리 초는 정확도 문제가 될 수 있습니다.
편집 :이 코드의 목적은 루프의 CPU 성능을 측정하는 것이 었습니다. 가능하다면 컴파일러 최적화와 OS 컨텍스트 전환 등의 영향을 최소화하고 싶습니다.
많은 감사.
이 어떻게 자바에서 나노 초 단위로 현재 시간을 얻을 수 있나요? 가능한지 확실하지 않습니다 ... – Alboz
밀리 초 단위로 시간을 확인해 주시겠습니까? – Alboz
OS의 정확도 (xp 사용)로 인해 나노초로 얻을 수는 없지만 15 밀리 초의 차이만으로는 올바르게 보이지 않습니다. 또한 위의 벤치마킹에 대한 자세한 설명은 다음과 같습니다. http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking – Ramin