2012-04-15 2 views
0

나는이 프로그램을 벡터와 unordered_map을 사용하여 빌드 할 때 직렬 파일에서 읽으므로 실제적으로 빌드 프로세스를 병렬화 할 수 없지만 프로그램에서 더 사용할 때 "참고 : 컨테이너의 값을 수정하지 않습니다."tbb 동시 컨테이너 성능

그래서이 프로그램을 병렬 처리하면 intel tbb에서 제공하는 동시 컨테이너를 사용하는 것이 유용합니다. 내가 알고리즘을 사용하지 않고 연속적으로 알고리즘을 타임 아웃했기 때문에 1.4 초가 걸렸지 만 병렬 처리없이 알고리즘을 통합 할 때 프로그램의 성능은 4 초입니다!

아무도 왜 이런 성능 저하를 설명 할 수 있습니까?

답변

1

컨테이너와 값을 변경하지 않으면 직렬 버전을 사용하여 "동시"오버 헤드가 추가로 발생하지 않도록 할 수 있습니다. 찾고있는 값이지도에없는 경우 컨테이너를 변경할 수있는 operator[]을 사용하지 않으려면지도를 조심하십시오. 타이밍의 차이가 오버 헤드 잘못된 측정 단위 잠금, 과도한 스레드 spwaning처럼, 서로 다른 소스에서 올 수

주의 ...

+0

는 경우 정렬되지 않은지도 – aTm

+0

@atm 없음을 변경 반복자와 .find (해시)를 사용하여 않습니다 값이 발견되지 않으면 "on-past-the-end"반복자 .end가 리턴된다. – inf

+0

ahaa 대단히 감사합니다. – aTm