1

가상화와 관련하여 필자는 물리적 코어와 가상 코어 사이의 관계, 특히 병렬 처리를 사용하는 응용 프로그램에 미치는 영향에 대해 심도있게 검토했습니다. 예를 들어 VM 시나리오에서 가상 코어보다 실제 코어 수가 적 으면 가능한 경우 응용 프로그램의 병렬 처리에 미치는 영향 또는 제한은 무엇입니까? 제 환경에서는 물리적 인 구조가 무엇인지 공개되지 않기 때문에 묻고 있습니다. 응용 프로그램이 단일 코어 실제 컴퓨터에서 호스팅되는 듀얼 코어 VM에서 실행되는 경우에도 병렬화에 많은 이점이 있습니까?물리적 코어와 가상 코어의 병렬 처리

답변

6

응용 프로그램이 단일 코어 실제 컴퓨터에서 호스팅되는 듀얼 코어 VM에서 작동하는 경우에도 병렬화에 많은 이점이 있습니까?

항상.

OS 레벨 병렬 처리 (즉, Linux 파이프 라인)는 실제 또는 가상의 코어 수에 관계없이 성능을 획기적으로 향상시킵니다.

이 아닌 실제 문제가있는 작업을 만들거나을 작성해야합니다. 큰 문제를 파이프 라인을 따라 많은 작은 문제로 간단히 나누는 것만으로도 성능이 향상됩니다.

파이프 라이닝 된 솔루션이 있고 가상 리소스를 100 % 묶어두면 측정 값이입니다.

논리적 및 물리적 리소스에서 다양한 변형을 시도해보십시오.

이후에만 만 사용 가능한 모든 리소스를 사용하는 OS 레벨 파이프 라인이 있습니다. 그 때까지 파이프 라인 솔루션을 만드는 기본적인 작업이 있습니다.

+3

실제로는 단일 스레드이며 더 작은 조각으로 분할하여 속도를 늘릴 수없는 알고리즘이 있습니다. 실제로 이러한 경우에는 종종 속도가 느려집니다. 코드를 병렬화하려고 할 때와 그렇지 않을 때를 알 수 있습니다. – jer

+0

@jer : 사실이지만 실제로는 핵심 알고리즘을 입력, 출력, 처리 및 기타 파이프 라인과 결합하는 작업이 필요합니다. * an * 알고리즘이 병렬화되지 않을 수도 있지만 응용 프로그램은 거의 항상 측정 가능한 속도 향상을 통해 잘 파이프 라인됩니다. –

+0

물론, 내가 파이프 라인에 모든 것을 던지고 있다고 말하는 것은 꼭 현명한 아이디어는 아닙니다. 모든 프로그램의 평균 속도가 느려지므로 프로그램의 일부분을 느려지 게하는 것은 의미가 없습니다. 그러나 나는 네가하는 말을 안다. 너는 실제로 옳다. – jer

1

당신이 F # 태그를 포함했기 때문에 병렬 성능에 관심이 있으시다면 F # 비동기 IO를 사용하고 있다고 가정하겠습니다. 따라서 스레드는 결코 차단되지 않고 단지 CPU 바운드 작업 사이를 스왑합니다.

이 경우 가상 코어의 수와 동일한 수의 스레드를 갖는 것이 이상적입니다 (적어도 Windows 7이 호스트하는 Virtualbox에서 우분투의 F #을 사용한 실험을 기반으로 함). 그것보다 많은 쓰레드를 사용하면 성능이 약간 떨어지고 성능은 떨어집니다.

또한 실제 코어보다 많은 가상 코어를 사용하면 성능이 약간 저하됩니다. 그러나 이것이 통제 할 수없는 것이라면 각 가상 코어에 대한 활성 작업 스레드가 있는지 확인하십시오.