在c ++中使用async意外的结果

时间:2018-04-10 20:24:57

标签: c++ performance c++11 asynchronous

我正在接近C ++中的并行编程,当我使用返回值的函数时,我决定将std::asyncfuture对象一起使用。特别是,我正在并行化集成商。我有一个函数integrate(const std::vector<double>& v, double h),它计算v中存储的函数下的积分。

我首先尝试使用长矢量函数并记录时间,然后将矢量分成三个子矢量并同时积分三个不同的子矢量。但是,第二次总是比第一次长,这是不可能的。我做错了什么?

double a;

const clock_t begin_time1 = clock();
a=integral(v1, h);
cout << double( clock () - begin_time1 ) /  CLOCKS_PER_SEC << endl;

future<double> f1, f2,f3;
const clock_t begin_time2 = clock();
f1 = async(launch::async, integral, ref(sv1), h);
f2 = async(launch::async, integral, ref(sv2), h);
f3 = async(launch::async, integral, ref(sv3), h);
cout << double( clock () - begin_time2 ) /  CLOCKS_PER_SEC << endl;

cout << a << "  " << f1.get()+f2.get()+f3.get() << endl;

编辑: 我解决了clock()给出了CPU时间,我当然需要实时。 steady_clock()完成了这项工作。

1 个答案:

答案 0 :(得分:0)

启动3个线程比运行计算需要更长的时间。