CPP 063 – Execution Policy

std algoritmalarının çalışma şeklinin paralel, sequential veya vectorized olup olmadığını belirlemek için kullanıyoruz.

#include <iostream>
#include <vector>
#include <algorithm>
#include <execution>
#include <chrono>
using namespace std;

int delta(int& a, int& b) {
	return max(a - b, b - a);
}

int main() {	
	vector<int> A(100'000'000);
	vector<int> B(100'000'000);
	vector<int> C(100'000'000);

	std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
	transform(std::execution::seq, A.begin(), A.end(), B.begin(), C.begin(), delta);
	std::cout << "Time difference seq = " << std::chrono::duration_cast<std::chrono::nanoseconds> (std::chrono::steady_clock::now() - begin).count() << "[ns]" << std::endl;

	begin = std::chrono::steady_clock::now();
	transform(std::execution::unseq, A.begin(), A.end(), B.begin(), C.begin(), delta);
	std::cout << "Time difference unseq = " << std::chrono::duration_cast<std::chrono::nanoseconds> (std::chrono::steady_clock::now() - begin).count() << "[ns]" << std::endl;

	begin = std::chrono::steady_clock::now();
	transform(std::execution::par, A.begin(), A.end(), B.begin(), C.begin(), delta);
	std::cout << "Time difference par = " << std::chrono::duration_cast<std::chrono::nanoseconds> (std::chrono::steady_clock::now() - begin).count() << "[ns]" << std::endl;

	begin = std::chrono::steady_clock::now();
	transform(std::execution::par_unseq, A.begin(), A.end(), B.begin(), C.begin(), delta);
	std::cout << "Time difference par_unseq = " << std::chrono::duration_cast<std::chrono::nanoseconds> (std::chrono::steady_clock::now() - begin).count() << "[ns]" << std::endl;

}
// 1'000'000
// Time difference seq = 2736700[ns]
// Time difference unseq = 2871400[ns]
// Time difference par = 1789800[ns]
// Time difference par_unseq = 2443400[ns]

// 10'000'000
// Time difference seq = 19358900[ns]
// Time difference unseq = 23644600[ns]
// Time difference par = 15047700[ns]
// Time difference par_unseq = 13758700[ns]

// 100'000'000
// Time difference seq = 170187400[ns]
// Time difference unseq = 167453300[ns]
// Time difference par = 124371800[ns]
// Time difference par_unseq = 126033500[ns]

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *