Linux多线程矩阵,操作系统实验——多线程计算矩阵相乘
没考虑过各种优化的第一个版本,仅保证计算正确.....
/**
* @file main.cpp
* @version 1.0.0
* @author Victor Zhang
* @date 2011-04-04
*/
#include
#include
#include
using std::cin;
using std::cout;
using std::endl;
struct matrixArgs
{
int *pMatrixLineA;
int *pMatrixLineB;
int *pResult;
int matrixLineCount;
};
void *calculate(void *arg)
{
matrixArgs *args = (matrixArgs*) arg;
*(args->pResult) = 0;
for (int i = 0; i < args->matrixLineCount; i++)
{
*(args->pResult) += (*(args->pMatrixLineA + i))
* (*(args->pMatrixLineB + i));
}
pthread_exit(NULL);
}
int main()
{
cout<
<
int i[3];
for (int j = 0; j < 3; j++)
{
while (!(cin>>i[j]))
{
cin.clear();
while (cin.get() != '\n') continue;
cout<
}
}
int matrixACount = i[1] * i[0];
int matrixBCount = i[2] * i[0];
int matrixResultCount = i[1] * i[2];
int *pMatrixA, *pMatrixB, *pMatrixResult;
matrixArgs *pMatrixArgs;
pMatrixA = (int*) malloc(matrixACount * sizeof(int));
pMatrixB = (int*) malloc(matrixBCount * sizeof(int));
pMatrixResult = (int*) malloc(matrixResultCount * sizeof(int));
pMatrixArgs =
(matrixArgs*) malloc(matrixResultCount * sizeof(matrixArgs));
cout<
for (int j = 0; j < matrixACount; j++)
{
while (!(cin>>(*(pMatrixA + j))))
{
cin.clear();
while (cin.get() != '\n') continue;
cout<
}
}
cout<
for (int j = 0; j < matrixBCount; j++)
{
while (!(cin>>(*(pMatrixB + (j / i[2] + (j % i[2]) * i[0])))))
{
cin.clear();
while (cin.get() != '\n') continue;
cout<
}
}
pthread_t *pPthread;
pPthread = (pthread_t*) malloc(matrixResultCount * sizeof(pthread_t));
void *status;
pthread_attr_t attr;
int rc;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
matrixArgs *pMatrixArgsCurrent = pMatrixArgs;
for (int j = 0; j < i[1]; j++)
{
for (int k = 0; k < i[2]; k++, pMatrixArgsCurrent++)
{
pMatrixArgsCurrent->matrixLineCount = i[0];
pMatrixArgsCurrent->pMatrixLineA = pMatrixA + (j * i[0]);
pMatrixArgsCurrent->pMatrixLineB = pMatrixB + (k * i[0]);
pMatrixArgsCurrent->pResult = pMatrixResult + (j * i[2] + k);
rc = pthread_create(pPthread + (j * i[2] + k),
&attr,
calculate,
(void*) pMatrixArgsCurrent);
if (rc)
{
cout<
<
exit(-1);
}
}
}
pthread_attr_destroy(&attr);
for (int j = 0; j < i[1]; j++)
{
for (int k = 0; k < i[2]; k++, pMatrixArgsCurrent++)
{
rc = pthread_join(*(pPthread + (j * i[2] + k)), &status);
if (rc)
{
cout<
exit(-1);
}
}
}
cout<
for (int j = 0; j < i[1]; j++)
{
for (int k = 0; k < i[2]; k++, pMatrixArgsCurrent++)
{
cout<
}
cout<
}
free(pMatrixA);
free(pMatrixB);
free(pMatrixResult);
free(pMatrixArgs);
free(pPthread);
pthread_exit(NULL);
return 0;
}
Linux多线程矩阵,操作系统实验——多线程计算矩阵相乘相关推荐
- Linux多线程矩阵,操作系统实验(进程)多线程实现矩阵乘法
<操作系统实验(进程)多线程实现矩阵乘法>由会员分享,可在线阅读,更多相关<操作系统实验(进程)多线程实现矩阵乘法(6页珍藏版)>请在人人文库网上搜索. 1.多线程编程实现矩阵 ...
- 异构计算实验——CUDA计算矩阵幂
CUDA计算矩阵幂 ** 一.实验内容 本次实验内容为基于CUDA的GPU实现矩阵的幂.要求分别用暴力算法和高效算法实现矩阵的幂. 对于一个 的方阵 ,计算的次幂.首先,生成一个的方阵,保证每行每列元 ...
- 实验四 linux进程控制实验报告,Linux系统进程控制操作系统实验报告4
实验课程名称:操作系统 实验项目名称Linux系统进程控制实验成绩 实验者专业班级组别 同组者实验日期年月日第一部分:实验分析与设计(可加页) 实验内容描述(问题域描述) 要求:掌握Linux系统中进 ...
- VirtualBox安装及Linux基本操作(操作系统实验一)
VirtualBox安装教程博客链接(转载)https://blog.csdn.net/u012732259/article/details/70172704 实验名称:Linux的基本操作 实验目的 ...
- python输入n×n的矩阵_Python使用shape计算矩阵的行和列
POJ3255Roadblocks[次短路] Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12697 ...
- linux多线程编程实现圆周率,linux环境下使用Monte Carlo计算π
1 实验题目 计算π的一个有趣方法是使用一个称为Monte Carlo的技术,这种技术涉及随机.该技术工作如下:假设有一个圆,它内嵌一个正方形,如下图所示. 首先,通过(x,y)坐标生成一系列的随机点 ...
- python numpy逆_Python使用numpy计算矩阵特征值、特征向量与逆矩阵
原标题:Python使用numpy计算矩阵特征值.特征向量与逆矩阵 Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv() ...
- Python使用numpy计算矩阵特征值、特征向量与逆矩阵
Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv()函数用来计算可逆矩阵的逆矩阵. >>> impor ...
- 计算机操作系统实验指导linux版,操作系统实验指导书(linux版).doc
操作系统实验指导书(linux版) <操作系统>实验指导书 实验学时:16 适用专业:计算机科学与技术 实验一:进程和线程的创建 1. 在linux下编写一个应用程序,命名为an_ch2_ ...
最新文章
- 微软研究员:fork() 已落后,需要淘汰
- AI公开课:19.04.10颜水成—360副总裁《人工智能:观察与实践》课堂笔记以及个人感悟—191017再次更新
- elasticsearch virtual memory虚拟内存配置“max virtual memory areas vm.max_map_count [65530] is too low, inc
- Ubuntu16.04删除客人会话
- 计算机图形学与相关学科的关系,哈尔滨工业2015博士招生计算机图形学与人机交互设计大纲...
- mysql5.6 1g内存_1G内存用MySQL5.6还是用MySQL5.5比较好
- java cookie 取不到_java中Servlet Cookie取不到值原因解决办法
- 图像处理-二值形态学运算
- 人工智能:从单细胞生物的智能说起
- docker容器启动几分钟之后自动退出
- 又一程序员删库跑路,只不过他没跑掉,还被抓了~
- 【交易技术前沿】低时延基础设施杂谈
- 【PID优化】基于matlab天牛须算法PID控制器优化设计【含Matlab源码 1312期】
- 怎样写工科研究生论文
- 《Android第一行代码(第二版)》源码
- matlab图像频谱分析代码_信号频域分析方法的理解(频谱、能量谱、功率谱、倒频谱、小波分析)...
- windows调节屏幕文字清晰度、锐度,屏幕字体模糊怎么办,屏幕字体不清晰
- 上海淘融网络致广大客户的致歉信
- Unity3D ParticleSystem粒子系统
- elementui组件中,树形组件的使用
热门文章
- Castle IOC容器实践之EnterpriseLibrary Configuration Facility
- Android 异常: failed to connect to localhost/127.0.0.1
- 解决无法使用pip命令加载Python的扩展库问题
- 关于移动端上下滑动卡顿不流畅现象的解决方案
- 处理WCF异常的方式
- Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI
- 使用POI导出百万级数据到excel的解决方案
- 如何从Docker容器内部连接到计算机的本地主机?
- 什么是Android PendingIntent?
- Jmeter 压测 http(s)