Я новичок в C ++, а также MPI, поэтому у меня есть некоторые проблемы.
В моем коде процесс 0 читает текстовые файлы (burcu - имя файла, алфавит - все буквы в алфавите) и преобразует файл имени в массив чисел.С помощью MPI_Bcast я распределяю количество букв между различными процессами, и эти подчиненные процессы выполняют некоторые арифметические операции.В конце, используя MPI_Reduce, я собираю результат этих арифметических операций (который является xnum) в weightednum в процессе 0.
Проблема заключается в том, что я запускаю код, хотя значения xnum верны, weightednumимеет странный результат, такой как 939605 (это должно быть 215, что является суммой значений xnum).Что может быть причиной этого неверного результата?Мой код выглядит следующим образом:
int main (int argc, char **argv) {
int myid, nprocs;
int *countname, xnum, weightednum;
char *burcu, *alfabe;
MPI_Init (&argc, &argv);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &nprocs);
int size = 5;
countname = new int[size];
burcu = new char[5];
alfabe = new char[26];
char name[5];
char alphabet[26];
MPI_Reduce(&xnum, &weightednum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
if (myid == 0) {
cout << "wn" << weightednum ;
// Read myname.txt file and convert it to a string
ifstream input("myname.txt");
for (int i = 1; i < 6; i++){
input >> name;
cout << name;
burcu[i] = *name;
}
// Read alhabet.txt file and convert it to a string
ifstream input1("alphabet.txt");
for (int i = 1; i < 27; i++){
input1 >> alphabet;
cout << alphabet;
alfabe[i] = *alphabet;
}
for (int i = 1; i <= 5; i++){
for (int j = 1; j<= 26; j++){
if (alfabe[j] == burcu[i]){
countname[i] = j;
break;
}
}
cout << countname[i] << " ";
}
input.close();
input1.close();
}
// Send name and alphabet strings to all processors by means of broadcasting
MPI_Bcast(countname, 6, MPI_INT, 0, MPI_COMM_WORLD);
if (myid != 0){
// All processors receive the same messages, and they will take only one letter of your name
//xnum = myid;
xnum = countname[myid]*myid;
cout << "xnum:" << xnum;
}
MPI_Finalize();
return 0;
Заранее спасибо!