我正在嘗試使用MPI編寫矩陣向量乘法程序。我試圖發送矩陣的列來分離進程並在本地計算結果。最後我做了MPI_Reduce
使用MPI_SUM
操作。使用MPI_Scatter發送矩陣列
發送矩陣的行很容易,因爲C按行主要順序存儲數組,但列不是(如果不逐一發送)。我讀到這裏的問題是:
MPI_Scatter - sending columns of 2D array
喬納森·德西使用新的MPI數據類型建議和這裏就是我已經適應了他的代碼,以我自己的需要做:
double matrix[10][10];
double mytype[10][10];
int part_size; // stores how many cols a process needs to work on
MPI_Datatype col, coltype;
// ...
MPI_Type_vector(N, 1, N, MPI_DOUBLE, &col);
MPI_Type_commit(&col);
MPI_Type_create_resized(col, 0, 1*sizeof(double), &coltype);
MPI_Type_commit(&coltype);
// ...
MPI_Scatter(matrix, part_size, coltype,
mypart, part_size, coltype,
0, MPI_COMM_WORLD);
// calculations...
MPI_Reduce(local_result, global_result,
N, MPI_DOUBLE,
MPI_SUM,
0, MPI_COMM_WORLD);
這工作完全,但我不能說我真的明白它是如何工作的。
MPI_Type_vector
如何存儲在內存中?MPI_Type_create_resized()
如何工作,它到底做了什麼?
請注意,我是MPI的初學者。提前致謝。
+1表示它是功課。 :) – solvingPuzzles
@hattenn請不要再使用[作業]標籤。它已被棄用。 [看標籤本身來證實這一點](http://stackoverflow.com/questions/tagged/homework) –