Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите осуществить параллельный подсчет, параллельный подсчет вычисления квадрата 
:(
    Опции темы
LesnajaNimfa
Дата 10.12.2013, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.12.2013

Репутация: нет
Всего: нет



Постановка задачи : написать приложение, реализующее параллельный подсчет вычисления квадрата евклидовой нормы матрицы C=AxB, который определяется формулой user posted image

реализовала последовательный подсчет, не могу распараллелить, как поняла, можно разделить столбцы первой матрицы на два потока и осуществить параллельное перемножение со строками второй матрицы, покажите как это можно осуществить, читала про потоки, не знаю как здесь это сделать, с явой познакомилась неделю как.

Код

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
}

}

PM MAIL   Вверх
Pawl
Дата 11.12.2013, 01:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Код

package company;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.concurrent.*;

public class Main {
    private static Callable<Integer> sum(int n, int i, int j, int[][] mA, int[][] mB) {
        return new Callable<Integer>() {
            public Integer call() {
                int s = 0;
                for (int q = 0; q < n; q++) {
                    s += mA[i][q] * mB[q][j];
                }
                System.out.println(Thread.currentThread().getName());
                return s;
            }
        };
    }

    public static void main(String[] args) {
        int s = 0, m = 3, n = 2, l = 2, k = 3,
                matrixA[][] = new int[m][n], matrixB[][] = new int[l][k];
        Scanner reader = new Scanner(System.in);
        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();
            }
        }
        ExecutorService pool = Executors.newFixedThreadPool(m * k);
        Set<Future<Integer>> set = new HashSet<>();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < k; j++) {
                set.add(pool.submit(sum(n, i, j, matrixA, matrixB)));
            }
        }
        for (Future<Integer> f : set) {
            try {
                s += Math.pow(f.get(), 2);
            } catch (InterruptedException | ExecutionException e) {
            }
        }
        pool.shutdown();
        System.out.println("Квадрат Эвклидовой нормы равен: \n" + s);
    }
}


Это сообщение отредактировал(а) Pawl - 11.12.2013, 13:39


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.