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

标签 c++ fork multiprocessing

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

我想没有这样的东西。我完全希望有一个 Boost::Process 就像有一个 Boost::Thread .

最佳答案

OpenMP(Open Multi-Processing)是我所知道的唯一库 http://en.wikipedia.org/wiki/OpenMP -- 然而,它并不像 Python 通过创建新进程那样处理事情。 OpenMP 是编译器扩展,受 Microsoft 支持和 GNU 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;
}

关于c++ - 是否有可用于 C++ 的广泛使用的多处理抽象库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691621/

相关文章:

c++ - 一次从文件中读取多行而不包含部分行的方法

python - NUMA 硬件上的内存分配和访问

c - execvp/fork——如何捕捉不成功的执行?

python - 在函数中执行循环多处理的最快方法?

Python,有一个进程在后台运行并从主线程获取状态

c++ - 指针 vector C++ Boost 序列化错误

c++ - 非常基础的英语语法解析器

c++ - 为什么当你没有定义一个函数时你会得到一个链接器错误而不是编译器?

C# 相当于 fork()/exec()

algorithm - 我如何计算这两个过程的预计完成时间