我正在接近C ++中的并行编程,当我使用返回值的函数时,我决定将std::async
与future
对象一起使用。特别是,我正在并行化集成商。我有一个函数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()完成了这项工作。
答案 0 :(得分:0)
启动3个线程比运行计算需要更长的时间。