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