是否有广泛使用的多处理抽象库可用于c ++?

时间:2013-02-04 17:03:03

标签: c++ fork multiprocessing

我来自Python,全力以赴地进入C ++。而且,我最近提出的一个问题是:C ++中是否有广泛使用的开源多处理抽象库?我正在考虑使多处理(ala fork)更容易管理的东西,类似于Python的multiprocessing stdlib库

我想没有这样的事情。我完全希望有一个 Boost :: Process ,就像有Boost::Thread一样。

6 个答案:

答案 0 :(得分:1)

MPI会合适吗?我认为一旦你理解它就很容易编程。它确实是多进程的

答案 1 :(得分:0)

Intel TBB和M icrosoft PPL是两个基于任务的多线程库。

答案 2 :(得分:0)

我正在查看POCO库,其中有一个关于多处理的部分 我也在考虑fork(),它也有一些针对Windows的实现。

答案 3 :(得分:0)

查看http://pocoproject.org/(Process :: launch())和http://www.highscore.de/boost/process/。如果我不得不选择的话,我会选择第二个,但它们实际上远远不同于Python提供的便利(叹气)。

答案 4 :(得分:0)

现在有对多处理的 Boost 支持:https://www.boost.org/doc/libs/1_76_0/doc/html/boost_process/tutorial.html

从我的编译器(LLVM/clang)返回的一些消息来看,它看起来像 boost::process 是 POSIX fork 的包装器(以及对应的 Windows 包装器),就像 POCO 库一样。

答案 5 :(得分:-1)

OpenMP(Open Multi-Processing )是我所知道的http://en.wikipedia.org/wiki/OpenMP唯一的库 - 然而,它并不像Python那样通过创建新进程来处理事务。 OpenMP是一个编译器扩展,由MicrosoftGNU GCC支持。

示例:OpenMP sieve of eratosthenes

// odd-only sieve
int eratosthenesOdd(int lastNumber, bool useOpenMP)
{
  // enable/disable OpenMP
  omp_set_num_threads(useOpenMP ? omp_get_num_procs() : 1);
  // instead of i*i <= lastNumber we write i <= lastNumberSquareRoot to help OpenMP
  const int lastNumberSqrt = (int)sqrt((double)lastNumber);
  int memorySize = (lastNumber-1)/2;
  // initialize
  char* isPrime = new char[memorySize+1];
  #pragma omp parallel for
  for (int i = 0; i <= memorySize; i++)
    isPrime[i] = 1;
  // find all odd non-primes
  #pragma omp parallel for schedule(dynamic)
  for (int i = 3; i <= lastNumberSqrt; i += 2)
    if (isPrime[i/2])
      for (int j = i*i; j <= lastNumber; j += 2*i)
        isPrime[j/2] = 0;
  // sieve is complete, count primes
  int found = lastNumber >= 2 ? 1 : 0;
  #pragma omp parallel for reduction(+:found)
  for (int i = 1; i <= memorySize; i++)
    found += isPrime[i];
  delete[] isPrime;
  return found;
}