java 多线程并行计算之矩阵乘法继承Thread类实现(星星笔记)
2014-09-19 18:49
716 查看
用java编写两个n阶的方阵A和B的相乘程序,结果存放在方阵C中,继承Thread类实现矩阵的乘法。
方阵A和B的初始值如下:(同时开两个线程)
输出:c中所有元素之和、程序的执行时间
具体的程序如下:
相对加速比为:58371/30401= 1.920035525147199
方阵A和B的初始值如下:(同时开两个线程)
输出:c中所有元素之和、程序的执行时间
具体的程序如下:
package com.xing.matrix; /** * * @author LiuYinxing * */ public class MatrixMultiplication extends Thread{ private long A[][]; private long B[][]; private long C[][]; private int start ; private int end ; private long sum = 0 ; public MatrixMultiplication(long a[][],long b[][],int st,int en){ this.A = a; this.B = b; this.start = st; this.end = en; this.C = new long[en][en]; } public void run(){ int i,j,k; for( i=start; i< end; i += 2) { for( j=0;j<end;j++) { C [i][j] = 0; for( k=0; k< end;k++) { C[i][j]+=A[i][k]*B[k][j]; } } } for( i=start; i<end; i+=2) for( j=0; j<end; j++) sum += C[i][j]; } public void serial() { //串行计算一个矩阵的乘法然后在求和 int i,j,k; for( i=0; i< end; i ++) { for( j=0;j<end;j++) { C[i][j]=0; for( k=0; k< end;k++) { C[i][j]+=A[i][k]*B[k][j]; } } } for( i=0; i<end; i++) for( j=0; j<end; j++) sum += C[i][j]; } public long getSum() { return this.sum; } public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub int i,j,t = 0; int leng = 1500; long startTime,endTime; long a[][] = new long[leng][leng]; long b[][] = new long[leng][leng]; //--------------对矩阵A和矩阵B进行初始化------------- for(i=0;i<leng;i++) { t=i+1; for(j=0;j<leng;j++) { a[i][j]=t++; b[i][j]=1; } } MatrixMultiplication thread1 = new MatrixMultiplication(a, b, 0, leng); MatrixMultiplication thread2 = new MatrixMultiplication(a, b, 1, leng); //-------------------并行计算-------------------- startTime = System.currentTimeMillis(); thread1.start(); thread2.start(); thread1.join(); thread2.join(); endTime = System.currentTimeMillis(); System.out.println("并行结果 = " + (thread1.getSum() + thread2.getSum())); System.out.println("并行时间 = " + (endTime - startTime)); //-------------------串行计算-------------------- startTime = System.currentTimeMillis(); MatrixMultiplication Serial = new MatrixMultiplication(a, b, 0, leng); Serial.serial(); endTime = System.currentTimeMillis(); System.out.println("串行结果 = " + Serial.getSum()); System.out.println("串行时间 = " + (endTime - startTime)); } }运行结果如下:(其中利用多核并行的部分为乘法和求和)
相对加速比为:58371/30401= 1.920035525147199
相关文章推荐
- java 多线程并行计算之矩阵乘法(星星笔记)
- java 多线程并行计算之求素数(星星笔记)
- Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- Java传统多线程的实现有两种方法,继承Thread类或者实现Runnable即可.线程启动时调用start()方法.
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- Java 继承Thread类实现多线程:
- JAVA笔记 Runnable 和 Thread 实现方式和继承方式的区别
- 黑马程序员--Java多线程的两种实现方式:继承Thread类 & 实现Runable接口
- java多线程(继承Thread以及实现Runnable接口)
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 分享矩阵乘法单线程与多线程的Java实现与效率对比,请教Strassen算法
- Win32API、MFC、.NET多线程并行求矩阵乘法(星星笔记)
- JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)
- java多线程学习1-继承Thread类和实现Runnable接口来创建线程
- 多线程——Java中继承Thread类与实现Runnable接口的区别
- MPI多进程并行计算矩阵乘法实现
- Java通过继承Thread类实现多线程
- 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口
- java实现多线程的两种方式继承Thread类和实现Runnable接口