1.设矩阵为m行n列的矩阵,以时间为种子生成1-10内的随机数作为矩阵的元素
| void Gen_Matrix(){ |
| srand(time(NULL)); |
| for (int i = 0; i < m; i++){ |
| for (int j = 0; j < n; j++){ |
| mat[i][j] = rand() % 10 + 1; |
| } |
| } |
| } |
2.生成一个长度为n的向量,以时间为种子生成1-10内的随机数作为向量的元素
| void Gen_Vector(){ |
| srand(time(NULL)); |
| for (int i = 0; i < n; i++){ |
| vec[i] = rand() % 10 + 1; |
| } |
| } |
3.矩阵向量乘法函数:
| void fun_mv(int a[], int cur){ |
| for (int i = 0; i < n; i++){ |
| ans[cur] += a[i] * vec[i]; |
| } |
| } |
4.使用OpenMP实现并行计算:
| void omp_mv(){ |
| int i; |
| #pragma omp parallel |
| { |
| int id = omp_get_thread_num(); |
| #pragma omp parallel for |
| for (i = id; i < m; i += NUM_THREADS){ |
| fun_mv(mat[i], i); |
| } |
| } |
| } |
5.完整程序:
| #include <stdio.h> |
| #include <omp.h> |
| #include <stdlib.h> |
| #include <time.h> |
| |
| const int NUM_THREADS = 2; |
| typedef long long ll; |
| const int m = 10, n = 10; |
| int mat[10][10]; |
| int vec[10], ans[10]; |
| |
| void Gen_Matrix(){ |
| srand(time(NULL)); |
| for (int i = 0; i < m; i++){ |
| for (int j = 0; j < n; j++){ |
| mat[i][j] = rand() % 10 + 1; |
| } |
| } |
| } |
| |
| void Gen_Vector(){ |
| srand(time(NULL)); |
| for (int i = 0; i < n; i++){ |
| vec[i] = rand() % 10 + 1; |
| } |
| } |
| |
| void fun_mv(int a[], int cur){ |
| for (int i = 0; i < n; i++){ |
| ans[cur] += a[i] * vec[i]; |
| } |
| } |
| |
| void omp_mv(){ |
| int i; |
| #pragma omp parallel |
| { |
| int id = omp_get_thread_num(); |
| #pragma omp parallel for |
| for (i = id; i < m; i += NUM_THREADS){ |
| fun_mv(mat[i], i); |
| } |
| } |
| } |
| |
| int main() |
| { |
| printf("Makeing matrix(%d*%d) & vector(%d*1)...\n", m,n,n); |
| Gen_Matrix(); |
| printf("matrix is: "); |
| for (int i = 0; i < m; i++){ |
| printf("\n"); |
| for (int j = 0; j < n; j++){ |
| printf("%d ", mat[i][j]); |
| } |
| } |
| Gen_Vector(); |
| printf("\nvector is: \n"); |
| for (int i = 0; i < m; i ++){ |
| printf("%d ", vec[i]); |
| } |
| omp_mv(); |
| printf("\nans is: \n"); |
| for (int i = 0; i < m; i ++){ |
| printf("%d ", ans[i]); |
| } |
| printf("\n"); |
| return 0; |
| } |
6.运行结果与计算器运算结果一致:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧