MPI隨機生成矩陣 矩陣乘法 並計時

2021-10-05 08:00:43 字數 1985 閱讀 7255

#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的隨機...