Постановка задачи : написать приложение, реализующее параллельный подсчет вычисления квадрата евклидовой нормы матрицы C=AxB, который определяется формулой http://pixs.ru/showimage/FmaR4EN5no_4120055_10044518.jpg
реализовала последовательный подсчет, не могу распараллелить, как поняла, можно разделить столбцы первой матрицы на два потока и осуществить параллельное перемножение со строками второй матрицы, покажите как это можно осуществить, читала про потоки, не знаю как здесь это сделать, с явой познакомилась неделю как.
| Код | import java.util.*;
public class ProgamM {
static Scanner reader=new Scanner(System.in); static long s;
public static void main(String[] args) { int m,n,k,l,z; System.out.println("Введите размеры первой матрицы(Сначала количество строк, затем - столбцов)"); m=reader.nextInt(); n=reader.nextInt(); System.out.println("Введите размеры второй матрицы"); l=reader.nextInt(); k=reader.nextInt(); int [][] matrixA= new int[m][n]; int [][] matrixB= new int[l][k]; if(n!=l) { System.out.println("Ошибка! Перемножение матриц невозможно"); return; } System.out.println("Введите элементы первой матрицы"); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { matrixA[i][j]=reader.nextInt(); } } System.out.println("Введите элементы второй матрицы"); for(int i=0;i<l;i++) { for(int j=0;j<k;j++) { matrixB[i][j]=reader.nextInt(); } }
s=0; for(int i=0;i<m;i++) { for(int j=0;j<k;j++) { z=0; for(int q=0;q<n;q++) { z+=matrixA[i][q]*matrixB[q][j]; } s+=Math.pow(z, 2); } } System.out.println("Квадрат Эвклидовой нормы равен: \n" + s); // TODO Auto-generated method stub }
}
|
|