Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Лилиана1992
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
17.04.2013, 17:54     Расспаралеллеливание - найти минимальную сумму элементов по строкам #1
Дан двумерный массив. Найти минимальную сумму элементов по строкам. Последовательно я решила ,а как решить решить параллелельно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 17:54     Расспаралеллеливание - найти минимальную сумму элементов по строкам
Посмотрите здесь:

C++ Найти минимальную сумму положительных элементов диагоналей, параллельных побочной диагонали
Дан двумерный массив.посчитать сумму элементов в кажой строке. найти максимальную и минимальную сумму и помень эти строки местами. C++
найти сумму элементов квадратной матрицы по строкам и вывести на экран C++
C++ найти минимальную сумму
C++ Найти минимальную сумму у.е., заплатив которую игрок может попасть в правый нижний угол
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
17.04.2013, 18:12     Расспаралеллеливание - найти минимальную сумму элементов по строкам #2
В условии оговорено какими средствами распараллеливать?
Лилиана1992
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
17.04.2013, 18:13  [ТС]     Расспаралеллеливание - найти минимальную сумму элементов по строкам #3
нет
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
17.04.2013, 18:13     Расспаралеллеливание - найти минимальную сумму элементов по строкам #4
Общая идея: разбить данные на равные порции, для каждой выполнить вычисления в отдельном потоке/процессе (сумма, поиск минимума), затем собрать все минимумы в один поток и найти среди них минимальный элемент.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
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-ти ядернике - это только простой параллелизм с делением матрицы на фрагменты, обрабатываемые последовательно, а в начале поста описан массированный.
Лилиана1992
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 10
17.04.2013, 18:21  [ТС]     Расспаралеллеливание - найти минимальную сумму элементов по строкам #6
ды мне самое простое надо. чтоб просто сравнить время выполнения параллельной программы и последовательной.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.04.2013, 18:26     Расспаралеллеливание - найти минимальную сумму элементов по строкам #7
Так время и различается. Простой параллелизм раз 12 и ускорит даже на маке, а то и в 11, а массиврованный на 80 шагов примерно в 15 111 572 745 182 900 000 000 раз. И при простом параллелизме коэффициент определяется количеством ядер, а при массированном - обрабатываемых данных. И с размерностью задачи растёт очень быстро.
Лилиана1992
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; 
 
}

вот это не правильно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 18:52     Расспаралеллеливание - найти минимальную сумму элементов по строкам
Еще ссылки по теме:

C++ Найти сумму и количество цифр числа, а также максимальную и минимальную его цифры
C++ Найти минимальную сумму в матрице по условию. Написать комментарий
Упорядочить строки матрицы, найти минимальную сумму строк C++

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.04.2013, 18:52     Расспаралеллеливание - найти минимальную сумму элементов по строкам #9
Это последовательно.
Yandex
Объявления
17.04.2013, 18:52     Расспаралеллеливание - найти минимальную сумму элементов по строкам
Ответ Создать тему
Опции темы

Текущее время: 10:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru