Linux下利用多執行緒實現矩陣相乘的平行計算

2021-09-06 01:34:22 字數 2527 閱讀 5257

現代的執行緒庫允許不同的執行緒執行在不同的處理器晶元上,從而實現真正意義上的並行。換句話說,如果你的機子是單核的,用多執行緒也沒不會提高執行效率。

我的電腦是多核的,平行計算耗時0.56秒,但按照常規的序列計算方法只需要0.07秒。

並行程式**:

#include

#include

#include

#include

#include

#include

/*定義矩陣中元素的上限,避免相乘後溢位

*/#define range 100

/*矩陣a有m行n列,矩陣b有n行m列

*/#define m 200

#define n 300

void gene_matrix();

void read_matrix();

int matrixa[m][n];

int matrixb[n][m];

int arr[m][m][n];

void *func(void *arg);

main()

; //

儲存矩陣相乘的結果。非全域性變數一定要顯示初始化為0,否則為隨機的乙個數

int i,j,k;

pthread_t tids[n];

for(i=0;iif(pthread_create(&tids[i],null,func,(void *)&i)) //

分。產生執行緒,去完成矩陣相乘的部分工作量

}for(i=0;i//

合之前一定要等所有的子執行緒計算結束

for(i=0;i//

合。for(j=0;jfor(k=0;k//

結束計算

printf("

平行計算用時%.2f秒\n

",(long)(finish-start)/1e6);

exit(0);

}void *func(void *arg) //

每個子執行緒要完成的任務

if((file2=fopen("

/home/orisun/develop/matrixb

","wt

"))==null)

int i,j;

srand((unsigned)time(null));

for(i=0;ifor(j=0;j"

%-8d

",rand()%range);

fprintf(file1,"

\n");

}fclose(file1);

for(i=0;ifor(j=0;j"

%-8d

",rand()%range);

fprintf(file2,"

\n");

}fclose(file2);

}void read_matrix()

if((file2=fopen("

/home/orisun/develop/matrixb

","rt

"))==null)

int i,j;

for(i=0;ifor(j=0;j"

%d",&matrixa[i][j]);

fclose(file1);

for(i=0;ifor(j=0;j"

%d",&matrixb[i][j]);

fclose(file2);

}

序列**更改為下:

main()

; //

儲存矩陣相乘的結果。非全域性變數一定要顯示初始化為0,否則為隨機的乙個數

int i,j,k;

for(i=0;ifor(j=0;jfor(k=0;k//

結束計算

printf("

序列計算用時%.2f秒\n

",(long)(finish-start)/1e6);

exit(0);

}

想更多了解平行計算的朋友可以看一下這位老兄的部落格程式設計指南》

#include

#include

#include

void main()

t2=clock();

printf("

one task,criticalsection 1,000,000 times,time=%ldms\n

",t2-t1);

t1=clock();

#pragma omp parallel for num_threads(2)

for(i=0;i<10000000;i++)

t2=clock();

printf("

two task,criticalsection 1,000,000 times,time=%ldms\n

",t2-t1);

deletecriticalsection(&cs);

}

PHP利用CURL MULTI實現多執行緒

php中的curl multi一類函式可以實現同時請求多個url,而不是乙個乙個依次請求,這就類似乙個程序實現了多個執行緒的功能,因此可以使用php利用curl multi實現完成多執行緒類的任務,下面就乙個利用php curl multi多執行緒採集網頁為例來說明一下。檢視 列印01 02 功能 ...

VC下利用多執行緒實現檔案的快速檢索

文章資訊 馮傑2004 07 30 出處 天極網方舟 本文採用多執行緒技術實現檔案的快速搜尋,量很少,執行效率極高 正文 1 2以下介紹其在vc平台下的具體實現 1.搜尋用到兩個win32的兩個函式 handle findfirstfile lpctstr lpfilename,lpwin32 fi...

linux下多執行緒實現服務端

併發服務端有多執行緒的和多程序的,今天來看一下多執行緒的。執行緒程式設計可能會麻煩一點,其中涉及到一些同步,死鎖問題,但是也有其優點。併發服務端用的多的還是多程序。服務端 include include include include include include include include ...