用多執行緒併發的方式來計算兩個矩陣的乘法

2021-07-08 14:36:44 字數 1902 閱讀 7825

要求很簡單,計算兩個矩陣的乘法。為了加速,這裡面使用了pthread庫,來併發計算。

基本思路如下圖。

比如用兩個執行緒來計算。矩陣a * b。那麼就把a分成兩份。比如下圖,就是0,2,4和1,3,5這兩份。

思路很簡單。最後**如下:

//#include #include "pthread.h"

#include #include int threads_count = 4;

pthread_t threads[16];

int print = 0;

void test(int dim);

int * multiplypthread(int * a, int* b, int dim);

int * multiply******(int * a, int* b, int dim);

int mul(int* a, int* b, int row, int col, int dim);

struct thread_param ;

struct thread_param params[16];

void output(int * buf, int dim) {

for (int i=0; idim;

int index = p->index;

int *a = p->a;

int *b = p->b;

int *result = p->buffer;

int step = p->step;

int sum = 0;

for (int i=index; i編譯引數:

# clang -o1 -lpthread -wall mul.c

執行環境:

centos7, 4核的cpu,所以這裡開了4個執行緒。

執行結果分析。

當矩陣的大小比較小的時候,普通的矩陣乘法比多執行緒的演算法快得多。這也是可以理解的,因為建立執行緒需要一定的時間。

當矩陣的大小為64時,多執行緒的時間和普通單執行緒的時間基本上相同。

當矩陣的大小大於64時,多執行緒的時間明顯好於單執行緒。

當矩陣的大小大於256時,多執行緒的效能達到單執行緒的4倍左右,很理想:

(4) the difference for ****** is 1

(4) the difference for threaded is 420

(16) the difference for ****** is 10

(16) the difference for threaded is 117

(32) the difference for ****** is 63

(32) the difference for threaded is 151

(48) the difference for ****** is 177

(48) the difference for threaded is 196

(64) the difference for ****** is 379

(64) the difference for threaded is 329

(128) the difference for ****** is 4456

(128) the difference for threaded is 2376

(256) the difference for ****** is 40366

(256) the difference for threaded is 10581

(512) the difference for ****** is 387046

(512) the difference for threaded is 97153

python多執行緒併發讓兩個LED同時亮

在做畢業設計的過程中,想對多個感測器讓他們同時併發執行。之前想到 light red light blue 分別在兩個shell指令碼中同時執行,但是這樣太麻煩了。後來學到了python多執行緒,讓程式併發執行。下面具體介紹步驟 兩個led燈,乙個藍燈,乙個紅燈 藍燈正極接13,負極接14 紅燈正極...

python多執行緒併發讓兩個LED同時亮的方法

在做畢業設計的過程中,想對多個感測器讓他們同時併發執行。之前想到 light red light blue 分別在兩個shell指令碼中同時執行,但是這樣太麻煩了。後來學到了python多執行緒,讓程式併發執行。下面具體介紹步驟 兩個led燈,乙個藍燈,乙個紅燈 藍燈正極接13,負極接14 紅燈正極...

Java保證兩個方法互斥的方式,多執行緒同步

1 當需要保證多個方法的互斥,需要保證有乙個共同的標準作為基準,這個基準就是乙個鎖。當2個以上的方法需要保證互斥,需要他們獲取相同的鎖,當乙個方法擁有鎖之後,其他的方法不能夠獲得鎖,達到互斥的作用。2 static class bussiness public synchronized void m...