파이썬의 CPU 사용량을 늘리는 방법


21

파이썬을 사용하여 일부 알고리즘을 실행하고 어떤 파이썬을 사용하든 많은 버전을 시도했지만 CPU 사용량은 최대 25 %입니다. 파이썬이 나머지 CPU 리소스를 활용하지 않는 이유는 무엇입니까? 서비스 우선 순위를 보통에서 높음으로, 나중에 다시 실시간으로 변경했지만 그 사이에 다시 시작했지만 아무것도 변경되지 않았습니다.

파이썬이 내 CPU의 50 % 이상을 사용하도록하는 방법이 있습니까?


귀하의 CPU는 멀티 코어 CPU입니까?
Journeyman Geek

예, i5-480M이며 제어판> 전원 옵션> cpu min / max에서 100 %입니다
Christos K.

답변:


20

간단히 말해서 4 개의 논리 코어가있는 시스템에서 단일 스레드 응용 프로그램을 실행하는 것입니다. 따라서 모든 코어를 사용하는 하나의 프로세스가 있습니다.

다중 스레드가되도록 알고리즘을 다시 작성하거나 특정 코어에서 2 개 이상의 인스턴스를 실행하여 더 많은 CPU를 사용할 수 있는지 확인해야합니다. 다른 방법은 없습니다.


나는 이것이 사실이 될까 두려웠지만 Windows 작업 관리자의 CPU 사용량 다이어그램에서는 알고리즘이 실행되는 동안 1 개의 다이어그램이 선택되는 것을 보지 못했지만 반대로 모든 것이 크게 증가했습니다.
Christos K.

1
시스템이 코어 간의로드 균형을 조정하고 있습니다. 여전히 한 번에 두 개의 코어가 사용되지 않습니다.
gronostaj

당신이 내 두려움을 확인 얘들 아, 내가 스레딩에 대해 읽기 시작하는 시간에 대한 것 같다
Christos K.

@ fractal_7 : 스레딩이 기대하는 이점을 얻지 못할 수 있습니다. 아래 답변을 참조하십시오.
롤랜드 스미스

15

파이썬 언어는 멀티 코어 CPU보다 먼저 사용되므로 기본적으로 사용하지 않는 것은 이상한 일이 아닙니다.

또한 모든 프로그램이 여러 코어에서 이익을 얻을 수있는 것은 아닙니다. 다음 단계가 이전 단계의 결과에 의존하는 단계에서 수행 된 계산은 더 많은 코어를 사용하면 더 빠르지 않습니다. 개별 계산이 독립적이기 때문에 벡터화 할 수있는 문제 (대량의 데이터 배열에 동일한 계산을 적용)는 여러 코어를 사용하기가 비교적 쉽습니다.

많은 계산을 수행 할 때 numpy 사용한다고 가정합니다 . 그렇지 않은 경우 확인하십시오. ATLAS와 같은 최적화 된 선형 대수 라이브러리를 사용할 수있는 C로 작성된 확장입니다. 표준 Python과 비교하여 숫자 계산 속도를 크게 높일 수 있습니다.

파이썬에서 여러 코어를 사용하는 방법은 여러 가지가 있습니다.

  • 내장 multiprocessing모듈입니다. 이 multiprocessing.Pool클래스는 여러 CPU에서 벡터화 map()및 관련 메소드를 제공합니다. 그러나 여기에는 절충점이 있습니다. 프로세스간에 많은 양의 데이터를 통신해야하는 경우 해당 오버 헤드로 인해 여러 코어의 이점이 무효화 될 수 있습니다.
  • 적절한 numpy 빌드를 사용하십시오. numpy가 멀티 스레딩 ATLAS 라이브러리로 구축되면 큰 문제에서 더 빠릅니다.
  • numexpr , 병렬 python , corepy 또는 Copenhagen Vector Byte Code 와 같은 확장 모듈을 사용하십시오 .

threading이와 관련 하여 모듈이 모두 유용한 것은 아닙니다. 메모리 관리를 간단하게 유지하기 위해 전역 인터프리터 잠금 ( "GIL")은 한 번에 하나의 스레드 만 파이썬 바이트 코드를 실행할 수 있도록합니다. numpy와 같은 외부 모듈은 내부적으로 여러 스레드를 사용할 수 있습니다.


지금까지 나는 python 2.7 ironpython을 사용하고 pypy를 시도했다. 나는 numpy에게 기회를 줄 것이다. 그러나 다중 처리 모듈을 사용하려면 먼저 읽어야합니다.
Christos K.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.