방금 24코어 VPS(UnixBench에 따르면 24개 CPU)에 대한 계정을 얻었습니다.
- 일반적으로 데비안의 범용 쉘 컴퓨팅을 위해 이러한 모든 코어를 어떻게 최대한 활용합니까?
- 셸에서 장기 실행 애플리케이션을 시작할 때 각 프로세스가 별도의 코어(사용 가능한 경우)에서 실행되도록 하려면 특별한 것을 입력해야 합니까? 아니면 데비안이 이 모든 것을 처리하는데 내가 볼 수 없나요?
답변1
특별한 작업을 수행할 필요는 없습니다. 커널의 작업은 어떤 스레드가 어떤 CPU에서 실행되는지 결정하는 것이며 인간보다 더 잘 수행합니다.
그러나 최소 24개의 동시 스레드가 실행되지 않고 24개의 CPU를 갖는 것은 의미가 없습니다. 더 많은 CPU를 사용할 수 있다고 해서 프로그램이 마법처럼 더 빠르게 실행되는 것은 아닙니다. 다중 병렬 스레드를 갖도록 코딩된 프로그램만 이점을 얻을 수 있으며, 많은 프로그램은 제대로 작성되지 않았기 때문이 아니라 본질적으로 병렬화할 수 없기 때문에 그렇지 않습니다.
N개의 동시 컴퓨팅 스레드가 있는 프로그램은 최대 N개의 CPU를 사용하면 이점을 얻을 수 있습니다(스레드 간 동기화에 시간이 걸리기 때문에 N배 더 빠르지는 않을 수도 있음). 별다른 상호 작용 없이 M개의 다른 프로그램을 실행하면 M개의 CPU를 동일하게 사용하게 됩니다(프로그램이 멀티스레드인 경우 더 많음).
어떤 경우에는 병렬성을 활용하기 위해 수동 개입이 필요합니다. 여러 데이터 처리 작업을 시작하는 경우 순차적으로 생성되는 것이 아니라 병렬로(CPU당 약간 이상의 작업) 생성된다는 점에 유의하세요. 예를 들어, 소프트웨어를 구축할 때 -j
옵션이 에 전달됩니다 make
. 다른 예와 설명을 참조하세요.
- 4개의 작업을 동시에 실행하는 중...어떻게 해야 하나요?
- 프로그램은 여러 파일에서 병렬로 실행됩니다.
- 듀얼 코어 CPU가 있을 때 사람들이 -j3 옵션 사용을 권장하는 이유는 무엇입니까?
- 최대 X개의 명령을 병렬로 실행
웹 서버를 실행하는 경우 과부하용으로 설계된 모든 웹 서버는 병렬 처리를 활용하는 데 능숙합니다. Linux 커널 최적화 성능을 평가할 때 Apache를 테스트 케이스로 사용하십시오. 그러나 CPU의 병렬 처리는 다른 병목 현상(예: 데이터베이스 액세스 또는 입력 및 출력 대역폭으로 인한 경합)이 없는 경우에만 도움이 됩니다.
답변2
성능 향상을 위해 여러 코어를 활용하는 것은 애플리케이션에 따라 크게 달라집니다. 일부 애플리케이션은 단계별로 실행해야 합니다. 특정 단계를 계산하려면 이전 단계의 결과를 알아야 하기 때문에 계산을 여러 코어에 병렬로 분산할 수 있는 방법이 없습니다. 그렇다면 24개의 코어를 사용하는 것은 단지 1개의 코어를 사용하는 것과 같습니다.
다른 경우에는 애플리케이션이 서로 의존하지 않는 많은 작업을 수행해야 하며, 코어가 여러 개 있으면 작업 속도가 크게 향상될 수 있습니다. 관련 예로, 소스 파일이 많은 프로젝트를 컴파일하는 경우 다른 파일을 링크하기 전에 각 소스 파일을 독립적으로 컴파일할 수 있습니다. 이 경우 컴파일러가 별도의 코어에서 각 파일을 컴파일하도록 할 수 있습니다. 여러 CPU 코어를 사용할 수 있는 애플리케이션에는 일반적으로 요청할 수 있는 스위치가 있습니다. 예를 들어, GNU로 프로젝트를 컴파일할 때 스위치와 숫자를 전달할 make
수 있습니다 . -j
이 숫자는 동시에 시작되어야 하는 작업 수를 지정합니다 make
(예: 다른 코어에서).