将此 for 循环与多个线程并行化的最佳方法

Best way to parallelize this for loop with multiple threads

我目前有这样一个代码块

UINT8* u = getResult();
for (UINT64 counter = 0; counter < MaxCount; counter++)
{
    for (UINT64 index = 0; index < c_uOneMB; ++index)
    {
        *u++ = genValue();
    }
}

现在为了使这个 运行 更快。我正在做这样的事情。基本上将内线程拆分成一个方法。但是我有两个问题,我不确定如何解决。

  1. *u++ 我该如何处理?
  2. 在调用 doSomethingElse() 之前,所有线程都需要 .join()

关于如何实现这一点有什么建议吗?

void doSomething(UINT8* u)
{
      for (UINT64 index = 0; index < c_uOneMB; ++index)
      {
          *u++ = genValue();
      }
}

UINT8* u = getResult();
for (UINT64 counter = 0; counter < MaxCount; counter++)
{
    std::thread t(doSomething,u);
}

doSomethingElse();

Best way to parallize this for loop with multiple threads

最佳 方式取决于许多因素并且是主观的。事实上,有时(也许大多数时候)non-parallelised 代码更快。如果速度最重要,那么最好的方法就是您测得最快的方法。

使用标准库算法通常很简单:

std::generate_n(
    std::execution::par_unseq,
    u,
    MaxCount * c_uOneMB,
    genValue);

根据你提供的细节,我只能给出这个:

std::generate_n(std::execution::par, getResult(), MaxCount * c_uOneMB, genValue);