문제

지금은 파일을 로드한 다음 gettimeofday를 사용하고 tv_usec로 CPU 시간을 추적하고 있습니다.

내 결과는 다양합니다. 250~280을 얻지만 때로는 300~500을 얻습니다.나는 usleep과 sleep (0)과 (1)을 썼지만 성공하지 못했습니다.시간은 여전히 ​​매우 다양합니다.나는 sleep(1) (Windows의 Sleep이 아닌 Linux의 초)이 문제를 해결했을 것이라고 생각했습니다.테스트를 위해 보다 일관된 방식으로 시간을 추적하려면 어떻게 해야 합니까?어쩌면 측정을 시작하기 전에 훨씬 더 큰 테스트 데이터와 더 복잡한 코드를 얻을 때까지 기다려야 할까요?

도움이 되었습니까?

해결책

현재 Linux(및 일반적으로 POSIX)에서 고해상도 시간에 권장되는 인터페이스는 clock_gettime입니다.매뉴얼 페이지를 참조하십시오.


clock_gettime(CLOCK_REALTIME, struct timespec *tp) //  for wall-clock time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, struct timespec *tp) //  for CPU time

그러나 매뉴얼 페이지를 읽으십시오.POSIX에서 그렇게 말하기 때문에 -lrt와 연결해야 한다는 점에 유의하세요.아마도 자체 clock_gettime을 정의한 이전 프로그램의 경우 -lc에서 기호 충돌을 피하기 위해서일까요?하지만 동적 라이브러리는 약한 기호를 사용합니다...

최고의 수면 기능은 나노슬립입니다.신호나 usleep과 같은 쓰레기로 엉망이 되지 않습니다.잠만 자면 된다고 정의되어 있으며 다른 부작용은 없습니다.그리고 일찍 일어났는지 알려줍니다(예:신호에서), 따라서 반드시 다른 시간 함수를 호출할 필요는 없습니다.

어쨌든, 시스템 호출과 관련된 짧은 작업의 한 담당자를 테스트하는 데 어려움을 겪게 될 것입니다.변화의 기회가 엄청나게 많습니다.예를 들어스케줄러는 다른 작업이 필요하다고 결정할 수 있습니다(프로세스가 막 시작된 ​​경우에는 가능성이 낮습니다.아직 타임슬라이스를 다 사용하지 않았을 것입니다).CPU 캐시(L2 및 TLB)가 쉽게 가능합니다.

최적화 중인 코드에 대한 멀티 코어 머신과 단일 스레드 벤치마크가 있는 경우 코어 중 하나에 고정된 실시간 우선 순위를 부여할 수 있습니다.인터럽트를 처리하지 않는 코어를 선택했는지 확인하십시오. 그렇지 않으면 완료될 때까지 키보드(및 기타 모든 것)가 잠깁니다.taskset(하나의 CPU에 고정용) 및 chrt(실시간 우선 순위 설정용)를 사용하세요.이 트릭을 사용하여 gmp-devel에 보낸 이 메일을 참조하십시오.http://gmplib.org/list-archives/gmp-devel/2008-March/000789.html

아, 가장 정확한 타이밍을 위해서는 rdtsc를 직접 사용할 수 있습니다(x86/amd64에서).벤치에 두고 있는 항목에 다른 시스템 콜이 없다면 이는 나쁜 생각이 아닙니다.기능을 적용할 벤치마킹 프레임워크를 확보하세요.GMP에는 꽤 괜찮은 것이 있습니다.하지만 GMP에 없고 mpn_whatever라고 불리는 벤치마킹 기능에는 제대로 설정되지 않았을 수도 있습니다.기억이 나지 않습니다. 한 번 볼만한 가치가 있습니다.

다른 팁

파일을 로드하는 데 걸리는 시간을 측정하려고 하시나요?일반적으로 이미 매우 빠른(1초 미만) 일부 코드의 성능을 테스트하는 경우 동일한 코드를 여러 번(예: 천 번 또는 백만 번) 반복하고 전체 시간을 측정한 다음 총 시간을 반복 횟수로 나눕니다.

그런데 sleep()을 무엇에 사용하고 있는지 잘 모르겠습니다.당신이 하려는 일의 예를 게시할 수 있습니까?

해당 코드를 for 루프에 넣는 것이 좋습니다.1000회 또는 10000회 이상 반복 실행하세요.몇 가지 지침만 수행하는 경우에는 문제가 있지만 도움이 될 것입니다.

물론 더 큰 데이터 세트도 도움이 됩니다.

sleep은 CPU에서 스레드의 일정을 취소합니다.시간을 정확하게 계산하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top