C++多线程学习(十六、STL算法中的并行版本,sequenced_policy)

目录

sequenced_policy

使用代码:

准备

代码

结果:


sequenced_policy

增加参数:sequenced_policy提供相应并行版算法

execution::seq并行算法执行可以不并行化
execution::par并行算法执行可以并行化
execution::par_unseq并行算法执行的可以并行以及向量化

看看3种的执行时间都是多少

使用代码:

准备

代码

#include<iostream>
#include<thread>
#include<random>
#include<chrono>
#include<algorithm>	//算法头文件,包含了一些常用的算法函数,如排序、查找等;
#include<numeric>	//数值算法头文件,包含了一些数值算法函数,如求和、求平均值等;
#include<execution>	//主要用于并行算法的执行策略。
using namespace std;

void randomData(vector<double>& data, int size)
{
	random_device rd;	//生成种子
	mt19937 mt; (rd());	//mt19937作为随机数引擎
	uniform_real_distribution<double> dist(1.0,100.0);//定义一个生成1.0到100.0之间的均匀分布的随机数发生器
	for (int i = 0; i < size; i++)
	{
		data.push_back(dist(rd));
	}
}

int main()
{
	vector<double> Data;
	randomData(Data, 10e6);

	vector<double> test1(Data);
	vector<double> test2(Data);
	vector<double> test3(Data);
	//seq
	auto start_time = chrono::steady_clock::now();//计时时钟
	sort(execution::seq, test1.begin(), test1.end());
	auto end_time = chrono::steady_clock::now();
	auto duration = chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count();
	cout << "seq" << duration <<"ms"<< endl;

	//par
	auto start_time2 = chrono::steady_clock::now();//计时时钟
	sort(execution::par, test2.begin(), test2.end());
	auto end_time2 = chrono::steady_clock::now();
	auto duration2 = chrono::duration_cast<chrono::milliseconds>(end_time2 - start_time2).count();
	cout << "par" << duration2 << "ms" << endl;

	//par_unseq
	auto start_time3 = chrono::steady_clock::now();//计时时钟
	sort(execution::par_unseq, test3.begin(), test3.end());
	auto end_time3 = chrono::steady_clock::now();
	auto duration3 = chrono::duration_cast<chrono::milliseconds>(end_time3 - start_time3).count();
	cout << "par_unseq" << duration3 << "ms" << endl;
}

结果:

 

猜你喜欢

转载自blog.csdn.net/q244645787/article/details/131636203
今日推荐