Мне нужно запустить функцию generator
в моем коде параллельно на двух процессорах. В проекте есть два файла main.c
& cartes.c
, и он работает последовательно.
main.c
Файл содержит для l oop, который вызывает функцию generator
main.c
:
MPI_Init(&argc, &argv);
int id;
MPI_Comm_rank(MPI_COMM_WORLD, &id);
.
.
.
for (iter_sec = 0; iter_sec < long_of_seq; iter_sec++) { //
uint64_t Xg1 = generator(&K[0], iter_sec, ratio1, ratio2, ratio3, ratio4, m1, m2, id);
sequence[iter_sec] = Xg1;
.
.
}
useTheSequenceArrayResultFromTheForLoopToCaclulateAndPrintTheFinalResult(sequence);
.
.
.
Файл cartes.c
содержит generator
функцию
cartes.h
uint64_t generator (key *K,int iter_sec,double ratio1, double ratio2,double ratio3, double ratio4,uint64_t m1, uint64_t m2, int id);
cartes.c
.
.
.
uint64_t generator(key* K, int iter_sec, double ratio1, double ratio2, double ratio3, double ratio4, uint64_t m1, uint64_t m2, int id){
K->X_s = someFunction(...);
K->X_s = someOtherFunction(...);
Xresult = K->X_p ^ K->X_s;
return Xresult;
}
.
.
.
Я пытаюсь вычислить результат функции generator
на двух процессорах. Я передаю идентификатор процессора в функцию generator
. Если идентификатор ранга 0
, мне нужно позвонить someFunction
, а если ранг 1
, мне нужно позвонить someOtherFunction
. В конце мне нужно вернуть XOR ^
результатов от someFunction
и someOtherFunction
.
Я попытался сделать следующее:
.
.
.
uint64_t generator(key* K, int iter_sec, double ratio1, double ratio2, double ratio3, double ratio4, uint64_t m1, uint64_t m2, int id){
if (id == 0) {
K->X_s = someFunction(...);
}
else if(id == 1){
K->X_s = someOtherFunction(...);
}
Xresult = K->X_p ^ K->X_s;
return Xresult;
}
.
.
.
Но измененный вышеуказанная функция не работает.
Когда я пытаюсь запустить код:
mpicc main.c -o saving
mpirun -np 4 ./saving
Весь код выполняется четыре раза, и результат generator
не возвращается в for l oop и не сохраняется в массиве sequence
.
Как изменить функцию sequence
, чтобы она выполняла someFunction
и someOtherFunction
на разных процессорах и возвращала результат XOR для они оба до for loop
в основном файле? После заполнения массива sequence
я передам его функции useTheSequenceArrayResultFromTheForLoopToCaclulateAndPrintTheFinalResult
для вычисления окончательного результата.