![모든 Win OS에서 대부분의 멀티스레드 앱에 대해 CPU 최대 사용률이 1/N CPU로 제한됩니다. 이유는 무엇입니까?](https://rvso.com/image/1645743/%EB%AA%A8%EB%93%A0%20Win%20OS%EC%97%90%EC%84%9C%20%EB%8C%80%EB%B6%80%EB%B6%84%EC%9D%98%20%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C%20%EC%95%B1%EC%97%90%20%EB%8C%80%ED%95%B4%20CPU%20%EC%B5%9C%EB%8C%80%20%EC%82%AC%EC%9A%A9%EB%A5%A0%EC%9D%B4%201%2FN%20CPU%EB%A1%9C%20%EC%A0%9C%ED%95%9C%EB%90%A9%EB%8B%88%EB%8B%A4.%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 멀티스레딩과 작업을 어느 정도 이해하지만 OS 외부에서는 대부분의 Windows 앱이 평균 최대 CPU를 1/N만 사용하도록 제한된다는 것을 알고 있습니다. 이용.
이는 듀얼 코어의 경우 50%, 4개 CPU의 경우 25%, 전체 8개 CPU의 경우 12.5%입니다. Procexp.exe를 사용하여 CPU 할당을 취소하거나 짝수 또는 홀수 번호의 CPU를 선택하는 경우 결과는 변경되지 않습니다.
내 질문
이 OS 제한 한도를 넘어 활용도를 높일 수 있는 방법이 있습니까? 하나의 앱에 100% 부과한다면 이해합니다. OS는 예상 또는 필수 제한 시간 내에 응답하지 않는 하드웨어 I/O로 인해 블루 스크린을 표시할 수 있지만 50% 또는 75%라도 결과가 향상됩니다.
하지만 OS의 explorer.exe 등은 큰 작업을 수행할 때 때때로 50% 이상(?)의 성능을 발휘할 수 있습니다.
- 일반적으로 CPU는 브라우저만 열려 있고 탭 10개가 있는 상태에서 98~99.5% 유휴 상태입니다(Brave).
나는 CV19 US 데이터의 150만 셀이 포함된 스프레드시트와 함께 LibreOffice SCALC.exe에서 16GB RAM의 Win7 i7-4770S Haswell 3.1GHz를 사용하고 있으며 매일 텍스트를 셀 번호로 변환하려고 ' 텍스트 접두사를 검색/바꾸었습니다. 날짜(일부 옵션 포함)텍스트를 값으로) 여전히 실행 중이며(예) 잘못된 방법을 사용한 것이 분명합니다.
OS 사용률을 변경할 수 없는 경우 400개의 텍스트 항목을 '1\20\2020 날짜 값으로 변환하여 원하는 대로 형식을 다시 지정하는 방법에 대해 이 질문을 다시 작성해야 합니다.
- 이 텍스트 파일은 JHU CV19 미국 카운티 일일 사망률 누적 합계에 대한 GitHub 저장소에서 다운로드되었으며 텍스트-열 변환을 사용하여 SCALC로 가져왔습니다.
SCALC가 아직 실행 중입니다!” , 11개의 스레드를 사용하는 PERFMON에 따르면 12.5%입니다.
문제는 150만 셀 스프레드시트에서 문자 1개를 검색하고 바꾸는 것에서 시작되었습니다. 실수로 "similarity-option"을 선택했는데 문제는 Excel이나 Open Office Apps가 아닙니다.많은 앱이 멀티스레드이지만 평균적으로 1/N CPU로 제한되어 이를 변경할 수 없습니다.. 나는 이것을 이미지로 증명할 수 있지만 여러분 중 일부는 이것이 사실이라는 것을 알고 있을 것입니다.
다른 사람들은 질문을 이해하지 못합니다. 예, Windows에서 작성하거나 이를 수행하는 것은 가능하지만 미리 준비된 앱은 불가능합니다.
예 1 대용량 파일 프로세스의 간단한 시작 복구에는 단 몇 초밖에 걸리지 않았으며 최대 20% 이상 복구되었습니다. 1초 동안 평균 12.5%를 훨씬 넘는 최고치를 기록할 수 있지만 메모리 처리량 제한이 있을 때 지속되지는 않습니다. (그래서 아무것도 개선할 수 없는 것 같아요?)
여기서 검색하면 150만 개의 셀에서 0을 0으로 대체합니다. 스크린샷을 캡처하기 직전 평균은 정확히 12.5%였습니다.
여기서는 스레드가 많은 1개의 애플리케이션 전용으로 전체 CPU 워크로드의 거의 정확히 1/N 또는 12.5%입니다.
이 아키텍처를 사용하면 Windows의 다른 여러 응용 프로그램에서 이 테스트를 복제할 수 있습니다. 그렇다면 아키텍처입니까? 메모리 캐시 버스가 제한되어 있고 수정 사항이 있습니까?
이 포럼에 다른 사람들이 쓴 것처럼 1/N CPU는 12.50%로 제한됩니다.
이것이 증거입니다.
다중 스레드 MS 앱에 대한 추가 증거 i=1/N CPU % 평균 MAX만 사용
업데이트
QUattro Pro와 함께 WordPerfect 2020을 설치하고 정확히 동일한 멀티 스레드 프로세스를 실행했으며 8개 CPU 모두에서 정확히 동일한 결과 최대 CPU 사용 = 1/8 = 12.5%를 얻었습니다.
예시 #4
- 다중 스레드 프로세스 중 다시 모든 CPu를 활용했지만 총 1/N CPU, 즉 12.5%만이 Mark Russinovich의 Process Explorer(일명 PROCMON.exe)입니다. 이는 적은 리소스를 사용하여 다른 모든 프로세스와 독립적이었습니다.
여기서 멀티스레딩을 프로그래밍하는 것이 Mark의 능력인지 의심스럽습니다. :) (MS 펠로우)
답변1
모든 작업이 본질적으로 CPU의 모든 코어에서 동시에 실행될 수 있는 작업으로 분할될 수 있는 것은 아닙니다.
CPU의 각 코어는 완전한 기능을 갖춘 프로세서입니다. 하나의 하드웨어 "스레드"의 실행 상태에 대한 정보를 유지할 수 있습니다. 각 코어에는 다른 모든 코어와 독립적으로 자체 캐시 및 데이터 처리 기능이 있습니다. 캐시와 메모리 버스를 공유할 수도 있지만 그 외에는 완전히 별개입니다.
해당 스레드는 대략적으로 소프트웨어에서 스레드로 알려진 것으로 변환됩니다.
당신이 보고 있는 문제는 해당 소프트웨어 내에서 작업을 수행하는 특정 작업이 본질적으로 단일 스레드라는 것입니다.
단일 스레드는 한 번에 하나의 코어에서만 실행될 수 있습니다. 8코어 프로세서에서는 단일 스레드가 프로세서의 최대 1/8, 즉 작업 관리자에 따르면 12.5%를 사용할 수 있음을 의미합니다. 4코어 프로세서에서는 1/4 또는 25%입니다.
프로그램에는 많은 스레드가 있을 수 있지만 이러한 스레드는 서로 완전히 관련되지 않은 작업에만 작동할 수 있습니다. 한 스레드는 장면의 데이터 업데이트를 처리하고 다른 스레드는 GUI를 업데이트하는 등의 작업을 수행할 수 있습니다.
스레드가 할 수 없는 것은 서로 통신하지 않고 동시에 정확히 동일한 데이터에 대해 작업하는 것이며 이것이 바로 한계입니다.
둘 이상의 CPU 코어를 사용하려면 수행 중인 작업을 여러 스레드로 분할하여 나누어야 합니다. 분할은 프로그래밍 문제이며 구현하는 것은 소프트웨어 엔지니어에게 달려 있습니다. 특정 작업이 멀티스레드인지 여부는 해당 작업의 복잡성과 처음에 분할할 수 있는지 여부에 따라 결정됩니다.
- 작업에 별도의 스레드에서 작업하기 위해 독립적인 데이터 세트로 분할할 수 있는 데이터가 포함되어 있습니까?
- 특정 작업을 별도의 스레드로 분할하도록 소프트웨어가 작성되었습니까?
데이터가 특정 방식으로 작업되는 데 전적으로 의존하는 경우 둘 이상의 코어를 사용할 방법이 없습니다.
데이터를 분할할 수 있지만 분할하고 다시 병합하는 데 훨씬 더 많은 작업이 필요한 경우 소프트웨어 엔지니어는 노력할 가치가 없다고 판단하고 대신 하나의 스레드/코어만 사용하게 됩니다.
데이터를 분할할 수 있고 소프트웨어가 그렇게 하도록 설계된 경우그 다음에1개 이상의 코어가 사용 중인 것을 볼 수 있습니다.
저는 Excel이 멀티 코어 계산을 지원하는 여러 작업에 대해 알고 있지만 이는 서로 전혀 종속되지 않는 데이터에만 전적으로 의존합니다.