编译

时间:2016-10-19 18:22:22

标签: c++ c++11 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;  
}

我正在尝试使用 parllel_for 来计算总和,这需要tbb库。我下载了源tbb目录并将其粘贴到我的xcode项目目录中。

当我尝试编译上面的代码时,我似乎得到以下错误 的&#39; TBB /内部/ _flow_graph_types_impl.h&#39;找不到文件

我不确定我缺少什么,请告知

1 个答案:

答案 0 :(得分:3)

我可以在TBB回购中看到这个文件:https://github.com/01org/tbb/blob/tbb_2017/include/tbb/internal/_flow_graph_types_impl.h

请确保您的TBB安装没有损坏。

非主题建议,您的程序中有sum的数据竞争,您可以使用lambda而不是显式仿函数:

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以使此代码正确,干净且高效。