모든 논리 코어의 프로세스를 채우면 성능에 부정적인 영향을 미치나요? [폐쇄]

모든 논리 코어의 프로세스를 채우면 성능에 부정적인 영향을 미치나요? [폐쇄]

내 CPU에는 하이퍼스레딩으로 인해 코어당 논리 프로세서가 2개 있습니다. 하이퍼스레딩의 전제를 올바르게 이해하면 각 코어가 동시에 2개의 개별 스레드에 대해 별도의 캐시와 명령 포인터를 가질 수 있습니다.아니요단일 코어가 2개의 스레드를 동시에 실행할 수 있습니다. 따라서 기본적으로 스레드 교환의 높은 오버헤드를 완화합니다. 즉, 스레드를 실행하는 코어보다 더 많은 스레드를 실행해도 성능에 부정적인 영향이 덜하다는 의미입니다. 그래도 난 그래도 그러길 바래일부관련된 오버헤드와일부예를 들어, 물리적 코어가 8개만 있는 시스템에서 스레드 16개를 실행하면 성능에 부정적인 영향을 미칠 수 있습니다.

내 하이퍼스레딩에는 8개의 물리적 코어가 있으므로 내 시스템에서 실행되는 소프트웨어는 내 CPU 코어가 16개라고 생각하는 것 같습니다. 일부 빌드 시스템과 같은 일부 소프트웨어는 기본적으로 사용 가능한 모든 코어를 사용하여 병렬화를 최대화합니다. 내가 고려 중인 소프트웨어에 대한 매개변수를 통해 스레드 수를 지정할 수 있다는 것을 알고 있습니다. 스레드가 8개 이상이면 성능에 아무런 도움이 되지 않는다고 생각하는 것이 맞습니까? 8개 이상의 스레드가 실제로 성능을 저하시킬 것이라고 생각하는 것이 맞습니까? 그렇다면 프로그램에 8개 이하의 스레드를 사용하도록 지시해야 합니까?

답변1

때에 따라 다르지.

일반적으로 CPU 스레드당 하나의 소프트웨어 스레드를 실행하면 최상의 성능을 얻을 수 있습니다. CPU 코어당 하나의 소프트웨어 스레드가 10% 더 빠르게 실행되는 경우가 종종 있습니다. 따라서 하나의 소프트웨어 스레드가 100%로 실행되는 대신 두 개의 소프트웨어 스레드가 각각 55%의 속도로 실행됩니다.

그러나 나는 또한 더 나은 달리기 성능을 보았습니다더 적은여러 코어가 동일한 캐시를 공유하는 경우 CPU 코어보다 더 많은 프로세스가 있게 됩니다. 그러나 이런 상황은 매우 드뭅니다.

일반적으로 16개의 CPU 스레드를 모두 사용해야 하지만 시스템을 확실히 알 수 있는 유일한 방법은 측정하는 것입니다.

관련 정보