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