2009-07-09 5 views
1

이것은 다소 일반적인 질문입니다. 두 개의 스레드를 생성하고 멀티 코어 시스템에서 응용 프로그램을 실행하는 Java 또는 VC++에서 간단한 응용 프로그램을 작성한다고 가정합니다. 코어를 실행할 특정 지시문이 없으면 응용 프로그램 자체가 다양한 코어에 스레드를 배포 할 예정입니까?멀티 코어 프로세서의 멀티 스레드 응용 프로그램

감사합니다.

답변

8

응용 프로그램은 스레드를 배포하지 않지만 OS는 배포합니다. 그게 그 직업입니다. :)

CPU 코어에 부딪 칠 수있는 다른로드 및 인터럽트로 인해 스레드가 단일 실행 프로세스 중에 코어간에 자주 교환 될 수 있다는 점이 흥미 롭습니다.

특정 스레드가 실행될 수있는 코어를 지정해야한다고 결정하면 OS는 일반적으로 스레드의 "선호도"를 특정 CPU에 설정하는 메커니즘을 제공합니다. 이는 특정 스레드의 캐시를 최신 상태로 유지하는 고급 최적화 시나리오에서 유용 할 수 있습니다. 하지만 일반적으로 필요하지 않습니다.

3

OS는 프로세스와 스레드를 다른 코어에 할당합니다. 결정에 영향을 미칠 수 없다는 말은 아니며, 일부 OS는이를 결정할 때 약간의 제어권을 허용합니다. 프로세스는 코어의 원활한 활용을 위해 필요한 경우 코어 사이를 이동할 수도 있습니다. 당신은 SetThreadIdealProcessor 및 관련 API 호출을 사용하여 Windows에서이 작업을 수행 할 수 있습니다

1

:

http://msdn.microsoft.com/en-us/library/ms684251(VS.85).aspx

당신의 스레드가 각각 다음은 OS가 사용 가능한 코어를 통해이를 배포하는 기대하는 많은 자원을 요구하는 경우.

효과적으로 OSP의 스케줄러를 추측하면서 스레드 선호도를 엉망으로 만드는 것에 대해서는 조심해야합니다. 예를 들어, 응용 프로그램의 응답 속도가 느려지지만 응용 프로그램의 기본 UI 스레드와 경쟁하는 방식으로 스레드를 예약 할 수 있습니다. 진심으로 - 내가 다른 접근

  1. 알고리즘
  2. 알고리즘을 비교할 수 있도록

    나는 일반적으로 프로파일 러의 도움과 몇 가지 고정 된 응용 프로그램 벤치 마크와 함께 다음과 같은 순서로 일을 접근! 알고리즘에 대해 걱정할 필요가있는 다른 것에 대해 생각하기 전에.

  3. 컴파일러 스위치 - 릴리스 빌드에 대해 모든 최적화가 활성화되어 있습니까?
  4. 컴파일러 힌트 - 컴파일러 코드에 최대한 많은 정보를 제공하여 최적화 할 수 있도록하십시오. 예를 들어 컴파일러가 추측 할 수없는 포인터 나 다른 메커니즘을 너무 많이 사용하고 있습니다.
  5. 캐싱 스레드 선호도

아데

관련 문제