문제

몇 시간에서 며칠이 걸릴 수있는 긴 시뮬레이션을 수행하고 있으며 정보를 파일에 로그인하고 있습니다. 파일은 수백 MB의 크기에 도달 할 수 있으며 내부에는 숫자 목록 만 있습니다. 나는 이것이 시작된 오버 헤드에 대해 정말로 우려하고 있습니다. 이 방법을 사용하는 오버 헤드가 실제로 크고 동일한 작업을 수행하는 다른보다 효율적인 방법이 있는지 확인하고 싶습니다.

C ++를 사용하고 있으며 파일을 기록하기 위해 FPRINTF의 일반적인 메소드 만 사용합니다. 오버 헤드를 설명하려면 파일을 사용하여 이번에는 사용하지 않고이 시간이 걸리면 이상적입니다.

나는 약간의 테스트를했지만 오버 헤드가 파일의 크기로 선조로 커지는 지 전혀 모른다. 내가 말하는 것은 아마도 1GB 크기의 파일보다 1MB 크기의 파일에 줄을 추가 할 수 있다는 것입니다. 파일의 크기에 따라 오버 헤드가 어떻게 증가하는지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

당신은 단지 몇 가지 대대적 계산이 필요하다고 생각합니다.

"수백 MB"를 400MB로 두십시오.
"몇 시간에서 며칠"을 48 시간이되도록하십시오.

(400 * 1024 * 1024 바이트) / (3600 * 48 초) = 2427 바이트 / 초

분명히, 당신은 단지 시스템을 보거나 계산에 실수를 사용할 수 있지만, 위의 거친 추정치를 사용하여 약 2kb/sec를 기록하고 있습니다.

따라서 오버 헤드는 크게 큰 것으로 보이지 않습니다. 그리고 그렇습니다. 더 효율적인 방법이 있지만, 당신은 당신의 숫자가 당신이 언급 한 것과 매우 다르지 않으면 당신이 얻는 작은 절약에 가치가있는 더 많은 시간과 노력을 소비 할 것입니다.

다른 팁

"수백 메가 바이트"는 아마도 며칠 동안 관련이 없을 것입니다. 수백 개의 기가 바이트는 중요 할 수 있지만 아마도 여전히 크지 않을 것입니다.

정확한 응용 프로그램에 대한 답을 찾는 명백한 방법이 있습니다. 로깅이 켜진 상태에서 시뮬레이션을 실행하고 시간을 보내십시오. 그런 다음 로깅이 꺼져있는 상태에서 (동일한 입력으로) 실행하고 시간을 내십시오. 차이를 비교하십시오. 이상적으로는 다른 방해를 균형을 맞추기 위해 여러 번 수행하십시오. 많은 로깅의 잠재적 이점이 성능의 타격을 훨씬 능가한다고 생각합니다.

데이터를 STL 벡터에 넣고 다음과 같은 데이터에서 프로파일 링을 만들 수 있습니다.
- 반복 라인 제외;
- 차이 만 저장합니다.
- 몇 시간 후에 데이터를 플러시합니다.
- 저장할 특정 데이터를 선택합니다.
- 등...

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