创建了 #并行计算# 任务:
任务一:计算矩阵课堂实验 。10*10矩阵,大家结组计算: 第一组,1个人算; 第二组,2个人算;A按列划分2部分,B划分2部分; 第三组,5个人算;A按行划分5部分,B不划分; 第四组,5个人算;A按列划分5部分,B...
创建了 #并行计算# 任务:
任务三:一个进程组,用非阻塞通信循环发送接收数据 。前提:包含三个进程的通信组, 用非阻塞通信循环发送接收count=60000个整型数据。 输出:要求打印每个进程接收缓冲里第50000个数据即recvbuf[50000],并检查收到的数据是否正确
创建了 #并行计算# 任务:
任务二:用C++多线程技术实现10个缓冲区的生产者消费者的问题 。现在有10个缓冲区,每个是一个整型空间。 用C++编写一个程序,生产者负责向缓冲区里放数据,消费者取缓冲区的数据,满则不能放,空则不能取,不能同时对一个区进行存取。 每次存取打印一句话即可。 提示,四个类:缓冲区、生产者、消费者、调度者main。 ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void product_matrix(int m, int n);
void dynamic_arr(int*** arr, int m, int n);
void input_arr(int*** arr, int m, int n);
void free_arr(int*** arr, int x);int main(){
int m, n;
printf("请输入m,n:\n");
scanf("%d,%d", &m, &n);
product_matrix(m, n);
return 0;
}
void product_matrix(int m, int n{
int i, x, y, sum;
int** arr_a; int** arr_b;
int** arr_res;
input_arr(&arr_a, m, n);
input_arr(&arr_b, n, m);
dynamic_arr(&arr_res, m, m);
printf("矩阵相乘的结果为:\n");
for(x = 0; x < m; x++)
{
for(y = 0; y < m; y++)
{
sum = 0;
for(i = 0; i < n; i++)
{
sum = sum + arr_a[x][i] * arr_b[i][y];
}
arr_res[x][y] = sum;
printf("%5d", arr_res[x][y]);
}
printf("\n");
}
free_arr(&arr_a, m);
free_arr(&arr_b, n);
free_arr(&arr_res, m);}void dynamic_arr(int*** arr, int m, int n)
//申请动态数组{
int i;
*arr = (int **)malloc(sizeof(int *) * m);
for(i = 0; i < m; i++){
(*arr)[i] = (int *)malloc(sizeof(int) * n);
memset((*arr)[i], 0, sizeof(int) * n);
}
}
void input_arr(int*** arr, int m, int n)
//输入数组{
int i, j; dynamic_arr(arr, m, n);
printf("请输入%d个整数:\n", m * n);
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++){
scanf("%d", &(*arr)[i][j]);
} printf("输出数组:\n");
for(i = 0; i < m; i++)
{
for(j = 0; j < n; j++)
printf("%5d", (*arr)[i][j]);
printf("\n");
}
printf("\n");
}
void free_arr(int*** arr, int x) //释放占用的内存{
int i; for(i = 0; i < x; i++)
{
free((*arr)[i]);
(*arr)[i] = 0;
}
free(*arr);
*arr = 0;
}
(1). 将A和C按行分为np块,将B按列分为np块(B可以按列存储);(2). 进程号为 id 的进程读取 A 和 B 的第id个分块;(3). 循环np次:<1>. 各个进程用各自的A、B分块求解C的分块;<2>. 轮换B的分块(例如:id 号进程发送自己当前的B的分块到 id+1号进程)