6

C ++で再利用可能な実行パイプラインライブラリ(ジョブスケジューラライブラリ?)を探していました。Boost内に何も見つかりませんでした。それで私は最終的に2つの候補を見つけました:

他の候補者がいませんか?誰かがそれらを使用しましたか?並列ioとマルチスレッドに関してどれくらい優れていますか?これらのライブラリには、依存関係の処理がまだ不足しているようです。たとえば、次のようなものをどのように書くかは私にはわかりません。

$ cat /dev/urandom | tr P Q | head -3

この非常に単純なケースでは、パイプラインはボトムアップでウォークされ、プロセスがプルをcat停止すると、最初のパイプラインは実行を停止します。head

ただし、次のような場合に、マルチスレッドやパラレルIOからどのようにメリットが得られるかわかりません。

$ cat /raid1/file1 /raid2/file2 | tr P Q > /tmp/file3

私が言う方法はありませんtr。8つのプロセッサが利用可能な場合、7つのスレッドで実行します。

4

3 に答える 3

2

今日、テンプレートとクラスを使用して「カーネル」と呼ばれるパイプライン要素を作成するRaftLibについて読みました。並列データフローに加えて、あなたが示した Bash の例のようなシリアル パイプラインが可能になります。フロントページのHello world の例から:

#include <raft>
#include <raftio>
#include <cstdlib>
#include <string>

class hi : public raft::kernel
{
public:
    hi() : raft::kernel()
    {
       output.addPort< std::string >( "0" ); 
    }

    virtual raft::kstatus run()
    {
        output[ "0" ].push( std::string( "Hello World\n" ) );
        return( raft::stop ); 
    }
};


int
main( int argc, char **argv )
{
    /** instantiate print kernel **/
    raft::print< std::string > p;
    /** instantiate hello world kernel **/
    hi hello;
    /** make a map object **/
    raft::map m;
    /** add kernels to map, both hello and p are executed concurrently **/
    m += hello >> p;
    /** execute the map **/
    m.exe();
    return( EXIT_SUCCESS );
}
于 2016-05-31T16:44:55.810 に答える