Форум программистов, компьютерный форум, киберфорум
OpenMP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 13.10.2014
Сообщений: 45
1

OpenMP Сортировка методом пузырька. Растет время выполнения

06.11.2019, 04:20. Показов 3030. Ответов 2

Author24 — интернет-сервис помощи студентам
Здравствуйте, написал прогу, сортирует двумерный массив методом пузырька в нескольких потоках и замеряет время, за которое выполнилась сортировка, но есть одно но, с ростом количества потоков, растет время на расчет. Пожалуйста подскажите что не так и исправьте.
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "pch.h"
#include <fstream>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <thread>
#include <omp.h>
using namespace std;
void ArrayShow(int **A, int N, int M);// Вывод массива на экран
void ArrayInit(int **A, int N, int M);// Заполнение массива случайными числами
void bubblesort(int **A, int N, int M); //сортировка методом пузырька
 
void main()
{
    setlocale(LC_ALL, "");
    int **A;
    int N, M,P;
    double timein, timeout,timein1,timeout2,dt,dt2;
    cout << "В какое количество потоков будем сортировать?\n";
    cin >> P;
    cout << "Задайте размерность матрицы A\n";
    cin >> N >> M;
    {
        A = new int*[N];
        for (int i = 0; i < N; i++) A[i] = new int[M];
        ArrayInit(A, N, M);
        ArrayShow(A, N, M);
        cout << "Сортировка методом пузырька A\n";
        timein = omp_get_wtime();
        #pragma omp parallel num_threads(P)
        {
            bubblesort(A, N, M);
            std::cout << "Процесс №" << omp_get_thread_num() << " Завершился\n";
        }
        timeout = omp_get_wtime();
        dt = timeout - timein;
        cout << "Сортировка завершена:\n";
        ArrayShow(A, N, M);
        cout << "Время вычислений: "<< dt << " секунд. " <<"Кол-во потоков: "<< P <<"\n"<< endl;
    }
}
 
//Заполнение массива
void ArrayInit(int **A, int N, int M)
{
    cout << "Заполняем массив случайными числами:\n";//Ввод чисел в двумерный массив А
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            A[i][j] = 0 + rand() % 100;
        }
    }
}
// Отображение массива
void ArrayShow(int **A, int N, int M)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
        {
            cout << " " << A[i][j];
        }
        cout << "\n";
    }
}
void bubblesort(int **A, int N, int M)
{
    int temp;
    for (int i = 0; i < M; ++i)
    {
        for (int j = 0; j < M - 1; ++j)
        {
            if (A[i][j] > A[i][j + 1])
            {
                temp = A[i][j];
                A[i][j] = A[i][j + 1];
                A[i][j + 1] = temp;
            }
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2019, 04:20
Ответы с готовыми решениями:

OpenMP. Время выполнения программы больше чем без OpenMP
Сегодня первый раз сел за OpenMP. Читаю на сайте майкрософта как работает этот API. Так вот там...

Сортировка методом пузырька, параллельное и последовательное время выполнения
Суть: вывести время (в миллисекундах) параллельного и последовательного выполнения алгоритма...

OpenMP. Время выполнения программы увеличивается с количеством потоков
Задача: найти сумму максимальных элементов строк матрицы. Я составил код программы и распараллелил...

Сортировка массива методом пузырька и методом выбора
Что значит: сортировка массива методом пузырька и методом выбора.

2
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
06.11.2019, 06:26 2
Цитата Сообщение от Levsha34 Посмотреть сообщение
Пожалуйста подскажите что не так
наверное раз с ростом потоков растет время, нужно этот рост как то ограничить, на создание потока ресурсов затрачивается же не мало, и нужно найти какую то золотую середину, что бы и сортировалось быстро и лишении потоки не создавались. Но это так мысли бомжа, не бери в голову.
0
1292 / 909 / 479
Регистрация: 05.12.2013
Сообщений: 3,074
06.11.2019, 07:23 3
Цитата Сообщение от Levsha34 Посмотреть сообщение
подскажите что не так
Да тут все не так, функция bubblesort сортирует только главную диагональ матрицы, а команда #pragma omp parallel num_threads(P) только задает количество потоков, которые можно использовать для распараллеливания
0
06.11.2019, 07:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2019, 07:23
Помогаю со студенческими работами здесь

Ускоренная сортировка методом пузырька и методом слияния
Друзья помогите. Условие задачи: Составить две программу, которые реализуют алгоритм ускоренной...

Сортировка методом пузырька
Задание: Дано: - Название начального пункта маршрута - Название начального пункта маршрута -...

Сортировка методом пузырька
Помогите пожалуйста исправить ошибки. Сортировка пузырьком многомерного массива. #include...

Сортировка методом пузырька
Помогите исправить ошибки. Program sortirovka; const m=2; n=3; var a:array of...


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

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