下面程式中mpi_type_hvector改為mpi_type_vector 就錯了,我以為是這樣的,因為這時是用的新型別stype構造ntype。stype為矩陣的一列資料的型別。ntype為整個轉置後的矩陣型別。
mpi_type_vector第三個引數stride代表的是number of elements between start of each block (integer) 。
而這時的資料型別是stype,不是mpi_int,兩者之間隔的元素個數自然不是1了。而mpi_type_hvector
stride 為number of bytes between start of each block (integer) ,自然沒問題了。//轉置
//預設執行程序數為2
#include "mpi.h"
#includeint main(int argc,char **argv){
int rows=6,cols=5;
int tag=0;
mpi_init(&argc,&argv);
int rank;
mpi_comm_rank(mpi_comm_world,&rank);
int a[rows][cols];
int b[cols][rows];
mpi_datatype stype,ntype;
mpi_type_vector(rows,1,cols,mpi_int,&stype);
//mpi_type_vector(cols,1,1,stype,&ntype);
mpi_type_hvector(cols,1,sizeof(int),stype,&ntype);
mpi_type_commit(&ntype);
mpi_status sta;
if(rank==0){
for(int i=0;i
稀疏矩陣的轉置(矩陣轉置和快速轉置)
實現矩陣的轉置 1.將矩陣的行列值相互轉換。2.將每個三元組中的i和j交換。3.重排三元組之間的次序便可實現矩陣的轉置。void transposesmatrix tsmatrix m,tsmatrix t return transposesmatrix快速轉置的原理是 如果能預先確定矩陣m中每一列...
稀疏矩陣轉置矩陣
num 矩陣a中某列的非零元素的個數 cpot 初值表示矩陣a中某列第乙個非零元素在b中的位置,並有如下遞推 cpot 1 0 cpot col cpot col 1 num col 1 2 col nu end right.const int maxterm 100 struct sparsema...
轉置矩陣,逆矩陣和倒轉置矩陣
單位矩陣 轉置矩陣 transpose matrix 性代數中,矩陣 a的轉置是另乙個矩陣a t 也寫做a tr,t a或a 由下列等價動作建立 形式上說,m n矩陣a的轉置是n m矩陣 對於矩陣a,b和標量c轉置有下列性質 轉置是從 m n矩陣的 向量空間到所有 n m矩陣的向量空間的 線性對映。...