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

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

  • 如何将此循环划分为C个相等的部分,其中C是CPU内核数?

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

    最佳答案

    使用TPL的Parallel.For

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

    TPL尝试生成与no一样多的线程。拥有的CPU核心数量,然后将您的工作分为在这些线程上安排的任务。因此,可能x上为2048个任务。 x为no的线程数。的核心。

    10-08 08:43