Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 1
1

Многопоточное вычисление матриц

01.02.2016, 18:36. Показов 1746. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Стоит задача сложить, умножить матрицу , используя многопоточность.


Вот мое решение:
Разбиваю матрицу на n частей и складываю их параллельно в разных потоках.
Но время быстродействия с потоками получается меньше, чем в обычном режиме! Неправильно реализован алгоритм??
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    public Matrix addition(Matrix a,Matrix b) {
        Matrix c=new Matrix(a.getM(),a.getN());
        int count;
        if(a.getM()%n==0){
            count =n;
        }
        else count =n+1;
  
        ThreadMulti t[]= new ThreadMulti[n];
        int m=0;
        for(int i=0;i<a.getM();i=i+(a.getM()/n)){
            if(i+(a.getM()/n)<=a.getM()){
                t[m]=new ThreadMulti(c.getMatrix(),a,b,i,i+(a.getM()/n));
                
                m++;
            }
     }
       
       if(count>n){
           t[m]=new ThreadMulti(c.getMatrix(),a,b,(a.getM()/n)*m,a.getM());
       }
 
            
         for(int i=0;i<count;i++){
           try {
                t[i].t.join();
                
            } catch (InterruptedException ex) {
               System.out.println("Thread is interrupted");
            }
         }
        return c;
    }

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class ThreadMulti implements Runnable{
    
    Matrix a;
    Matrix b;
    Thread t;
    double[][] matrix;
    int end;
    int start;
 
    public ThreadMulti(double[][] mas,Matrix a, Matrix b,int start,int end){
        this.a=a;
        this.b=b;
        this.end=end;
        this.start=start;
        matrix=mas;
        t=new Thread(this);
        t.start();
    }
    public void run(){
     
 
        for(int i=start;i<end;i++){
                for(int j=0;j<a.getN();j++){
                    matrix[i][j]=a.getElement(i, j)+b.getElement(i, j);
                }
             //   System.out.println(t.getName()+" "+start+" "+ end);
            }
 
    }
}
В главном методе создаю две матрицы 100 на 100 и в результате их сложения с 4 потоками получается, что без многопоточности задача работает быстрее. Тож самое и с матрицами 1000 на 1000 и с большим и меньшим количеством потоков.
Вот конкретные цифры
D1 1616460
D2 1945279
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2016, 18:36
Ответы с готовыми решениями:

Определите класс матриц. Напишите перегруженные конструкторы для создания одномерной и двумерной матриц. В конструкторы передаются размерности матриц
Доброго времени суток всем) Извините если не в том разделе) Не могу понять как решить данную...

Многопоточное программирование
Приветствую! Написала программу умножения матриц, теперь нужно сделать его параллельным. Хочу...

Многопоточное копирование
public class CopyThread extends Thread { File source; File destination; long start;...

Многопоточное выполнение
Доброго времени суток, форумчани!:) Устроился на новую работу, сразу озвучили задачу. Описание...

0
01.02.2016, 18:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2016, 18:36
Помогаю со студенческими работами здесь

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

Спроектировать многопоточное приложение
Привет. Есть задача: дано довольно большое (порядко нескольких сотен тысяч или даже несколько...

Оператор new и многопоточное программирование
Доброго времени суток. Я недавно начал изучать Java(учу по Шилдту, 9-е издание),обычно автор...

Многопоточное перемножение матрицы
Написал класс ParallelMatrixProduct, встроенный в класс UsualMatrix для вычисления произведения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru