저는 24개의 계산 집약적인 프로세스를 가지고 있으며, 각 프로세스는 단일 스레드에서 실행되고 각각 약 2시간 동안 실행됩니다. 내 것은 8 코어 CPU입니다.
8개 프로세스만 실행하는 것이 아니라 24개 프로세스를 모두 동시에 실행하는 경우 전체 런타임에 영향이 있습니까?
프로세스 간의 조정 오버헤드에 대해 이야기하고 있으므로 이 경우 각 CPU에는 3개의 프로세스가 할당됩니다. 오버헤드가 많이 듭니까?
답변1
이는 특정 워크로드 및 아키텍처에 대한 자세한 내용에 따라 달라집니다(예: 프로세스가 다른 NUMA 노드에 있을 수 있는 동일한 메모리를 읽고 있습니까?). 따라서 성능을 측정하고 결과를 확인할 수 있는 것이 가장 좋습니다.
8개의 실행 단위에서 24개의 CPU 집약적 작업을 실행하려면 작업 예약을 켜거나 꺼야 하지만, 실행 단위만큼 많은 작업을 실행하려면 원칙적으로 더 적은 수의 스위치가 필요합니다. 작업 간 전환을 위해 코드를 실행하는 것과 관련된 오버헤드는 그다지 높지 않을 것이라고 생각합니다. 그러나 CPU에서 작업을 예약할 때 한 가지 영향은 해당 CPU에 의해 캐시된 상태가 플러시될 위험이 있다는 것입니다. 예약된 새 작업은 쓸모가 없습니다.) 이러한 일이 자주 발생하면 성능이 저하될 수 있습니다.
귀하의 경우에는 이 세 가지를 서로 벤치마킹하는 것이 합리적일 수 있습니다.
- 24개의 동시 작업을 실행합니다.
- 8개의 작업을 실행하세요.
- 8개 작업을 실행하고 각 작업에 특정 CPU를 할당합니다.
예를 들어 Linux에서 (3)을 사용하여 수행할 수 있습니다 cpuset
.