2016-10-19 13 views
0

をコンパイルするとき、私は私が合計を計算するために parllel_for を利用するようにしようとしていますTBBエラー

#include <iostream> 
#include <cstring> 
#include "tbb/tbb.h" 

using namespace std; 
using namespace tbb; 

class Accumulate{ 
    float& arr; 
    float* src; 

    public: 
    Accumulate(float& _arr, float* _src) 
    :arr(_arr), src(_src){} 
    void operator() (int i) const{ 
     arr += src[i]; 
    } 

}; 

int main(int argc, const char * argv[]) { 
    float arr[4] = {1,3,9,27}; 
    float sum = 0; 
    parallel_for(0, 4, Accumulate(sum, arr)); 
    cout<< sum << endl; 
} 

実行しようとしています次のコードを持っており、これはTBBライブラリが必要です。私はソースtbbディレクトリをダウンロードし、それを私のxcodeプロジェクトディレクトリに貼り付けました。

私は上記のコードをコンパイルしようとすると、私は次のエラー 「TBB /内部/ _flow_graph_types_impl.h」ファイルが

が見つかりませんを取得するように見える、私は私が行方不明です何かわからない、アドバイスしてください

答えて

3

私はTBBのレポでこのファイルを見ることができます:https://github.com/01org/tbb/blob/tbb_2017/include/tbb/internal/_flow_graph_types_impl.h

TBBのインストールが破損していないことを確認してください。

オフトピックアドバイス、そこにあなたのプログラム内のデータ競合がsum上にあり、あなたの代わりに、明示的なファンクターのラムダを使用することができます。

int main(int argc, const char * argv[]) { 
    float arr[4] = {1,3,9,27}; 
    atomic<float> sum = 0; // fixing data-race. Still, it's not recommended way 
    parallel_for(0, 4, [&](int i){ 
     sum += arr[i]; 
    }); 
    cout<< sum << endl; 
} 

は、きれいな、このコードは正しいようにするためにもtbb::parallel_reduceを参照してください。効率的です。

関連する問題