2014-11-18 3 views
0

멀티 코어 컴퓨팅의 경우 처음부터 혼란 스러울 수있는 사실은 멀티 코어 하드웨어 모델이 실제 시스템에서 너무 추상적이라는 것입니다. 하이퍼 스레딩을 사용하는 멀티 코어 코어 프로세서의 멀티 스레드 프로그램 (프로세스)

4 코어 논리 코어 8의 NUM하게 함유 하이퍼 스레딩을 지원하는 단일 인텔 프로세서 노트북했다. 가정하자

은 내가 자바 프로그램 (이 JVM은 일정에 영향을 미치지 않도록 자바, 스레드 스케줄링의 OS 규칙을 사용 말한다) 동시 알고리즘을 구현하고, 프로그램은 순수하게 CPU 바인딩입니다 .

내 관찰 :

  • 전체 스레드 NUM 8보다 큰 경우보다 8 개 스레드를 실행하는 프로그램 (프로세스), 스레드의 납입 등의 작업 증가의 병렬 처리는
  • 을 증가하는 경우, 성능은 복잡하지만 일반적으로 8 개의 스레드를 실행하는 것보다 개선되지 않습니다. 일부 알고리즘의 경우 8 개 스레드를 실행하는 것보다 시간 소모가 크게 증가했습니다.

이 내 지식 : 지금까지 내가, 내가 실행 프로그램이 OS에 의해 사용자 프로세스로 취급, 프로그램 생성 된 스레드가 병렬 처리를 시도하는 경우, OS가 노력할 것입니다 알고 사용 가능한 코어 사이에서 이러한 스레드를 예약하십시오. 동일한 코어에있는 프로세스의 모든 스레드는 해당 코어에서 프로세스의 총 실행 시간을 공유 할 수 있습니다.

내 질문 : CPU가 내 프로그램 만 실행한다고 가정합니다. 즉 다른 사용자 프로세스가 없습니다. 는 CPU의 1 코어가있는 경우 프로세스의 총 실행 시간은 변경되지 않습니다 때문에

  • , 프로세스, 멀티 스레딩으로 병렬 어떤 혜택을 얻을 것입니다. 사실입니까?

  • 사용할 수있는 코어가 여러 개인 경우 OS는 프로세스의 스레드를 여러 코어에서 균등하게 균등하게 일정을 잡으려고 시도하고 다른 코어의 프로세스 스레드는 자체적으로 (추가로) 실행 시간을 얻습니다. 과속. 사실입니까?

  • n> m 인 n 개의 스레드와 m 개의 코어가있는 경우 일부 코어는 프로세스 중 두 개 이상의 스레드를 실행할 수 있으며 스레드 간 "컨텍스트 전환"으로 인해 병렬 처리의 속도가 저하 될 수 있습니다 같은 코어와 잠재적으로 서로 다른 속도로 실행되는 프로세스 스레드의 부작용이 나타날 수 있습니다. 사실입니까?

대단히 감사합니다.

답변

2

CPU의 코어가 하나 밖에없는 경우 프로세스의 총 실행 시간이 변경되지 않으므로 멀티 스레딩을 통해 병렬 처리의 이점을 얻지 못합니다. 사실입니까?

CPU 사용률이 100 % 인 경우에만. I/O 대기가 있으면 여러 스레드가 단일 코어에서도 많은 도움이 될 수 있습니다. 가능한 두 개 이상의 코어가있는 경우

는 다른 코어에 균등하고 공정 프로세스의 스레드를 예약 할 OS는

OS의 재량에 달려 것 같다. 모든 종류의 할당량과 우선 순위가 수반 될 수 있습니다.

도 있기 때문에 동일한 코어에 스레드 사이에서 "컨텍스트 스위치"의 병렬 처리 속도 향상에 문제를 야기 할 수 있습니다

일정에서뿐만 아니라 (추가 스레드를 관리하는 오버 헤드가있는 것은 사실이다 레벨 에서뿐만 아니라 응용 프로그램 내에서 동기화 및 통신에 사용됨) 이러한 스레드가 유휴 CPU 코어를 생산적으로 사용할 수없는 경우 스레드가 적 으면 실제로 성능이 향상 될 수 있습니다.

+0

감사합니다. 시나리오에 몇 가지 제한 사항을 추가했습니다. – elexonics

+0

두 사용자 프로세스가 동일한 우선 순위로 실행 중이고 순수하게 CPU 바운드 인 경우 하나의 프로세스 A가 일부 스레드를 작성한 경우 이렇게하면 더 많은 실행 시간이 필요합니까? – elexonics

관련 문제