
저는 시작 시 메모리로 읽혀지는 대량의 데이터 처리로 구성된 Matlab에 프로그래밍된 계산 작업을 가지고 있습니다. 실행 시간은 몇 시간에서 며칠까지입니다. 작업은 단일 스레드입니다.
이 작업을 실행하기 위해 다양한 Linux 시스템을 마음대로 사용할 수 있습니다. 머신은 이미 실행 중인 작업으로 인해 서로 다른 시스템 부하를 받고 있으며, 이는 가까운 미래에도 계속 실행될 것입니다. 모든 머신에는 amd64 아키텍처가 있지만 물리적 코어 수, 가상 코어 수, 클럭 속도 및 기타 요소를 포함한 CPU 모델 측면에서 다릅니다.
내 질문:작업을 가능한 한 빨리 완료한다는 목표를 가지고 작업 실행을 위해 기계 중 하나를 선택하는 원칙적인 방법이 있습니까?
다음 부분은 Doktoro Reichard의 답변을 바탕으로 업데이트되었습니다.
어떤 기계가 가장 빠른지 대략적으로 표시하는 방법에 대한 대략적인 아이디어는 두 가지 측면을 결합하는 것입니다.
(1) 기계가 그곳에서 실행될 경우 처리 리소스의 일부가 내 작업에 할당되는 정도를 추정합니다. 이를 "상대 속도"라고 합니다. 기계가 유휴 상태인 경우 내 작업은 정의에 따라 상대 속도 1로 실행됩니다. 현재 로드가 L이고 코어 수가 C인 경우 작업을 제출한 후 로드는 L+1이 되고 상대 실행 속도는 R = min(C / (L+1), 1)이 됩니다. 프로세스가 둘 이상의 코어를 활용할 수 없기 때문에 최소 연산자입니다. – 현재 부하를 고려하여 기계에서 가능한 최적의 속도를 기준으로 달성 가능한 처리 속도를 나타내는 지표로서 이 계산이 정확합니까? 그리고 관련 숫자 C는 물리적 코어 수입니까 아니면 가상 코어 수입니까? 후자는 하이퍼스레딩으로 인해 두 배나 커집니다.
(2) 머신 성능 지표를 기반으로 서로 다른 머신이 모두 유휴 상태인 경우 작업이 상대적으로 얼마나 빨리 실행될지 추정합니다. 이는 클럭 속도가 아니라 적절하게 선택된 벤치마크여야 합니다.
그런 다음 숫자 (1)과 (2)의 곱이 가장 큰 기계를 기준으로 기계를 선택합니다.
답변1
이는 주로 컴퓨터 작동 방식으로 인해 명확한 대답을 제공할 수는 없지만 가장 빠른 것이 무엇인지 알아내는 방법에 대한 몇 가지 지침을 제공하려고 노력할 것입니다.
나는 당신이 알아낼 수 있는 것과 알 수 없는 것을 말하기 위해 당신의 진술을 분석할 것입니다.
1. 데이터
첫 번째 단락에서 모든 데이터를 메모리에 로드하고 메모리에서 읽었다고 명시했습니다. 대역폭 측면에서 메모리가 누구에게도 뒤지지 않기 때문에 이는 속도에 좋습니다. 프로그램이 디스크(HDD, SSD, 펜 드라이브 등)를 사용한 경우 프로그램 실행 속도에 병목 현상이 발생할 수 있습니다.
이는 전송 속도 때문입니다. RAM은 프로세서에 거의 직접 액세스할 수 있습니다. 디스크는 RAM보다 훨씬 낮은 대역폭의 연결을 거쳐야 하며, HDD의 경우에는 데이터를 가져오고 저장하는 시간을 고려하여 필요로 합니다.
2. OS
사용된 OS는 속도에 어느 정도 영향을 주지만 잔여적인 것으로 간주될 수 있습니다.
3. 프로세서 아키텍처(또는 명령어 세트)
이는 관련된 측면입니다. 머신이 amd64 프로세서를 사용한다고 명시했지만 사용되는 명령어 세트에는 약간의 차이가 있을 수 있습니다.
예를 들어옵테론그리고셈프론일련의 프로세서. 이들의 주요 차이점은 후자가SSE3지원하다.
SSE3을 사용하면 데이터(특히 배열 작업)를 처리하는 더 새롭고 효율적인 방법을 사용할 수 있으며, 이전 명령어 세트에서는 덜 효율적인 프로세스를 사용하여 수행되었던 작업을 수행할 수 있습니다.
따라서 이러한 측면에서,최신프로세서는설계상 더 빠르게, 보다 효율적인 명령어 세트를 지원하기 때문입니다.
4. 시스템 부하
당신이 말했듯이 이것은 관의 마지막 못입니다. 각 프로그램이 어떻게 작동하는지 모르면 컴퓨터의 부하를 선형 방식으로 계산할 수 없습니다. 즉, 10,000개의 프로세스가 실행 중이지만 잔여 로드가 있거나 모든 프로세서 시간을 낭비하는 단일 멀티스레드 프로세스가 있을 수 있습니다.
그러나… 이것을 더 분석해 보겠습니다. 프로세스를 추가한다는 것은 기본 시스템에 일종의 데이터를 추가하는 것을 의미합니다. 이를 통해 프로세스가 존재하는지, 이를 위해 프로세서의 시간을 얼마나 준비해야 하는지 알 수 있습니다. 이러한 측면에서,더 적은 프로세스~이다더 나은커널/프로세서가 사용 가능한 시간을 더 잘 결정할 수 있으므로 속도가 향상됩니다.
고려해야 할 또 다른 사항은 커널이 프로세스에 부여하는 우선순위입니다. 우선순위가 가장 높은 프로세스가 프로세서 시간의 대부분을 차지합니다.
궁극적으로 프로세스에 최대 우선순위를 부여하고 프로세스가 중단될 때까지 다른 모든 프로세스를 영원히 기다리게 할 수 있는 시스템을 구상할 수 있습니다. 여기서 프로세스 속도는 CPU에 의해 결정됩니다.
5. CPU
코어와 CPU 클럭 속도 등의 요점을 고려해 보겠습니다.
커널이 일부 프로세스를 다른 코어로 이동할 수 있다고 생각할 수 있습니다. 제한된 경우 프로세스에 전체 코어가 지정될 수 있습니다. 이러한 측면에서 코어가 많을수록 더 많은 프로세스를 동시에 실행할 수 있습니다(결과적으로 더 빠르게).
나는 멀티스레딩에 대해 잘 알지 못하므로 아는 사람에게 맡깁니다.
시계 속도아니다프로세서 효율성을 나타내는 명확한 지표입니다. 이를 근거로 Apple 하드웨어에서 Intel과 PowerPC 프로세서를 사용하는 것 사이의 "전투"를 소개합니다. Apple은 Intel 프로세서의 프로세서 속도 향상에도 불구하고 Intel보다 PowerPC 프로세서를 선호하는 주된 이유는 PowerPC가 경쟁 제품보다 초당 더 많은 작업을 처리할 수 있기 때문에 더 나은 성능을 발휘하기 때문이라고 주장했습니다. 결국 애플은 전력 문제와 기타 경제적 요인 때문에 인텔을 선택했다.
실패(초당 부동 소수점 연산의 경우)은 특히 오래되고 간단한 초당 명령과 유사하게 부동 소수점 계산을 많이 사용하는 과학 계산 분야에서 컴퓨터 성능을 측정한 것입니다. 작업이 Matlab을 사용하는 경우 가능할 수 있는 이러한 종류의 작업에 크게 의존하는 경우 이는 클럭 속도보다 더 나은 측정이 될 수 있습니다.
그러나 이는 매우 공개된 수량은 아닙니다(상황에 따라 다름).어떤 종류의작업을 실행 중입니다). 몇 가지 벤치마크를 찾았습니다.Overclock.net. 나는 이 두 가지를 지적합니다.
- AMD 페놈 Ix4 9850 @2.83GHzRAM 754MHz 5-5-5-15GFLOPS:27.5
- AMD 페놈 IIx2 555 @4.12GHzRAM 1000MHz 5-5-5-18GFLOPS:26
보시다시피 속도가 두 배 빠른 프로세서라도 속도가 절반인 프로세서보다 성능이 떨어질 수 있습니다.
결론
명확한 공식은 없습니다프로그램 처리와 관련된 요소가 끝없이 많기 때문에 실행 시간을 추정하는 데 사용할 수 있습니다. 내가 요약한 몇 가지 경험 법칙이 있습니다.중요성):
- 모든(또는 대부분 사용되는) 데이터를 RAM에 저장하는 것이 더 빠릅니다. (데이터 저장은 모든 프로세스에서 주요 병목 현상입니다).
- 동일한 시스템에서 실행되는 프로세스가 적을수록 좋습니다.
- 코어가 많을수록 좋습니다.
- 최신 프로세서는 설계상 더 빠릅니다.
- CPU 속도는거친속도 표시기(RAM 대기 시간 및 기타 요인이 개입됨)
- 프로세스에 가장 높은 우선순위를 부여하도록 기계에 요청할 수 있습니다. 기계시도 할 것이다프로세스에 더 많은 시간을 할당합니다. (내가 말할 때시도 할 것이다, 내 말은 기계가 프로세스에 더 많은 시간을 제공할 의무가 없으며 모든 것의 균형을 맞추려고 시도하므로 두 번째 항목이 존재하는 이유입니다.
나는 아직 총체적인 공식을 제시하는 것을 조금 주저하지만, 여러분에게 하나의 공식을 제시할 수 있다고 믿습니다.아주, 아주 대략적인하나는 귀하의 의견 결과를 기반으로 합니다. 멀티스레딩에 대해서는 말할 수 없으므로 모든 코어가 독립적인 것으로 간주하겠습니다. 이 데모에서는 다음을 가정합니다.
- 모든 프로세스의 로드는 동일합니다.
- 프로세스는 입력/출력을 기다리고 있지 않습니다.
- 메모리 속도는추정요인이 될 수는 없습니다.
- 모든 프로세스는 단일 스레드입니다. 우선순위는 동일합니다.
이로 인해 병목 현상은 CPU 용량이 됩니다. 따라서 모든 CPU에 대해 모든 프로세스의 상대적 로드는 다음과 같습니다.
R = min(C / N ; 1)
R은 상대 로드이고 C는 CPU의 코어 수이고 N은 활성 프로세스 수입니다. 그러나 이는 시스템이 코어 전체에 모든 부하를 균등하고 완벽하게 분산할 수 있다고 가정하지만, 항상 그렇지 않을 수도 있습니다.
CPU의 상대적 로드에 선택한 측정 단위(UM)(예: GHz 또는 GFLOPS)를 곱하면 프로세스가 얼마나 "빠를" 수 있는지 측정할 수 있습니다.
Speed = R * UM
따라서 이것으로 귀하의 공식이 정확합니다. 하지만 제발,예쁘다 제발내가 해야 할 가정의 양을 기록해 두십시오. 이것은 실제 사례와는 거리가 멀다. 정확한 수량을 알려주는 것이 아니라,교육받은 추측.
두 번째 요점은 첫 번째 요점과 동일합니다(실제로 질문에 대한 답변입니다). 요컨대, 그것은~이다기계의 성능 지표( R = 1
)이므로 여기서 질문은 하나를 선택하는 방법입니다. 이는 여러분이 직접 분석해야 할 사항입니다. GHz에 코어 수를 곱하거나 GFLOPS 또는 이 둘의 조합을 사용할 수 있습니다.
CPU에 대한 일부 벤치마크를 수행할 수 있는 프로그램(첫 번째 답변을 작성할 때 이전에 기억했어야 했던)이 있으며, 그로부터 결정에 도움이 될 수 있는 몇 가지 값을 얻을 수 있습니다. 나는 SiSoftware Sandra(내 오래된 버전에는 프로세서 산술 벤치마크가 있음)를 가지고 있지만 아마도다른 사람들도 있어요.
이 경우 다른 측정 단위를 사용하지 않는 한 1)과 2)를 곱해도 아무런 차이가 없습니다.