如何将FOR循环划分为N个偶数部分,以便在每次迭代给定恒定输入数据的情况下并行执行

本文关键字:迭代 情况下 并行执行 数据 输入 循环 划分 FOR 数部 | 更新日期: 2023-09-27 18:21:55

我有一个耗时的循环,我想并行执行。伪码:

for(int n = 0; n < 2048; n++)
{
  output_data[n] = function(constant_input_data, n)
}
  • 每次迭代的输入数据完全相同
  • 第N次迭代的输出存储在索引为N的数组中

如何将这个循环分成C等分,其中C是CPU核心数?

在C#,.net中,最好、最优雅的方法是什么?

如何将FOR循环划分为N个偶数部分,以便在每次迭代给定恒定输入数据的情况下并行执行

使用TPL 的Parallel.For

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

TPL试图生成与您拥有的cpu内核数量一样多的线程,然后将您的工作划分为在这些线程上调度的任务。因此,上的2048个任务可能是x线程数量,其中x是内核数量。