`mpirun -np N`: `N`이 물리 코어보다 크면 어떻게 되나요?

`mpirun -np N`: `N`이 물리 코어보다 크면 어떻게 되나요?

4코어 워크스테이션이 있다고 가정하고 Linux(Ubuntu)를 실행하면 어떻게 됩니까?

mpirun -np 9 XXX
  1. 9가 즉시 함께 실행됩니까, 아니면 4 후에 4가 실행됩니까?

  2. 9를 사용하는 것은 나쁘다고 생각합니다. 왜냐하면 나머지 1이 컴퓨터를 혼란스럽게 할 것이기 때문입니다. (혼란이 생길지 아니면 컴퓨터의 "헤드"가 4개의 코어 중 어느 것을 사용할지 결정할지 모르겠습니다.) 또는 선택될 것입니다. 무작위의. 어떤 코어를 호출할지 누가 결정하나요?

  3. 내 CPU가 꽤 좋다고 느끼면 메모리도 괜찮고 충분히 크고 내 케이스는 그리 크지 않은 것입니다. 내 CPU와 RAM을 최대한 활용하려면 이것이 좋은 생각 입니까 mpirun -np 8 XXX?mpirun -np 12 XXX

답변1

  1. 모두 동시에 실행됩니다.
  2. 로드는 가능한 한 많은 코어에서 실행되도록 운영 체제에 의해 분산됩니다. 시간은 스레드 수에 비례하지 않을 수 있습니다. 이것은 어리석은 예입니다. 세 번 수행해야 하는 작업이 있고 매번 동일한 시간(1시간 단위)이 소요된다고 가정해 보겠습니다. 두 개의 코어가 있습니다. 다른 것은 실행되고 있지 않다고 가정합니다.
    • 사례 1: 스레드가 하나만 있습니다. 이 경우 스레드는 하나의 코어에서 실행되며 전체 프로세스를 완료하는 데 3단위의 시간이 걸립니다.총 시간: 3
    • 사례 2: 스레드가 두 개 있습니다. 이 작업은 한 단위 시간에 두 번(각 코어에 대해 한 번) 수행됩니다. 그런 다음 세 번째 반복이 완료될 때까지 전체 시간 단위를 기다려야 합니다.총 시간: 2
    • 사례 3: 스레드가 3개 있습니다. 운영 체제는 모든 것을 공정하게 만들려고 노력하므로 세 프로세스 간에 시간이 균등하게 분배됩니다. 단원 1이 끝날 때까지 그 중 어느 것도 완료되지 않습니다. 2단원까지 모두 완료되었습니다. (위의 사례 참조)총 시간: 2

더 많은 스레드를 시작한다고 해서 실제로 성능에 큰 영향을 미치지는 않지만(스레드 시작 비용은 1MB 미만) 도움이 되지 않을 수 있습니다.

무엇이 더 빠르게 수행되는지 알 수 있는 유일한 방법은 테스트하는 것이지만 다음 규칙을 지침으로 사용하십시오. 최소한 코어 수와 동일한 수의 스레드를 사용하십시오. 또한 프로세스가 모든 곳에서 많은 메모리 액세스를 수행하는 경우 더 많은 스레드를 갖는 것이 실제로 코어보다 빠를 수 있습니다(메모리 액세스는 다른 명령 실행에 비해 매우 느리며 OS는 실제로 무언가를 실행하는 시간으로 이를 채웁니다). 기다려야 합니다.)

답변2

제한된 테스트와 병렬 컴퓨팅에 대한 나의 이해를 바탕으로 합니다(몇 번 사용해 보았지만 그다지 심층적이지는 않습니다).

  1. 동시에 실행됩니다.

  2. 부하는 코어 간에 분산됩니다. 컴퓨터는 "혼란"되지 않지만 성능 향상은 거의 또는 전혀 얻지 못합니다(각 코어가 여러 작업을 처리하므로). 최악의 경우 작업 속도가 느려집니다.

  3. 최대로 당신은 당신이 가지고 있는 코어 수와 비슷한 숫자를 실행하고 싶을 것입니다. 더 큰 값(합리적으로, 엄청나게 큰 숫자를 제공하면 RAM이 부족하거나 시스템이 매우 느려질 수 있음)이 실행됩니다. 어떤 이점도 얻지 못할 수도 있고 속도가 느려질 수도 있습니다. 그래도 시도해 보는 것은 나쁘지 않습니다.

관련 정보