#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MASTER 0
#define POLY_DEGREE 3
#define X_VALUE 2.0
int main(int argc, char* argv[]) {
int numtasks, taskid;
float global_result = 0.0, local_result = 0.0;
float coefficients[POLY_DEGREE + 1];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &taskid);
if (taskid == MASTER) {
for (int i = 0; i <= POLY_DEGREE; i++) {
coefficients[i] = i + 1.0;
}
for (int i = POLY_DEGREE; i >= 0; i--) {
printf("%.2fx^%d ", coefficients
[i
], i
); if (i != 0) {
}
else {
}
}
}
MPI_Bcast(coefficients, POLY_DEGREE + 1, MPI_FLOAT, MASTER, MPI_COMM_WORLD);
int chunk_size = (POLY_DEGREE + 1) / numtasks;
int start = taskid * chunk_size;
int end = (taskid + 1) * chunk_size;
if (taskid == numtasks - 1) {
end = POLY_DEGREE + 1;
}
printf("Task %d starts calculating: ", taskid
); for (int i = start; i < end; i++) {
float term_value
= coefficients
[i
] * pow(X_VALUE
, i
); local_result += term_value;
printf("%.2f*%.2f^%d = %.2f ", coefficients
[i
], X_VALUE
, i
, term_value
); if (i < end - 1) {
}
}
printf(", Partial Sum: %.2f\n", local_result
);
MPI_Reduce(&local_result, &global_result, 1, MPI_FLOAT, MPI_SUM, MASTER, MPI_COMM_WORLD);
if (taskid == MASTER) {
printf("Valoarea finala a polinomului evaluat in punctul %.2f este: %.2f\n", X_VALUE
, global_result
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgIm1waS5oIgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8bWF0aC5oPgoKI2RlZmluZSBNQVNURVIgMAojZGVmaW5lIFBPTFlfREVHUkVFIDMKI2RlZmluZSBYX1ZBTFVFIDIuMAoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewogICAgaW50IG51bXRhc2tzLCB0YXNraWQ7CiAgICBmbG9hdCBnbG9iYWxfcmVzdWx0ID0gMC4wLCBsb2NhbF9yZXN1bHQgPSAwLjA7CiAgICBmbG9hdCBjb2VmZmljaWVudHNbUE9MWV9ERUdSRUUgKyAxXTsKCiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwogICAgTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJm51bXRhc2tzKTsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZ0YXNraWQpOwoKICAgIGlmICh0YXNraWQgPT0gTUFTVEVSKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gUE9MWV9ERUdSRUU7IGkrKykgewogICAgICAgICAgICBjb2VmZmljaWVudHNbaV0gPSBpICsgMS4wOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlBvbGlub211bDogIik7CiAgICAgICAgZm9yIChpbnQgaSA9IFBPTFlfREVHUkVFOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBwcmludGYoIiUuMmZ4XiVkICIsIGNvZWZmaWNpZW50c1tpXSwgaSk7CiAgICAgICAgICAgIGlmIChpICE9IDApIHsKICAgICAgICAgICAgICAgIHByaW50ZigiKyAiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBNUElfQmNhc3QoY29lZmZpY2llbnRzLCBQT0xZX0RFR1JFRSArIDEsIE1QSV9GTE9BVCwgTUFTVEVSLCBNUElfQ09NTV9XT1JMRCk7CgogICAgaW50IGNodW5rX3NpemUgPSAoUE9MWV9ERUdSRUUgKyAxKSAvIG51bXRhc2tzOwogICAgaW50IHN0YXJ0ID0gdGFza2lkICogY2h1bmtfc2l6ZTsKICAgIGludCBlbmQgPSAodGFza2lkICsgMSkgKiBjaHVua19zaXplOwogICAgaWYgKHRhc2tpZCA9PSBudW10YXNrcyAtIDEpIHsKICAgICAgICBlbmQgPSBQT0xZX0RFR1JFRSArIDE7CiAgICB9CgogICAgcHJpbnRmKCJUYXNrICVkIHN0YXJ0cyBjYWxjdWxhdGluZzogIiwgdGFza2lkKTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgZmxvYXQgdGVybV92YWx1ZSA9IGNvZWZmaWNpZW50c1tpXSAqIHBvdyhYX1ZBTFVFLCBpKTsKICAgICAgICBsb2NhbF9yZXN1bHQgKz0gdGVybV92YWx1ZTsKICAgICAgICBwcmludGYoIiUuMmYqJS4yZl4lZCA9ICUuMmYgIiwgY29lZmZpY2llbnRzW2ldLCBYX1ZBTFVFLCBpLCB0ZXJtX3ZhbHVlKTsKICAgICAgICBpZiAoaSA8IGVuZCAtIDEpIHsKICAgICAgICAgICAgcHJpbnRmKCI7ICIpOwogICAgICAgIH0KICAgIH0KICAgIHByaW50ZigiLCBQYXJ0aWFsIFN1bTogJS4yZlxuIiwgbG9jYWxfcmVzdWx0KTsKCiAgICBNUElfUmVkdWNlKCZsb2NhbF9yZXN1bHQsICZnbG9iYWxfcmVzdWx0LCAxLCBNUElfRkxPQVQsIE1QSV9TVU0sIE1BU1RFUiwgTVBJX0NPTU1fV09STEQpOwoKICAgIGlmICh0YXNraWQgPT0gTUFTVEVSKSB7CiAgICAgICAgcHJpbnRmKCJWYWxvYXJlYSBmaW5hbGEgYSBwb2xpbm9tdWx1aSBldmFsdWF0IGluIHB1bmN0dWwgJS4yZiBlc3RlOiAlLjJmXG4iLCBYX1ZBTFVFLCBnbG9iYWxfcmVzdWx0KTsKICAgIH0KCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9Cg==