2012-04-30 2 views
2

저는 최근에 C++에서 허프만 인코딩의 CPU 구현을 구성했습니다. 또한 시간을 비교하기 위해 CUDA에서 GPU 버전을 만들었지 만 CPU 시간을 테스트 할 때 문제가 발생했습니다.첫 번째 실행 후 CPU 허프만 압축이 더 빠릅니까?

큰 파일을 압축하여 스트레스 테스트를 수행 할 때, 예를 들어 97mb 알파벳 및 다양한 ASCII 문자의 모든 문자는 내 CPU 구현이 처음 실행될 때 약 8.3 초 걸립니다. 그 후, 시간은 1.7 초로 현저하게 떨어진다. 참고 : 나는 문자열의 인코딩과 파일에 쓰는 것이 아니라 CPU의 빈도 계산을 타이밍 할뿐입니다.

이 될 수있는 방법을

어떤 아이디어? 나는 모든 파일 포인터를 닫고 있으며 내가 아는 한 무엇이든 캐싱해서는 안된다.

는 모든 소스 코드가 필요한 경우 알려 감사하자.

답변

5
파일 내용이 시스템에 의해 캐시 (모든 프로세스에 의해 공유되는) 첫 번째 실행 후

, 그래서 다음 실행은 실제로 메모리에서 파일을 읽고있다. 이 시스템에 의해 캐시 메모리에서 읽을 때

+0

그래서 나는 파일이 처음 실행시 타이밍을 사용하거나해야합니까? 첫 번째 경우, 내가 어떻게 러닝을하고 있으며 메모리에서 읽지 않는지 어떻게 확신 할 수 있습니까? – SuperXero

+0

@superXero : 나는 rougly처럼 내 시스템에서 프로그램이 '시도 {(true)가 새 문자 [1000] 동안;} 캐치 (...)는 {0 반환;}'시스템이 가능한 모든 버퍼를 플러시 할 것이다 양철통. 일반적으로 사람들은 단지 두 번째 타이밍을 사용합니다. 더 쉽고 안정적입니다. –

+1

당신이 정말로 원하는 것은 IO 작업에 의해 사용 된 시간없이 알고리즘에 의해 사용 된 시간입니다. 그래서 내가 당신이라면 전체 파일을 메모리로 읽어 들여서 시작 시간을 기록하고 메모리에있는 파일 내용으로 알고리즘을 실행 한 다음 종료 시간을 기록합니다. – BlueWanderer