스레드가 CPU로 간주될 수 있나요?

스레드가 CPU로 간주될 수 있나요?

lscpu그래서 터미널에 입력했더니 다음과 같이 표시되었습니다.

CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  2
Core(s) per socket:  2
Socket(s):           1

아니. CPU 수는 다음 공식으로 인해 4입니다. No. of CPUs = Sockets X Cores per socket X Threads per Core

하지만 문제는 CPU란 정확히 무엇인가 하는 것입니다. 위 수식에 스레드를 포함하는 이유는 무엇입니까?

답변1

그것은 당신이 무엇을 보고 있는지에 달려 있습니다.

프로세서를 구입할 때 하이퍼스레드와 코어 수, 그리고 다중 프로세서 방식(다중 소켓)에서 사용할 수 있는지에 대해 명확하게 명시되어 있습니다.

물리적 CPU가 여러 개 있는 경우는 잊어버리세요.

하나의 칩에는 여러 개의 코어가 있습니다. 일부 캐시를 공유할 수도 있고 그렇지 않으면 거의 독립적입니다. 그러나 여전히 일부 작업은 조정되어야 하므로 4개의 코어를 사용하면 (보통) 1개의 단일 코어에 비해 4배의 "전력"을 갖지 못합니다.

하이퍼스레드: 이것은 더 까다롭습니다. 이는 다중 CPU를 시뮬레이션할 수 있는 Intel(멀티 코어 이전에도)의 트릭이었습니다. 실제로는 한 번에 하나의 스레드만 실행할 수 있지만 CPU는 종종 일시 중지(예: 메모리 액세스 또는 쓰기 대기)를 수행해야 합니다. 하이퍼스레딩을 사용하면 CPU가 두 번째 가상 CPU로 빠르게 전환될 수 있습니다.

따라서 하이퍼스레딩을 사용하면 비용이 거의 들지 않고 단 하나의 일반 CPU에 비해 ​​더 나은 성능을 얻을 수 있는 경우가 많습니다(로직, 캐시 및 레지스터는 더 많지만 중복 트랜지스터는 없음). 하지만 2개의 코어가 여전히 더 좋습니다(여전히 2개의 CPU와 같지는 않지만, 두 작업이 완전히 독립적인 수치 계산에서는 커널이 작업을 방해하지 않습니다.

병렬 프로세스가 있는 경우 스레드에 코어 수를 곱한 경우가 많습니다(불연속적인 IO 수가 있는 경우 스레드나 최종 결과에 1을 추가하는 경우가 많습니다). 이 경우 더 나은 성능을 얻을 수 있습니다(CPU를 많이 사용하는 다른 작업이 없다고 가정). 단일 코어가 메모리 데이터를 기다리고 있는 경우에도 최대 전력을 사용합니다.

하지만 속도를 높이려면 코어 수만 사용하면 됩니다(더 나은 데이터가 될 것이라는 점을 기억하세요).

그래서 그것은 당신이 무엇을 보고 있는지에 달려 있습니다. 그리고 복잡한 작업을 수행하는 경우 아마도 훨씬 더 많은 프로세스를 측정하고 최적화하고 있을 것입니다(캐시, 메모리, 스레드, 코어, CPU, MPI 등). 모든 프로그램은 리소스가 다릅니다.

관련 정보