스레드가 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를 사용하는 것보다 일반적으로 더 나은 성능을 얻을 수 있지만(로직, 캐시 및 레지스터는 더 많지만 중복 트랜지스터는 없음) 두 개의 코어가 여전히 더 좋습니다(여전히 두 개의 CPU와 같지는 않지만 수치적으로 두 작업은 완전히 독립적이며 코어는 작업을 방해하지 않습니다.

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

하지만 속도를 높이기 위해 코어 수만 사용하겠습니다(더 나은 데이터를 얻을 수 있다는 점을 명심하세요).

그래서 그것은 당신이 찾고 있는 것에 달려 있습니다. 복잡한 작업을 수행하는 경우 더 많은 프로세스를 측정하고 최적화할 수 있습니다(캐시, 메모리, 스레드, 코어, CPU, MPI...). 각 프로그램의 리소스는 다릅니다.

관련 정보