Как разделить цикл FOR на N четных частей для параллельного выполнения с учетом постоянных входных данных для каждой итерации? - PullRequest
4 голосов
/ 30 января 2012

У меня есть длительный цикл, который я хотел бы выполнить параллельно. Псевдокод:

for(int n = 0; n < 2048; n++)
{
  output_data[n] = function(constant_input_data, n)
}
  • Входные данные для каждой итерации полностью одинаковы
  • Выход для N-й итерации сохраняется в массиве с индексом N.

Как разделить этот цикл на равные части C, где C - количество ядер ЦП?

Какой самый лучший и самый элегантный способ сделать это в C #, .net?

1 Ответ

7 голосов
/ 30 января 2012

Использование Parallel.For из TPL

Parallel.For( 0, 2048, n=>
   {
         output_data[n] = function(constant_input_data, n);
    });

TPL пытается создать столько потоков, сколько и no.ядер у вас есть, а затем ваша работа делится на задачи, которые запланированы в этих потоках.Так что это 2048 задач на возможно х нет.потоков, где х нет.ядер.

...