Контрольное количество ядер для параллельного выполнения

Я установил NCrunch, который является инструментом (помимо прочего) для выполнения параллельных тестов. Он предоставляет два параметра MaxNumberOfUsedCores и MaxNumberOfUsedThreads. Первый сеттинг выглядит интригующим. Я не помню никаких средств .NET, которые позволяли бы управлять ядрами, которые используются для выполнения вашего кода. Итак, вопрос в том, как это сделать?


person SiberianGuy    schedule 24.06.2012    source источник
comment
возможно - ›stackoverflow .com / questions / 2823076 / и stackoverflow.com/questions/3429999/   -  person Sebastian Piu    schedule 24.06.2012


Ответы (1)


Вы пробовали ProcessThread.ProcessorAffinity? ProcessorAffinity представляет каждый процессор как бит. Бит 0 представляет процессор один, бит 1 представляет процессор два и так далее. Например:

var currectProcess = System.Diagnostics.Process.GetCurrentProcess();

foreach(System.Diagnostics.ProcessThread thread in currectProcess.Threads) 
{ 
    // this could give you something similar to MaxNumberOfUsedCores 
    thread.ProcessorAffinity = (IntPtr)0x0007; // Valid processors: 1, 2, or 3
}

Теперь у меня в NCrunch следующая конфигурация, которая очень похожа на предыдущий пример C #:

  • Количество ядер ЦП, назначенных NCrunch: 0, 1, 2
  • Количество ядер ЦП, назначенных Visual Studio: 3

Но сказать нам мог только автор NCrunch @ remco-mulder, правда это или нет.

btw: ReSharper имеет аналогичные возможности для управления количеством параллельно работающих потоков unittests.

person Akim    schedule 25.07.2012