Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
1

Расспаралеллеливание - найти минимальную сумму элементов по строкам

17.04.2013, 17:54. Показов 627. Ответов 8
Метки нет (Все метки)

Дан двумерный массив. Найти минимальную сумму элементов по строкам. Последовательно я решила ,а как решить решить параллелельно?
0
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2013, 17:54
Ответы с готовыми решениями:

Найти минимальную сумму по строкам матрицы
а) минимальную сумму по строкам; б) сумму минимальных элементов в каждой строке;

Найти сумму трех последовательно расположенных элементов, и найти из них минимальную сумму
Всем доброго времени суток!Как найти сумму трех последовательно расположенных элементов.И найти из...

Вычислить минимальную сумму по строкам матрицы
Написать программу, которая для произвольной матрицы вычисляет: Помогите пожалуйста решить!!! ...

Дан двумерный массив.посчитать сумму элементов в кажой строке. найти максимальную и минимальную сумму и помень эти строки местами.
Дан двумерный массив.посчитать сумму элементов в кажой строке. найти максимальную и минимальную...

8
3240 / 2043 / 350
Регистрация: 24.11.2012
Сообщений: 4,898
17.04.2013, 18:12 2
В условии оговорено какими средствами распараллеливать?
0
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
17.04.2013, 18:13  [ТС] 3
нет
0
3240 / 2043 / 350
Регистрация: 24.11.2012
Сообщений: 4,898
17.04.2013, 18:13 4
Общая идея: разбить данные на равные порции, для каждой выполнить вычисления в отдельном потоке/процессе (сумма, поиск минимума), затем собрать все минимумы в один поток и найти среди них минимальный элемент.
1
4198 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
17.04.2013, 18:20 5
Для полного распраллеливания нужно много ядер/процесоров, а лучше параллелный процессор. На первом шаге цикла параллельно считаешь попарные суммы чётных элементов с нечётными, на каждом следующем попарные суммы чётных и нечётных сумм предыдущего шага и за 40 шагов получаешь суммы в строках до 1 099 511 627 776 элементов штука. Потом второй цикл, на первом его шаге выбираешь минимумы в каждой паре строк, а на каждом следующем в каждой паре минимумов предыдущего шага. За те же 40 шагов получишь минимум по 1 099 511 627 776 строкам и того за 80 шагов обработаешь матрицу 1 099 511 627 776x1 099 511 627 776 элементов. Всё, что можно сделать на обычном 12-ти ядернике - это только простой параллелизм с делением матрицы на фрагменты, обрабатываемые последовательно, а в начале поста описан массированный.
1
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
17.04.2013, 18:21  [ТС] 6
ды мне самое простое надо. чтоб просто сравнить время выполнения параллельной программы и последовательной.
0
4198 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
17.04.2013, 18:26 7
Так время и различается. Простой параллелизм раз 12 и ускорит даже на маке, а то и в 11, а массиврованный на 80 шагов примерно в 15 111 572 745 182 900 000 000 раз. И при простом параллелизме коэффициент определяется количеством ядер, а при массированном - обрабатываемых данных. И с размерностью задачи растёт очень быстро.
0
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
17.04.2013, 18:33  [ТС] 8
C++
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
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "stdafx.h"
#include "iostream"
#include <conio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
using namespace std;
int **mas,a,b,i,j,sum,min,num1;
 
int main()
    {srand(time(NULL));
     double start_time,end_time,time;
        setlocale(LC_ALL,"");
    int k,l,min;
    k=0;l=0;
    cout<<"Введите размер маcссива a x b:"<<endl<<"a = ";
    cin>>a;
    cout<<endl<<"b = ";
    cin>>b;
    cout<<endl;
    
    mas=new int *[a];
    
    start_time = omp_get_wtime();
    #pragma omp parallel private(i)
    for (int i=0;i<a;i++)
        *(mas+i)= new int [b];
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<b;j++)
        {
        mas[i][j]=rand()%10;
            cout<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    for(int i=0;i<a;i++)
    {
        int sum=0;
        for(int j=0;j<b;j++)
        {
            sum=sum+mas[i][j];
        }
               
        if(i==0){ min=sum; num1=i;}
 
        else if(min>sum) {min=sum; num1=i;}
    }
    cout<<"Номер строки с минимальной суммой "<<num1<<endl;
    cout<<endl;
    cout<<"Минимальная сумма "<<min<<endl;
    cout<<endl;
 
    end_time = omp_get_wtime();
 
cout<<endl<<endl;
time=end_time-start_time;
 
cout <<"Time= "<<time;
    return 0; 
 
}

вот это не правильно?
0
4198 / 1790 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
17.04.2013, 18:52 9
Это последовательно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2013, 18:52

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Найти минимальную сумму элементов строк матрицы
Здравствуйте! Помогите написать программу Найти минимальную сумму элементов строк матрицы целых...

Найти минимальную сумму элементов строки матрицы
Как найти максимальный элемент в двумерном массиве на языке си в каждом из столбцов? Добавлено...

Найти минимальную сумму элементов двумерного массива
Вводим сначала кол-во строк и столбцов, потом сами элементы. Нужно с левого верхнего элемента...

Найти минимальную сумму элементов в диагоналях, параллельных главной
Есть двумерный массив порядка N, нужно найти минимальную сумму элементов диагоналей, параллельных...

Найти минимальную сумму элементов в строках двумерного массива
найти минимальную сумму элементов в строках двумерного массива

Найти минимальную сумму элементов на диагоналях, параллельных побочной
var a: array of integer; i,j,min,s:integer; begin for i:=1 to 6 do ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.