C++ multi-threaded learning (sixteen, parallel version in STL algorithm, sequenced_policy)

Table of contents

sequenced_policy

Use the code:

Prepare

the code

result:


sequenced_policy

Add parameters: sequenced_policy provides corresponding parallel version algorithm

execution::seq parallel algorithm execution can not be parallelized
execution::par parallel algorithm execution can be parallelized
execution::par_unseq parallel algorithm execution can be parallelized and vectorized

Look at the execution time of the three types

Use the code:

Prepare

 

the code

#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;
}

result:

 

 

Guess you like

Origin blog.csdn.net/q244645787/article/details/131636203