#include <iostream>
#include <vector>
#include <omp.h>
#define VECTOR_SIZE 1000000
int main() {
std::vector<int> vec1(VECTOR_SIZE, 1);
std::vector<int> vec2(VECTOR_SIZE, 2);
int dot_product = 0;
// Static scheduling
#pragma omp parallel for reduction(+:dot_product) schedule(static)
for (int i = 0; i < VECTOR_SIZE; ++i) {
dot_product += vec1[i] * vec2[i];
}
std::cout << "Dot product using static scheduling: " << dot_product << std::endl;
dot_product = 0;
// Dynamic scheduling
#pragma omp parallel for reduction(+:dot_product) schedule(dynamic)
for (int i = 0; i < VECTOR_SIZE; ++i) {
dot_product += vec1[i] * vec2[i];
}
std::cout << "Dot product using dynamic scheduling: " << dot_product << std::endl;
dot_product = 0;
// Guided scheduling
#pragma omp parallel for reduction(+:dot_product) schedule(guided)
for (int i = 0; i < VECTOR_SIZE; ++i) {
dot_product += vec1[i] * vec2[i];
}
std::cout << "Dot product using guided scheduling: " << dot_product << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8b21wLmg+CgojZGVmaW5lIFZFQ1RPUl9TSVpFIDEwMDAwMDAKCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8aW50PiB2ZWMxKFZFQ1RPUl9TSVpFLCAxKTsKICAgIHN0ZDo6dmVjdG9yPGludD4gdmVjMihWRUNUT1JfU0laRSwgMik7CgogICAgaW50IGRvdF9wcm9kdWN0ID0gMDsKCiAgICAvLyBTdGF0aWMgc2NoZWR1bGluZwogICAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yIHJlZHVjdGlvbigrOmRvdF9wcm9kdWN0KSBzY2hlZHVsZShzdGF0aWMpCiAgICBmb3IgKGludCBpID0gMDsgaSA8IFZFQ1RPUl9TSVpFOyArK2kpIHsKICAgICAgICBkb3RfcHJvZHVjdCArPSB2ZWMxW2ldICogdmVjMltpXTsKICAgIH0KCiAgICBzdGQ6OmNvdXQgPDwgIkRvdCBwcm9kdWN0IHVzaW5nIHN0YXRpYyBzY2hlZHVsaW5nOiAiIDw8IGRvdF9wcm9kdWN0IDw8IHN0ZDo6ZW5kbDsKCiAgICBkb3RfcHJvZHVjdCA9IDA7CgogICAgLy8gRHluYW1pYyBzY2hlZHVsaW5nCiAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IgcmVkdWN0aW9uKCs6ZG90X3Byb2R1Y3QpIHNjaGVkdWxlKGR5bmFtaWMpCiAgICBmb3IgKGludCBpID0gMDsgaSA8IFZFQ1RPUl9TSVpFOyArK2kpIHsKICAgICAgICBkb3RfcHJvZHVjdCArPSB2ZWMxW2ldICogdmVjMltpXTsKICAgIH0KCiAgICBzdGQ6OmNvdXQgPDwgIkRvdCBwcm9kdWN0IHVzaW5nIGR5bmFtaWMgc2NoZWR1bGluZzogIiA8PCBkb3RfcHJvZHVjdCA8PCBzdGQ6OmVuZGw7CgogICAgZG90X3Byb2R1Y3QgPSAwOwoKICAgIC8vIEd1aWRlZCBzY2hlZHVsaW5nCiAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IgcmVkdWN0aW9uKCs6ZG90X3Byb2R1Y3QpIHNjaGVkdWxlKGd1aWRlZCkKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVkVDVE9SX1NJWkU7ICsraSkgewogICAgICAgIGRvdF9wcm9kdWN0ICs9IHZlYzFbaV0gKiB2ZWMyW2ldOwogICAgfQoKICAgIHN0ZDo6Y291dCA8PCAiRG90IHByb2R1Y3QgdXNpbmcgZ3VpZGVkIHNjaGVkdWxpbmc6ICIgPDwgZG90X3Byb2R1Y3QgPDwgc3RkOjplbmRsOwoKICAgIHJldHVybiAwOwp9