3

제 컴퓨터에는 쿼드 코어 i7 프로세서가 있습니다. 나는 과학적 시뮬레이션의 병렬화를 연구하고있다. 하이퍼 스레딩은 병렬 퍼포먼스에 어떤 영향을 미칩니 까? 나는 하강 퍼포먼스를 얻기 위해 4 가지 이상의 작업 과정을 사용하지 않아야한다는 것을 알고 있습니다. 하지만 하이퍼 스레딩을 비활성화해야합니까? 평행 공연에 영향을 미칩니 까?병렬 시뮬레이션을 실행하려면 HyperThreading을 비활성화해야합니까?

답변

5

전자기 모델링 및 인 버전 코드를 실행 한 경험에 따르면 대답은 예입니다. 하이퍼 스레딩을 비활성화해야합니다. 그러나 이것은 다른 사람들의 일화들에 의해 잘 대답되는 질문이 아닙니다. (심지어 광산도 아니고, 매혹적이고, 진실하지 않습니다.)

당신은 학생이며, 이것은 자신의 결론에 도달하는 데 시간을 할애 할 가치가있는 주제입니다. 내 플랫폼에서 내 코드를 실행하는 경험이 거의 쓸모가없는 것과 관련된 많은 요소가 있습니다.

1

HyperTreading은 Intel의 Simultaneous Multi Threading (SMT) 구현입니다. 일반적으로 SMT는 거의 항상 유익합니다 (응용 프로그램이 CPU 바운드가 아니라면 일반적으로 SMT가 활성화되는 이유입니다). 응용 프로그램이 CPU 바운드인지 확실하면 SMT를 사용하지 않도록 설정하십시오. 그렇지 않은 경우 (응용 프로그램이 IO 바인딩되었거나 코어를 완전히 포화시킬 수없는 경우) 활성화 된 상태로 둡니다.

2

Linux에서는 i7에 4 개의 사용중인 스레드가 있으면 각 코어를 다른 코어에 배치합니다. 코어의 나머지 절반이 유휴 상태이면 성능이 동일해야합니다. 다른 프로그램을 실행중인 경우 추가 프로그램을 실행하기 위해 하이퍼 스레딩을 수행하거나 컨텍스트 전환이 더 좋은지 여부에 대해 논쟁의 여지가 있습니다. (나는 컨텍스트 스위칭이 더 적다고 생각한다.)

일반적인 실수는 4 대신 8 개의 스레드를 사용하면 두 배 빠를 것이라고 가정한다. 그것은 약간 더 빨라질 수도 있습니다 (어떤 경우에는 여전히 가치가있을 수도 있습니다). 또는 약간 더 느릴 수도 있습니다 (이 경우 4 개의 스레드로 프로그램을 제한하십시오). 스레드의 수를 두 배로 사용하는 것이 약간 더 빨랐던 예제를 발견했습니다. IMHO, 테스트의 모든 문제는 최적의 번호를 찾아서 그 번호를 사용하는 것입니다.

HT를 끄기 만하면 응용 프로그램의 동작 방식을 제어 할 수없고 4 개의 스레드를 사용하는 것이 더 빠릅니다.

1

당신의 상태 :

나는 하강 공연을 얻기 위해 4 개 이상의 작업 프로세스를 사용해서는 안됩니다 알고있다.

반드시 그렇지는 않습니다. 다음은 HT를 사용하는 i7-3820에서 실행중인 것으로 확인 된 예입니다. 내가 실행중인 모든 코드는 C++입니다. 나는 내가 실행해야하는 8 개의 별도 프로그램 (동일 함에도 불구하고)이 있다고 가정한다. 이 코드를 실행하는 다음 두 가지 방법을 시도했습니다.

  1. 한 번에 4 개의 개별 스레드 만 동시에 실행합니다. 이 4 개가 완료되면 다음 4 개 스레드를 실행하십시오 (4 x 2 = 8 개).
  2. 8 개 모두를 별도의 스레드로 동시에 실행하십시오 (8 x 1 = 총 8 개).

이 두 가지 시나리오에서 볼 수 있듯이 동일한 결과가 나타납니다. 그러나, 내가 무엇을 발견하면 실행 시간이 있다는 것입니다 :

  1. 1시간 4 개 스레드의 각 세트; 총 2 시간 동안 모두 8을 완료하십시오.
  2. 1.8 개의 스레드 세트에 대해 5 시간.

찾을 수있는 것은 단일 스레드가 케이스 # 1에서 더 빨리 완료되지만 전체 작업 # 2가 모든 작업이 더 짧은 시간 내에 완료되므로 성능이 향상된다는 것입니다. 성능 향상은 HT 사용 가능으로 ~ 25 %가되는 것으로 나타났습니다.

분명히 알 수 있듯이 8 개의 스레드를 실행하는 것이 4보다 빠릅니다.

관련 문제