2013-07-30 1 views
0

많은 메모리 액세스가 느린 멀티 스레딩을 만드나요? pthread를 사용하면 많은 메모리 액세스를 사용하는 훌륭한 함수를 멀티 스레드 할 수 있기 때문입니다. 그리고 1 스레드로 함수를 호출하면 시간이 CPU보다 큽니다. 사용 CPU의 비율은 50 % ~ 70 %입니다.실질적인 메모리 액세스가있는 함수에서 singlethread보다 느린 다중 스레딩

+1

스레드 간 컨텍스트 전환 시간 때문에 항상 스레드에 충분한 작업을 제공 할 수 있으므로 병렬 프로그래밍의 디자인이 매우 중요합니다. –

+0

모든 코드가 병렬 코드가 아닌 것은 ... parall ... threadable. 그것은 모두 당신이 실제로 무엇을하고 있는지에 달려 있습니다. – Nbr44

+0

여기서 메모리 스래 싱에 대해 읽습니다. "[캐시 친숙한 코드는 무엇입니까?] (http://stackoverflow.com/a/16699282/335858)" – dasblinkenlight

답변

1

추측하지 마십시오. 법안.

당신은 사용중인 OS를 말하지 않지만 pthread를 주면 리눅스를 추측 할 것입니다. Valgrind의 callgrindcachegrind과 같은 도구를 사용하여 프로그램의 시간을 분석 할 수 있습니다. LTTng도 도움이 될 수 있습니다. 어쩌면 perf 일 수도 있습니다.

예, 프로그램이 메모리 대역폭을 초과하거나 캐시를 스 래싱하는 경우 멀티 스레딩을 사용하면 확실히 성능이 저하 될 수 있습니다. 스레드가 모든 리소스를 공유하려고 시도하는 경우 특히 그렇습니다. 그러나 보지 않으면 알 수 없습니다.

1

(메모리 액세스 및 할당이 아닌 것 같기 때문에) 기본값 인 malloc은 메모리를 병렬로 할당하면 성능이 떨어집니다.

높은 성능을 원하는 경우 TCMalloc을 멀티 스레드 할당으로 향상시키는 것이 좋습니다.

일반적으로 스레드간에 공유 메모리를 동기화하면 가능한 경우 피해야하는 악몽입니다. 메시지 전달 패러다임을 채택하여 캐시 무효화를 피할 수 있는지 확인하십시오 (유스 케이스에서는 불가능할 수 있음).

공유 읽기 전용 메모리를 사용하는 메시지 전달은 캐시 트래픽을 낮추기위한 좋은 방법입니다.