나는 작은 CPU의 4개 코어를 모두 사용하여 Windows에서 잘 실행되는 대형 플랫 파일을 처리하는 멀티 스레드 C++ 응용 프로그램(pThreads 사용)을 가지고 있습니다. 고객은 Red Hat 64 Xeon CPU 시스템에서 동일한 코드를 실행하기를 원했습니다. 그래서 여기에서 컴파일하고(g++) VMWare의 Ubuntu에서 실행했으며 코드는 4개의 코어 중 하나만 사용했습니다. 그래서 저는 그것이 VMWare 문제라고 생각하고 클라이언트에 코드를 보냈습니다. 동일한 작업을 수행합니다(원격으로 알 수 있는 한 - mpstat -P ALL은 CPU가 거의 로드되지 않았음을 보여줍니다). Red Hat이 스레드를 분산시키도록 강제로 수행해야 할 작업이 있습니까? 제가 뭔가를 놓치고 있는 걸까요? 다음에는 "좋은" 우선순위를 바꾸려고 노력 중입니다. 그런데 뭔가 빠진 것 같은 느낌이 듭니다.
코드를 게시할 수 있지만 앞서 말했듯이 pThreads 등을 사용하면 Windows에서 잘 작동합니다.
답변1
이것이 귀하의 VM 환경이나 코드에 문제가 있는지 진단해 보겠습니다. 가상 머신에 관해 고려해야 할 몇 가지 사항은 다음과 같습니다.
여러 CPU에 대한 액세스를 허용하도록 vmware를 구성했습니까? 최신 버전에 대한 경험은 없지만, 예전에는 특별히 허용해야 했던 내용이었습니다. VirtualBox에는 게스트가 사용할 수 있는 CPU 수에 대한 가상 머신 구성 옵션이 있습니다.
cat /proc/cpuinfo
Ubuntu 가상 머신에 CPU가 두 개 이상 있으면 어떻게 되나요?일반적인 작업(예: 커널 소스로 이동하여 커널 컴파일 실행)을 수행하는 경우 여러 CPU를 올바르게 사용할 수 있습니까
make -j10
?
이러한 오류가 발생하면 코드에 문제가 있는 것이 아니라 가상 머신이 잘못 구성된 것입니다.