我正在尝试执行以下代码
#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;找不到文件
我不确定我缺少什么,请告知
答案 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
以使此代码正确,干净且高效。