#include <thread>
#include <iostream>
#include <numeric>
#include <chrono>
#include <execution>
#include <algorithm>
#include <vector>
#include <random>
#include <cstdio>
using namespace std;
using namespace this_thread;
/*
增加叁数:sequenced_policy 提供相应并行版算法
execution::seq 并行算法执行可以不并行化
execution::par 并行算法执行可以并行化
execution::par_unseq 并行算法执行并行化以及向量化
*/
void randomData(vector<double>& data, int size)
{
//随机数
random_device rd;
mt19937 mt(rd());
uniform_real_distribution<double> dist(1.0,100.0);
for (int i = 0; i < size; i++)
{
data.push_back(dist(mt));
}
}
int main()
{
vector <double> data;
randomData(data,10e6);
vector<double> test1(data);
vector<double> test2(data);
vector<double> test3(data);
auto stime = chrono::steady_clock::now();
sort(execution::seq,test1.begin(),test1.end());
auto etime = chrono::steady_clock::now();
auto duratio = chrono::duration_cast<chrono::milliseconds> (etime - stime).count();
printf_s("execution::seq花费时间:%dms\n",duratio);
stime = chrono::steady_clock::now();
sort(execution::par, test2.begin(), test2.end());
etime = chrono::steady_clock::now();
auto duratio1 = chrono::duration_cast<chrono::milliseconds> (etime - stime).count();
printf_s("execution::par花费时间:%dms\n", duratio1);
stime = chrono::steady_clock::now();
sort(execution::par_unseq, test3.begin(), test3.end());
etime = chrono::steady_clock::now();
auto duratio2 = chrono::duration_cast<chrono::milliseconds> (etime - stime).count();
printf_s("execution::par_unseq花费时间:%dms\n", duratio2);
return 0;
}
第十八课:C++STL算法中的并行版本
最新推荐文章于 2024-06-01 16:45:37 发布