Search⌘ K
AI Features

Solution: Total Revenue Calculation

Explore how to implement total revenue calculation using C++ parallel algorithms. Understand the use of execution policies such as sequential, parallel, and parallel unsequenced to optimize performance with multithreading and vectorization. This lesson helps you apply these concepts for efficient concurrency and faster computations.

We'll cover the following...
C++ 23
#include <iostream>
#include <vector>
#include <numeric> // for std::reduce
#include <execution> // for execution policies
#include <chrono> // for timing
void print_duration(const std::string& label, long long ms) {
std::cout << label << ": " << ms << " ms\n";
}
int main() {
const size_t DATA_SIZE = 10'000'000;
std::vector<int> transactions(DATA_SIZE, 1);
std::cout << "Processing " << DATA_SIZE << " transactions...\n";
// 1. Sequential
auto start_seq = std::chrono::high_resolution_clock::now();
long long sum_seq = std::reduce(std::execution::seq, transactions.begin(), transactions.end());
auto end_seq = std::chrono::high_resolution_clock::now();
auto dur_seq = std::chrono::duration_cast<std::chrono::milliseconds>(end_seq - start_seq).count();
std::cout << "Sum (Seq): " << sum_seq << " | ";
print_duration("Sequential", dur_seq);
// 2. Parallel
auto start_par = std::chrono::high_resolution_clock::now();
long long sum_par = std::reduce(std::execution::par, transactions.begin(), transactions.end());
auto end_par = std::chrono::high_resolution_clock::now();
auto dur_par = std::chrono::duration_cast<std::chrono::milliseconds>(end_par - start_par).count();
std::cout << "Sum (Par): " << sum_par << " | ";
print_duration("Parallel", dur_par);
// 3. Parallel Unsequenced
auto start_unseq = std::chrono::high_resolution_clock::now();
long long sum_unseq = std::reduce(std::execution::par_unseq, transactions.begin(), transactions.end());
auto end_unseq = std::chrono::high_resolution_clock::now();
auto dur_unseq = std::chrono::duration_cast<std::chrono::milliseconds>(end_unseq - start_unseq).count();
std::cout << "Sum (Unseq): " << sum_unseq << " | ";
print_duration("Parallel Unseq", dur_unseq);
return 0;
}
...