모든 코어를 사용하면 효율성이 저하되나요?

모든 코어를 사용하면 효율성이 저하되나요?

꽤 무거운 텍스트 검색을 수행하는 프로그램(php 스크립트)이 있습니다. 2mb 및 40mb 파일을 로드하고 검색하여 첫 번째에 나타나는 각 단어가 두 번째에 있는 위치를 찾습니다.

저는 4코어 CPU(개인용 컴퓨터)를 가지고 있습니다. 프로세스 실행을 시작하면 CPU 사용량이 25%로 증가하고 로드는 1이 됩니다. 별도의 파일에서 프로세스 실행을 다시 시작하면 CPU 사용량이 50%로 증가하고 로드는 2가 됩니다. 이로 인해 개별 프로세스의 효율성이 감소합니까? ? 즉. 개별적으로 실행하는 것보다 각각을 완료하는 데 시간이 더 오래 걸리나요? 4개의 프로세스를 실행하여 CPU 사용량을 최대 100%로 늘리면 어떻게 되나요? 그러면 더 느리게 달릴까요?

두 프로세스를 병렬로 실행하면 직렬로 실행하는 것보다 더 빨리 완료될 것이라고 가정합니다. 이것이 맞습니까? 2번 이상(예: 3번 또는 4번) 실행해도 여전히 사실인가요? 이상? 여기서 병목 현상은 어디에 있습니까? 프로세스 수를 코어 수보다 같거나 적게 유지하는 한 CPU가 이를 처리할 수 있지만 메모리 액세스는 어떻습니까? 메모리를 읽는 동안 프로세스가 기다려야 합니까?

답변1

짧은 대답: 벤치마킹하세요.

긴 답변: 각 개별 프로세스를 완료하는 데 시간이 더 오래 걸리지만(주파수 스케일링으로 인해) 전체적으로 가장 효율적인 방법은 각 코어를 100%로 로드하는 것입니다.

답변2

병렬로 실행하면 성능이 향상되거나 저하되는 것은 많은 것에 달려 있습니다. 좋다:

  1. 비교에서 큰 파일을 사용하여 많은 IO를 수행하는 경우 병목 현상은 CPU가 아닌 디스크가 될 것이며 확실히 성능이 저하됩니다.
  2. 동시에 파일이 시스템에 있는 RAM에 비해 충분히 크고 프로세스를 두 개 이상 실행하는 경우 병목 현상은 RAM이 되고 다시 머신에 IO가 발생하게 됩니다.

따라서 사례별로 시나리오가 진행됩니다. 하지만 귀하의 경우에는 병렬로 실행하는 경우에만 성능이 향상될 것이라고 확신하며, 제가 놓칠 수 있는 몇 가지 사항을 제외하고는 효율성이 저하될 수 있는 시나리오를 볼 수 없습니다. 생각하지 마세요.

답변3

하드 드라이브나 네트워크에서 I/O 대기 시간이 많지 않은 것 같습니다. GB의 RAM이 있다고 가정하면 42MB 파일을 RAM에 쉽게 로드할 수 있습니다. 이 시점에서는 4개의 병렬 프로세스가 최상의 결과를 제공해야 합니다. 일반 OS 프로세스를 실행해야 할 때 사소한 컨텍스트 전환이 표시됩니다.

NUMA 시스템에서는 각 코어에 할당된 메모리 풀이 있습니다. 파일이 여전히 원래 코어의 메모리 풀에 있기 때문에 커널이 프로세스를 다른 코어로 마이그레이션하면 성능이 저하될 수 있습니다. 솔직히 이것이 개인용 컴퓨터에 적용되는지 잘 모르겠습니다.

답변4

일반적으로 - 그렇습니다. 잠시 동안 코딩 부분을 무시하십시오.

최신 멀티 코어 프로세서에는 소수의 코어만 사용하는 경우 주파수를 약간 높이는 부스트 모드가 있습니다. 따라서 모든 코어를 사용하면 개별 코어가 더 작아집니다. 세부 사항은 프로세서에 따라 다릅니다.

즉, 개별 부스트가 일반적으로 다른 코어를 얻는 것에 비해 매우 작기 때문에(약 수백 Mhz) 총계는 여전히 더 높을 것입니다. 따라서 모든 코어를 사용하는 것이 더 좋습니다. 확장성이 좋지 않고 단일 스레드 게임을 포함하여 코어당 높은 빈도가 필요한 경우에 주로 부스트가 수행되었습니다.

메모리 액세스에 관해 질문합니다. 최신 서버의 메모리 액세스 속도는 DRAM에서 초당 50GB(즉, 기가바이트)를 초과하며 캐시에서 더 많이 액세스할 수 있다는 점을 알고 있기를 바랍니다. 따라서 당신이 이것을 칠 가능성은 거의 없습니다. IO가 문제일 수 있지만 이는 CPU가 최대치에 이르지 않고 IO 대기 통계가 올라가는 것으로 볼 수 있습니다. 캐싱은 여기서 많은 도움이 됩니다.

관련 정보