2012-11-11 7 views
4

그리고 내가 십여 초 동안 100 %에서 실행중인 프로세서 코어를 필요한 경우 좋은 생각이 그렇게 아니면 시스템이 스레드를 처리하는 방법을 결정하게하면 내가 더 나은 성능을 얻을 것 것입니까? 내가 필요로 무엇부스트 스레드 라이브러리가있는 프로세서 코어에 스레드 선호도를 설정하는 방법이 있습니까?

빠른 실행하고 나는 시스템이 모든 코어를 사용하기 전에 몇 초를 사용할 수있는 걱정,하지만 난 부스트 스레드와이 일을 어떤 방법을 발견하지 않았습니다.

답변

4

먼저 get_native_handle 멤버 함수를 호출 한 다음 획득 한 핸들을 플랫폼 관련 함수에 전달하여 스레드의 CPU 선호도 (즉, pthread_setaffinity_np/SetThreadAffinityMask/...)를 설정해야합니다.

좋은 생각인지에 관해서는 : 친화력 세트에 대한 또 하나의 이유가

4

운영 체제의 스케줄러는 밀리 초,하지 초 순서에 당신이 알아서해야합니다. 세부 사항은 실행중인 OS에 따라 다르지만 일반적으로 한 가지 방법은 유휴 CPU에서 실행될 때 너무 많은 CPU에서 스레드를 훔칠 수 있는지 확인하는 것입니다. 이렇게하면 모든 CPU에서 스레드의 균형을 신속하게 조정할 수 있습니다.

일반적으로 CPU 선호도를 설정해야하는 경우 매우 특이하고 유 별한 유스 케이스가 있거나 운영 체제에 버그가 있습니다. 특정 코어에 캐시에 민감한 낮은 메모리 풋 프린트 작업을 할당하고 핵심 거의에만이 작업을 수행하는 경우 매우 높은 성능의 시스템에서

+1

글쎄, 나는 이것을 결국 스스로 찾아야 만했다. 그러나 당신이 옳았습니다. 시스템을 결정하게하는 것이 가장 좋습니다. 나는 약간 더 나은 성능, 전반적인, 그리고 적은 코드를 다루어야했다. – Kesarion

5

는 성능이 향상됩니다. 그 효과는 캐시 적중률을 향상시켜 큰 차이를 만들 수 있습니다. 이것이 사실이 아니라면, OS의 스케줄러에 물건을 남겨 둡니다. 위에서 언급했듯이 다소 전문화 된 상황이지만, 발생했을 때 프로세서 친 화성을 살펴볼 가치가 있습니다.

+1

그리고 이와 같은 경우를 추가하려면 거의 항상 CPU 코어를 분리해야합니다. 해당 CPU 코어를 분리하지 않고 스레드 선호도를 CPU 코어에 설정하면 스레드가 해당 CPU 코어의 다른 스레드와 경쟁하게됩니다. 다른 스레드가 해당 코어에서 실행되면 캐시가 오염됩니다. 그래서 - 당신이 스레드 선호도를하고 있다면 - 당신은 절대적으로 그 CPU 코어를 분리해야합니다. 그 CPU 코어를 분리 할 수 ​​없다면 아마 스레드 연관 관계를해서는 안됩니다. – quixver

+0

이것은 중요한 포인트입니다. 당신은 정말로 다른 프로세스가 캐시를 clawbering 싶지 않아요. –

0

... 알아 & 프로필. 일부 최신 시스템 (예 : ARM 기반 SOC)의 경우 절전 기술이 스케줄러에 큰 영향을줍니다. 시스템은 가능한 최소 CPU 코어로 실행됩니다. 현재의 모든 작업이 하나의 코어에서만 작동 할 수있는 경우 다른 코어 만 잠 들어 있습니다. 갑자기 부하가 상승하면 (새로운 무거운 작업 실행) 하나 이상의 코어가 깨어나 야합니다. 이 프로세스는 상대적으로 느리므로 스케줄러가 더 많은 코어에 대한로드 밸런싱을 수행하는 동안 CPU 부족 현상이 발생할 수 있습니다. 수동적 인 선호도를 몇 개의 스레드/프로세스로 설정하면 모든 코어가 계속 실행될 수 있습니다 (그리고 항상 갑작스러운로드 상승에 대비할 수 있습니다). 그것은 의사 실시간 작업에 좋을 것 같습니다.