2014-02-06 2 views
0

단일 스레드가있는 프로그램은 2 코어 (인텔 i5-3210M)의 CPU의 25 % 만 사용합니다. 왜 50 % (코어 1 개)가 아닌가? 프로그램은 윈도우 7 64와 맥북 프로에서 테스트되고있다. 그 문제는 하이퍼 스레딩 및이 프로그램 때문에 단 하나의 논리 코어 (CPU 파워의 25 %)를 사용하는 것 같아요. 내 프로그램에 더 많은 CPU 전력을 제공하려면 어떻게해야합니까? 이 프로그램은 많은 양의 데이터와 함께 작동하며 계산을 완료하는 데 약 30 시간이 걸리기 때문에 중요합니다.내 프로그램은 CPU 전력의 25 % 만 사용합니다

+2

"내 CPU에 더 많은 전력을 공급하려면 어떻게해야합니까?" 프로그램에 대한 더 많은 정보를 공유해야 할 수도 있습니다 (예 : 당신이 지금까지 가지고있는 것의 어떤 견본인지, 어떤 언어인지 - 우리는 당신의 모든 논리를 필요로하지 않으며 그것이 어떻게 작동 하는지를 단지 생각할 필요가 없습니다. – DaveShaw

+2

실제 코어가 4 개가 아니기 때문에 프로그램이 실제 처리 능력의 25 %를 사용하는 것은 아닙니다. 2 개의 "가상"코어 (하이퍼 스레딩이 활성화되어 있기 때문에)가있는 두 개의 물리적 코어가 있습니다. 따라서 CPU 사용량 추정치는 왜곡됩니다. 어떤 프로그램을 사용하든 * CPU 사용량의 25 %를보고 할 수 있지만 실제로는 50 %에 가깝습니다 (2 코어 중 1 개가 아닌 4 개 중 1 개가 페깅됩니다). 하이퍼 스레딩을 사용하더라도 컴퓨팅 잠재력이 마술처럼 두 배로 증가하지는 않습니다. "하이퍼 스레드"는 호환성 이유로 인해 개별 CPU로 표시됩니다. 작업 부하를 두 배로 수행 할 수있는 것은 아닙니다. 그것을 명심하십시오. –

+0

물론 작은 모델 데이터 세트에서 프로그램을 테스트했습니다. 그리고 프로그램이 올바로 작동합니다. 이제 알고리즘 rathen 코드를 테스트하고 있습니다. 가장 좋은 방법은 멀티 스레딩을 사용하는 것이지만 또 다른 질문입니다. – maxibystro

답변

0

CPU (4 개의 논리 프로세서가 있음)에서 말한 것처럼 예상 할 수 있습니다. 둘 이상의 스레드를 사용하기 위해 프로그램을 변환하는 방법을 검색 할 수 있습니다. "병렬 프로그래밍", "동시 프로그래밍", "멀티 스레딩"을 검색하도록 권장 할 수 있습니다. MS VC++ PPL 라이브러리를 사용하는 경우 사용하기가 쉽습니다 .OpenMP는 Linux에서도 사용할 수있는보다 능숙한 도구입니다. 이 문제에 대한 더 많은 방법과 라이브러리가 있지만 OS, 컴파일러, 환경, 프로그래밍 언어 및 문제에 따라 선택해야합니다.

그러나 가장 쉬운 해결책은 더 나은 CPU를 갖춘 데스크톱 컴퓨터에서 실행하고 손가락을 교차하여 최대한 빨리 결과를 얻는 것입니다.

0

이 프로그램은 하나의 논리 코어 (CPU 전원의 25 %) 만 사용합니다. 내 programm에 더 많은 CPU 전력을 제공하려면 어떻게해야합니까? ...이 프로그램은 많은 양의 데이터로 작동합니다 ... 계산을 완료하는 데 약 30 시간이 걸립니다.

데이터 세트를 (적어도) 4 개의 개별 조각으로 나눕니다. 많은 양의 데이터를 사용하면 데이터 요소를 4 개의 개별 구조로 복사하는 대신 인덱스로 생각할 수 있습니다. 데이터의 각 세그먼트에 대해 별도의 스레드를 만들고 스레드가 하나의 세그먼트 만 처리하게합니다. 스레드에 대한 프로세서 선호도를 설정해야 할 수도 있습니다.

데이터 스트림이 처리되어야하거나 순서대로 처리되어야하는 경우 큐잉 큐잉 처리를 위해 개별 스레드가 각 항목을 큐에서 제거하고 처리합니다. 이 작업은 대기열 작업이 항목 처리에 비해 상대적으로 빠르며 단일 대기열 스레드로 수행 할 수있는 반면 대기열 해제/처리 작업은 더 비쌉니다.

올바른 스레드 수를 선택하는 것은 까다 롭습니다. 최신 CPU 및 운영 체제는 수시로 작업을 전환하도록 설계되었습니다. 이것은 항상 비싼 작업이지만 스케줄러는 프로세스가 최상의 후보로 보일지라도 다른 모든 작업을 자주 수행하려고합니다. 따라서 논리 CPU 당 2 ~ 3 개의 스레드가 필요할 수 있으므로 CPU를 약간 오버로드하여 최상의 처리량을 얻을 수 있습니다. 이를 관리하는 한 가지 방법은 ThreadPool 개체를 사용하는 것입니다.

+0

고맙습니다.하지만 멀티 스레딩 사용법을 알고 있습니다. 내가 알고 싶은 것은 프로세스가 CPU 전력의 25 % 만 사용하는 것입니다 (50 %가 아님). 그리고 이제는 작업 관리자가 약 25 %를보고하지만 물리적 코어가 100 % 작동한다는 것을 이해합니다. – maxibystro

관련 문제