zoukankan      html  css  js  c++  java
  • 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("
    ");
    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
    ", duration);
    85 
    86     system("pause");
    87 }
  • 相关阅读:
    webpack(4) 配置
    query 与 params 使用
    git 操作
    一个vue练手的小项目
    9/10案例
    9/9python案例
    jmeter录制移动端脚本(二) --- badboy工具
    用jmeter连接数据库并进行操作
    jmeter录制脚本(一) --本身自带功能
    Jmeter组件使用
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8341028.html
Copyright © 2011-2022 走看看