我正在嘗試在所有處理器上查找我正在處理的排序中的全局最小值和最大值。我試圖用MPI_Reduceall
MPI_Allreduce加倍
int rank, nproc;
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
vector< vector<double> > buckets(nproc);
double local_min = *std::min_element(values_to_sort.begin(), values_to_sort.end());
double local_max = *std::max_element(values_to_sort.begin(), values_to_sort.end());
int min = 0;
int max = 0;
double global_min;
double global_max;
MPI_Allreduce(&local_min, &global_min, 1, MPI_2DOUBLE_PRECISION, MPI_MINLOC, MPI_COMM_WORLD);
MPI_Allreduce(&local_max, &global_max, 1, MPI_2DOUBLE_PRECISION, MPI_MAXLOC, MPI_COMM_WORLD);
cout << "local_min " << local_min << " local_max " << local_max << endl;
cout << "global_min " << global_min << " global_max " << global_max << endl;
每次
我的代碼顯示,和段錯誤。這是一個簡單的函數,並使用隨機生成的雙打來調用:
int min = 0;
int max = 100;
vector<double> values_to_sort;
vector<double> sorted_values;
for(int i=0; i< 1000; i++)
{
values_to_sort.push_back(((double) rand()*(max-min)/(double)RAND_MAX-min));
}
如果有人知道爲什麼這個seg錯誤,請告訴我。我真的很想快速簡單地獲得全局最大值和最小值。
你可能會更好用不同的對類型,例如int + double。 – Jeff
'MPI_2DOUBLE_PRECISION'是Fortran MPI類型,不是C++類型。你不應該在C++代碼中使用它。 – Gilles