모든 논리 코어를 채우는 프로세스가 성능에 부정적인 영향을 미치나요?

모든 논리 코어를 채우는 프로세스가 성능에 부정적인 영향을 미치나요?

하이퍼스레딩으로 인해 내 CPU에는 코어당 2개의 논리 프로세서가 있습니다. 하이퍼스레딩의 전제를 올바르게 이해하면 각 코어가 2개의 개별 스레드에 대해 별도의 캐시와 명령 포인터를 동시에 가질 수 있지만~ 아니다단일 코어로 2개의 스레드를 동시에 실행할 수 있습니다. 따라서 기본적으로 스레드 교환의 높은 오버헤드를 완화할 뿐입니다. 즉, 실행하는 코어보다 더 많은 스레드를 실행함으로써 발생하는 부정적인 성능 영향이 줄어듭니다. 그러나 나는 여전히 그럴 것이라고 예상한다.일부오버헤드가 수반되고,일부예를 들어 물리적 코어가 8개만 있는 시스템에서 스레드를 16개 실행하면 성능에 부정적인 영향을 미칩니다.

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

답변1

때에 따라 다르지.

일반적으로 CPU 스레드당 하나의 소프트웨어 스레드를 실행하면 최상의 성능을 얻을 수 있습니다. CPU 코어당 하나의 소프트웨어 스레드를 실행하면 속도가 10% 향상되는 것을 정기적으로 확인합니다. 따라서 하나의 소프트웨어 스레드를 100%로 실행하는 대신 두 개의 소프트웨어 스레드를 각각 55%로 실행합니다.

하지만 더 나은 성능이 실행되는 것도 보았습니다.보다 적은여러 코어가 동일한 캐시를 공유하는 경우 CPU 코어보다 프로세스가 더 많습니다. 그러나 이는 매우 드뭅니다.

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

관련 정보