#include <cmath>
#include <iostream>
#include <vector>
int main() {
constexpr size_t kArraySize = 1000000;
std::vector<double> input(kArraySize);
std::vector<double> output(kArraySize);
for (size_t i = 0; i < kArraySize; ++i) {
input[i] = static_cast<double>(i);
}
std::cout << "Example 1: Simple parallel_for with per-element lambda\n";
dispenso::parallel_for(0, kArraySize, [&](
size_t i) { output[i] = std::sqrt(input[i]); });
std::cout << " output[0] = " << output[0] << ", output[999999] = " << output[999999] << "\n";
std::cout << "\nExample 2: parallel_for with range-based lambda (chunked)\n";
dispenso::parallel_for(size_t{0}, kArraySize, [&](size_t start, size_t end) {
for (size_t i = start; i < end; ++i) {
output[i] = input[i] * 2.0;
}
});
std::cout << " output[0] = " << output[0] << ", output[999999] = " << output[999999] << "\n";
std::cout << "\nExample 3: parallel_for with per-thread state (reduction)\n";
std::vector<double> partialSums;
dispenso::parallel_for(
partialSums,
[]() { return 0.0; },
size_t{0},
kArraySize,
[&](double& localSum, size_t start, size_t end) {
for (size_t i = start; i < end; ++i) {
localSum += input[i];
}
});
double totalSum = 0.0;
for (double partial : partialSums) {
totalSum += partial;
}
std::cout << " Sum of all elements: " << totalSum << "\n";
std::cout << "\nExample 4: parallel_for with limited parallelism\n";
dispenso::parallel_for(
0,
100,
[](size_t i) {
(void)i;
},
options);
std::cout << " Completed with maxThreads = 2\n";
std::cout << "\nAll parallel_for examples completed successfully!\n";
return 0;
}