5

私は Python から来て、フルスロットルで C++ に向かいます。そして、私が最近思いついた質問の 1 つがこれです: C++ で広く使用されているオープン ソースのマルチプロセッシング抽象化ライブラリはありますか? Python のmultiprocessing stdlib libraryと同様に、 multiprocessing (ala fork ) を少し管理しやすくするものを考えています。

このようなことはないと思います。Boost::Threadがあるのと同じように、 Boost::Processがあることを完全に期待していました。

4

6 に答える 6

1

MPIは適合しますか? 理解してしまえば簡単にプログラミングできると思います。そして、それは真のマルチプロセスです

于 2013-02-04T17:09:54.850 に答える
1

OpenMP (Open Multi-Processing ) は、 http://en.wikipedia.org/wiki/OpenMPについて私が知っている唯一のライブラリです。ただし、新しいプロセスを作成することによって、Python のように物事を処理するわけではありません。OpenMP は、MicrosoftおよびGNU GCCによってサポートされているコンパイラ拡張機能です。

例:エラトステネスの OpenMP ふるい

// 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;
}
于 2013-02-04T17:10:58.477 に答える
0

Intel TBBMicrosoft PPLは、2 つのタスクベースのマルチスレッド ライブラリです。

于 2013-02-04T17:09:22.167 に答える
0

http://pocoproject.org/ (Process::launch()) とhttp://www.highscore.de/boost/process/を見てください。どちらかを選択する必要がある場合は 2 番目を選びますが、どちらも Python が提供する利便性とはかけ離れています (ため息)。

于 2015-09-23T08:28:09.500 に答える
0

マルチプロセッシングに関するセクションがあるPOCOライブラリを探しています。Windows用の実装もいくつかあるfork()
も検討しています。

于 2014-07-14T13:58:28.100 に答える