要求很簡單,計算兩個矩陣的乘法。為了加速,這裡面使用了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...