태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


2007/07/30 21:41

C# on multicore processor (or multi processor) - 멀티 프로세싱을 위한 C#

c#에선 단순히 스레드만 여러개 만든다고 멀티 프로세싱이 되진 않는다. 스레드가 어느 프로세서에서 실행될 수 있는지를 지정해줘야 한다.
public static void ThreadProc(object threadId)
{
	int id = (int)threadId;

	while(true)
	{
		int sum = 0;

		for (int i = 0; i < 1000000; i++)
		{
			sum += i;
		}

		Console.Out.Write(string.Format("{0} ", id));
	}
}

static void Main(string[] args)
{
	const int NumOfThread = 4;

	Thread[] threads = new Thread[NumOfThread];

	for (int i = 0; i < NumOfThread; i++)
	{
		threads[i] = new Thread(ThreadProc);
		threads[i].Start(i);
	}

	Process currentProcess = Process.GetCurrentProcess();

	foreach (ProcessThread processThread in currentProcess.Threads)
	{
		processThread.ProcessorAffinity = currentProcess.ProcessorAffinity;
	}

	for (int i = 0; i < NumOfThread; i++)
	{
		threads[i].Join();
	}
}

currentProcess.ProcessorAffinity는 현재 프로세스가 실행될 수 있는 프로세서에 대한 비트마스크이다. 예를들어 프로세서가 4개라면 프로그램은 프로세서1부터 4까지 프로세서 중 하나에서 실행될 수 있다. 이 비트마스크를 10진수로 표현하면 15이다.

반면 processThread.ProcessorAffinity는 기본적으로 해당 프로세스가 돌아가는 프로세서 내에서만 동작할 수 있게 되어있다. 이 값을 모든 프로세서안에서 실행될 수 있게 바꿔주는 것이다.
Trackback 0 Comment 0