实验报告:Project3: Matrix Multiplication

本文详述了一项在Ubuntu 10.04系统上使用Java和pthread实现多线程矩阵乘法的实验。通过新建线程计算矩阵C的每个元素,分别展示了Java和pthread的实现思路、运行测试结果以及实验中遇到的问题,如C语言的printf语句错误和pthread函数参数调整。实验加深了作者对线程的理解,并对比了Java和C语言的使用体验。
摘要由CSDN通过智能技术生成

Project3:

Matrix Multiplication

 

一、实验环境

Ubuntu  10.04系统

Eclipse开发平台

 

二、实验过程:

这个实验中,分别用java、pthread实现多线程矩阵运算。

1、java实现
程序大体思路:

1、新建类WorkThread,作为Runnable的一个接口。传递的参数有,当前计算的行、列,矩阵A、B、C,以及K值,通过for循环计算C矩阵当前行、列的值。

2、main函数中

2.1  首先初始化矩阵A、B、C,常数N、M、K等

3.2  建立N*M个线程,对应计算C的对应位置

3.3  通过for循环等待线程结束,输出此位置的结果

 

2、pthread实现
程序大体思路:

程序思路与java实现一样,在语言、函数上进行了改变:

编写thread_function函数进行计算,通过pthread_create函数建立线程,pthread_join等待线程结束。

3、运行并测试

java:

结果如下:

28  23  18 

41  34  27 

54  45  36

 

pthread:

编译命令: gcc -O2 -Wall -o project  project2.c -lpthread -std=c99

运行: ./project

结果如下:

 

 28 23 18

 41 34 27

 54 45 36

 

4、在实验中遇到的一些问题

在pthread编程中,由于对C语言不熟悉,程序中的printf(" %d/t", (int)thread_result[i][j])语句,之前用的是printf(" %s/t", (char *)thread_result[i][j]),编译后运行总是提示段错误。让我纠结了半天。在网上查找后改正错误解决。

在pthread_join、pthread_create函数的参数的形式上我也遇到了不少问题,后来经过多次调试后改正。

pthread程序的编译命令,一开始我使用gcc –o  project project2.c,遇到错误。根据提示,加上 -std=c99后,依旧没有解决。在网上各种查找后,得到编译命令:gcc -O2 -Wall -o project  project2.c -lpthread -std=c99,虽然很多参数不懂是什么意思,但是编译运行成功了,也就没有深究。

java程序编写上,遇到问题较少,主要是一些基本语言问题,查询后很快解决。

三、实验总结

在这个实验中,通过多线程解决矩阵乘法问题,虽然问题相对简单,但它加深了我对线程的理解:新建、启动、结束以及在什么时候用线程等等。通过这次实验,我也对java、C语言有了一定了了解。通过java、C和C++语言的比较,我觉得java语言的类、对象操作十分简单实用,十分完美。

最后感谢助教、老师的帮助。

 

 

附:原代码如下:

pthread

 

#include "pthread.h"

#include "stdio.h"

#include <stdlib.h>

#define M 3

#define K 2

#define N 3

int A[M][K]={ {1,4},{2,5},{3,6}};

int B[K][N]={ {8,7,6},{5,4,3}};

int C[M

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值