2010-04-01 4 views
0

복잡한 문제를 해결하기위한 프로그램을 작성했습니다. 이 프로그램은 단지 C# 콘솔 응용 프로그램이며 계산 부분이 끝날 때까지 console.write를 수행하지 않으므로 출력은 성능에 영향을 미치지 않습니다. 프로그램은 다음과 같이이다 : 계산 리소스 활용 방법

static void Main(string[] args) 
     { 

      Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize); 
      WorkerThread.Priority = ThreadPriority.Highest; 
      WorkerThread.Start(); 
      Console.WriteLine("Worker thread is runing..."); 
      WorkerThread.Join(); 
     } 

은 이제 내 작업 관리자를 열 때, 나는 그것은 단지 CPU 시간의 12 %을 참조 실행할로 3 분 소요됩니다. 나는 실제로 6G 3 채널 DDR3 기억을 가진 i7 인텔 cpu가있다. 하드웨어 사용률을 어떻게 향상시킬 수 있는지 궁금합니다.

덕분에 당신은 당신의 CPU를 활용하는 여러 스레드로 작업을 분리 할 필요가 있으므로

+2

언제든지 프로세서를 내 제품과 교환 할 수 있습니다. 최소한 60 %의 사용량을 보장해 드리겠습니다. – Ben

답변

0

한 스레드 만, 1 개 코어를 차지할 수 많은. 알고리즘에서 IO 연산을 수행하지 않는다고 확신합니까?

+0

예, 확신합니다. 내가 사용한 유일한 건 기억이야. 감사. – Frank

+0

글쎄, 아마도 CPU가 메모리를 기다리는 데 대부분의 시간을 보낸다. 어떤 경우에도 1 개의 쓰레드로 CPU의 25 % 이상을 사용할 수 없습니다. –

0

시간을 소비하는 데있어 백분율별로 무엇이 있는지 알아보십시오. This is the method I use, regardless of platform. 나는 I/O를 수행하지 않고 무엇을 추측했는지 확신 할 수있는 프로그램을 가졌습니까? 나는 가장 애매한 이유로 그랬다.

1

i7은 하이퍼 스레딩을 지원하므로 쿼드 코어 i7은 동시에 8 개의 스레드를 처리 할 수 ​​있습니다.

프로그램이 하나의 스레드를 사용하는 것으로 보이므로 Windows 작업 관리자는 사용 가능한 "가상"8 개의 CPU 중 하나를 사용하기 때문에 12-13 %의 CPU 사용량을 표시합니다.

HeavyWave가 말한 것처럼 더 높은 CPU 사용률을 얻기 위해 병렬로 실행할 수있는 더 많은 스레드로 계산을 나누는 방법을 찾아야합니다.

1

인텔 i7은 8 코어로보고해야합니다 (하이퍼 스레딩으로 인해 각각 2 코어로보고되는 4 개의 물리적 코어).

하나의 스레드를 시작하면 전체 CPU의 12.5 %를 가져와야합니다. 당신이 묘사하는 것과 거의 완벽한 인라인입니다.

하나의 스레드는 모든 리소스를 소비하는 여러 코어에서 실행될 수 없으며 실행되지 않습니다. 더 많은 리소스를 사용하려면 여러 스레드를 시작해야합니다. 이상적으로는 최소 4 개의 스레드가 필요하며 6 ~ 8 개의 스레드가 100 % 사용률에 근접해야합니다.

이렇게하려면 "복잡한 문제"를 병렬화 가능한 명령 경로로 분해 할 방법을 찾아야합니다.