BoyWithCode

Just a boy writes a code.

 

OpenMP:实现矩阵向量乘法

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.运行结果与计算器运算结果一致:

posted on   chaodahao  阅读(315)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧

导航

统计

点击右上角即可分享
微信分享提示