#include
#include
"mpi.h"
#include
#include
#include
#include
//生成隨機矩陣
int*
*generate_matrix
(int guimo)
}return matrix;
}// multiplication((int **)matrix2,rbuf,guimo,size,local_n); guimo*local_n
//矩陣相乘
int*
multiplication
(int
**a,
int b,
int guimo,
int size,
int local_n)
//b為整個a矩陣
result[m]
= sum;
sum =0;
} i+=1
;}return result;
}void
get_input
(int my_rank ,
int comm_sz,
int* guimo)
}else
}void
print_matrx
(int
**a,
int size)
printf
("\n");
}printf
("\n");
}int
main
(int argc,
char
**ar**)
}int rbuf[guimo*local_n]
;//multiplication((int**)matrix,)
//分發列
mpi_scatter
(send_buff,guimo*local_n,mpi_int,rbuf,guimo*local_n,mpi_int,
0,comm)
;//傳送1的每一列
int*result;
//resultbuffer
result =
(int*)
malloc
(sizeof
(int
)* guimo*local_n)
; result =
multiplication((
int*
*)matrix2,rbuf,guimo,size,local_n)
;mpi_barrier
(comm)
;//等待所有程序計算結束
int*recv_buff;
//最終的 c 矩陣
recv_buff=
(int*)
malloc
(sizeof
(int
)*guimo*guimo)
;mpi_barrier
(comm)
;mpi_gather
(result,guimo*local_n,mpi_int,recv_buff,guimo*local_n,mpi_int,
0,comm)
;//收集各列資料
//根程序進行輸出
endtime =
mpi_wtime()
;if(rank ==0)
printf
("\n");
}printf
("\n");
printf
("spent time = %lf second\n"
, endtime - begintime);}
mpi_finalize()
;return0;
}
結果如下圖: 隨機數矩陣乘法
最近有同事在討論矩陣儲存和乘法問題,一時興起就寫了演算法.要求 矩陣a 矩陣b 要求a 和 b是由隨機數組成,並且a是按行優先儲存的,而b是按列優先儲存的,並輸出a b的結果,可重複計算.考慮了一下,矩陣儲存可以用二維陣列來儲存,但是根據要求矩陣需動態儲存,所以採用指標的指標來儲存和操作矩陣.以下為...
矩陣乘法優化 poj3318 隨機矩陣
給定矩陣a,b,c,求檢驗a b 是否等於c。n 500 普通矩陣乘法是o n 3 但是如果用乙個1 n的矩陣和n n矩陣相乘只需要o n 2 所以可以用乙個隨機矩陣r a b r c rand 隨機生成 0,rand max 的數 如果想要 0,n 內的隨機數 n比rand max 小,取餘 n比...
matlab生成隨機矩陣
一 matlab 裡和隨機數有關的函式 1 rand 產生均值為 0.5 幅度在 0 1之間的偽隨機數 2 randn 產生均值為 0 方差為 1的高斯白雜訊 3 randperm n 產生1 到n的均勻分布隨機序列 4 normrnd a,b,c,d 產生均值為 a 方差為 b大小為 cxd的隨機...