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

Сложение двух матриц в параллельном режиме

01.12.2015, 17:39. Показов 1557. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбираюсь с многопоточностью, пытаюсь решить такую задачу. "Создать класс, который складывает две матрицы в параллельном режиме, количество создаваемых потоков задается методом setNumThreads(int 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Matrix {
    private int threads;
    private int[][] array;
    private int lines;
    private int lineForEachThread;
    int counter;
    public void setNumThreads(int threads){
        this.threads = threads;
    }
    
    public int[][] add(int[][] a, int[][] b) throws InterruptedException{
        lines = a.length;
        array = new int[lines][a[0].length];
        lineForEachThread = lines / threads;
        for(counter = 0; counter < lines; ){
            Thread t = new Thread(){
                int current = counter;
                int max = counter + lineForEachThread;
                public void run(){
                    for(; current < max; current++){
                        for(int j = 0; j < a[current].length; j++){
                            array[current][j] = a[current][j] + b[current][j];
                        }
                    }
                }
            };
            t.start();
            counter += lineForEachThread;
        }
        return array;
    }
    public void print(int[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[0].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) throws InterruptedException {
        int[][] a = RandomMatrix.getMatrix(4000, 4000);
        int[][] b = RandomMatrix.getMatrix(4000, 4000); 
        Matrix m = new Matrix();
        m.setNumThreads(10);
        long before = System.currentTimeMillis();
        int[][] current = m.add(a, b);
        long after = System.currentTimeMillis();
        System.out.println("Потрачено: " + (after - before));
    }
}
Ошибка, как я понимаю, в том, что у меня потоки создаются последовательно, а не одновременно и поэтому всё работает медленно, но как переделать, идей ноль. Подскажите, пожалуйста, или намекните хотя бы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2015, 17:39
Ответы с готовыми решениями:

Сложение элементов двух матриц
Помогите пожалуйста, весь интернет перерыл, не могу никак написать программу, которая складывает элементы двух матриц.:(

Сложение и вычитание двух квадратных матриц
Искала по форуму, но не нашла. Как сложить и вычесть две квадратные матрицы(&quot;общий&quot; код (без определенных чисел))? Помогите,...

Сложение матриц, прочтенных из файла
стоит задача сложить матрицы размером 3х3, прочтенные из файла, куда вносятся значения вручную. задача связанна с текстовыми потоками,...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2015, 17:39
Помогаю со студенческими работами здесь

Сложение двух матриц
В общем скажу сразу: обращаюсь я к вам не из-за лени, а из-за недостатка идей и соответсвенно знаний (на данном этапе). Перебробовал...

Сложение двух матриц
сложить 2 матрицы A(6x6) и Б(6х6)? просто нигде не найти)) Найти след матрицы В(6х6)?

Сложение двух матриц
Даны две матрицы 2х2: а и е, которые нужно сложить. У меня при сложении в результате выводит только первый столбец, помогите найти ошибку)...

Сложение двух матриц
Здравствуйте, по лабе задали создать класс, который выполняет сложение двух матриц с заданным типо данных. Попробовал написать, эклипс...

Сложение двух матриц
помогите найти ошибку в матрице. не чо непонемаю, откуда ошибка??? ТОЛЬКО С КОДОМ С!!!!!!!!!!!!! Условие:Даны квадратные матрицы...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru