40.多线程实现矩阵相乘
Posted 喵小喵~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了40.多线程实现矩阵相乘相关的知识,希望对你有一定的参考价值。
单线程运行时间:
多线程运行时间;
代码:
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <process.h> 4 #include <Windows.h> 5 #include <time.h> 6 7 #define N 1000 8 9 double M1[N][N] = { 0 }; 10 double M2[N][N] = { 0 }; 11 double res[N][N] = { 0 }; 12 13 //多线程函数,p表示行 14 void process(void *p) 15 { 16 int *row = (int *)p; 17 18 //M2每一列 19 for (int j = 0; j < N; j++) 20 { 21 int tmp = 0; 22 //遍历M2某列的元素 23 for (int k = 0; k < N; k++) 24 { 25 tmp += M1[*row][k] * M2[k][j]; 26 } 27 res[*row][j] = tmp; 28 } 29 } 30 31 //初始化矩阵 32 void init(double num[N][N]) 33 { 34 for (int i = 0; i < N; i++) 35 { 36 for (int j = 0; j < N; j++) 37 { 38 num[i][j] = rand() % 5 ; 39 } 40 } 41 } 42 43 //显示矩阵 44 void show(double num[N][N]) 45 { 46 for (int i = 0; i < N; i++) 47 { 48 for (int j = 0; j < N; j++) 49 { 50 printf("%.2f ", num[i][j]); 51 } 52 printf("\\n"); 53 } 54 } 55 56 void main() 57 { 58 //统计时间 59 clock_t start, finish; 60 double duration = 0; 61 62 start = clock(); 63 init(M1); 64 init(M2); 65 //show(M1); 66 //show(M2); 67 int num1 = 0; 68 69 ////多线程 70 for (int i = 0; i < N; i++) 71 { 72 HANDLE hd = (HANDLE)_beginthread(process, 0, &i); 73 //WaitForSingleObject(hd, INFINITE); 74 } 75 76 //单线程 77 /*for (int i = 0; i < N; i++) 78 { 79 process(&i); 80 }*/ 81 82 finish = clock(); 83 duration = (double)(finish - start) / CLOCKS_PER_SEC; 84 printf("%f seconds\\n", duration); 85 86 system("pause"); 87 }
以上是关于40.多线程实现矩阵相乘的主要内容,如果未能解决你的问题,请参考以下文章