Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 1
Регистрация: 06.10.2021
Сообщений: 105

Не удаётся выполнить распараллеливание алгоритма с помощью OMP

12.11.2023, 17:06. Показов 2998. Ответов 23

Студворк — интернет-сервис помощи студентам
Пишу программу для сравнения обычной быстрой сортировки и сортировки с применением распараллеливания, по большей части в интернете одни и те же программы, в которых люди разделяются на секции некоторые участки кода, чтоб те выполнялись параллельно, но проблема в том, что без распараллеливания алгоритм быстрой сортировки действует также быстро, а иногда и быстрее, поэтому я думаю, что проблема в том, как распараллелено. Пробовал через #pramga for делать, не вышло, тоже работает медленно, в свойствах проекта включил OMP, программно проверял(с помощью какой-то процедуры if из OMP), работает, но не ускоряет существенно. В чём ошибка? Код ниже
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <omp.h>
using namespace std;
#define count_of_count 20000000
// Function to swap two numbers a and b
void swap(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}
 
// Function to perform the partitioning
// of array arr[]
int partition(int *arr, int start, int end)
{
    // Declaration
    int pivot = arr[end];
    int i = (start - 1);
 
    // Rearranging the array
    for (int j = start; j <= end - 1; j++) {
        if (arr[j] < pivot) {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[end]);
 
    // Returning the respective index
    return (i + 1);
}
 
// Function to perform QuickSort Algorithm
// using openmp
void quicksort(int *arr, int start, int end)
{
    // Declaration
    int index;
 
    if (start < end) {
 
        // Getting the index of pivot
        // by partitioning
        index = partition(arr, start, end);
        
        // Parallel sections
#pragma omp parallel
        omp_set_num_threads(4);
        {
#pragma omp sections
            {
#pragma omp section
                {
                    // Evaluating the left half
                    quicksort(arr, start, index - 1);
                }
#pragma omp section
                {
                    // Evaluating the right half
                    quicksort(arr, index + 1, end);
                }
            }
        }
    }
}
 
// Driver Code
int main()
{
    // Declaration
    int *dan;
    dan = new int[count_of_count];
    double endTime = 0, startTime = 0, totalTime = 0;
 
 
    cout << "Enter the array: \n";
 
    // Taking input that array
    for (int i = 0; i < count_of_count; i++) {
        dan[i] = rand() % 100000;
    }
 
    // Calling quicksort having parallel
    // code implementation
    startTime = time(NULL);
    quicksort(dan, 0, count_of_count - 1);
    endTime = time(NULL);
    cout << endTime - startTime << "\n";
    // Printing the sorted array
    cout << "Array after Sorting is: \n";
    /*for (int i = 0; i < count_of_count; i++) {
        if (i % 1000 == 0)
        {
            cout << dan[i] << " ";
        }
    }*/
    
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2023, 17:06
Ответы с готовыми решениями:

Как выполнить распараллеливание с помощью OpenMP
Доброго дня. У меня есть две функции. void A(const vector &lt;double&gt; &amp;a){ //что-то считаем c ним } void B(const...

Распараллеливание через omp.h
// labaOMP.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Распараллеливание OMP для while
Здравствуйте! Ранее делал параллельную обработку для for. Подскажите, каким образом делается распараллеливание для сортировки...

23
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
12.11.2023, 20:53
Студворк — интернет-сервис помощи студентам
pashamem7894, omp_get_thread_num
0
 Аватар для Pphantom
2462 / 1606 / 741
Регистрация: 17.03.2022
Сообщений: 5,217
12.11.2023, 22:01
Цитата Сообщение от pashamem7894 Посмотреть сообщение
Не совсем понимаю, что является параметрами компиляции, гугл выдал то, что на втором скриншоте.


pashamem7894, вы вообще что-нибудь сами, без VS, компилировать умеете? Если нет - займитесь сначала этим, и только потом переходите к более содержательным вещам, таким как распараллеливание.
0
2 / 2 / 1
Регистрация: 06.10.2021
Сообщений: 105
12.11.2023, 22:28  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
pashamem7894, omp_get_thread_num
Не увидел. Вроде так и прописывал, почти.
Цитата Сообщение от Pphantom Посмотреть сообщение
pashamem7894, вы вообще что-нибудь сами, без VS, компилировать умеете? Если нет - займитесь сначала этим, и только потом переходите к более содержательным вещам, таким как распараллеливание.
Ну получается, что не умею, надобности не было, да и сейчас нет, а задача распараллеливания нужна просто для учёбы, вот и пытаюсь понять
0
2 / 2 / 1
Регистрация: 06.10.2021
Сообщений: 105
13.11.2023, 21:06  [ТС]
Прочитал, что для рекурсивных функций лучше подходит не #progma sections, а #progma tasks, но нужно настроить переменные как-то, чтоб они не конфликтовали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2023, 21:06

Распараллеливание потоков для нахождения суммы матрицы <omp.h>
Доброго дня. Сегодня слушал занимательную лекцию об распараллеливание потоков и получил задание: есть матрица 10,10 инициализированная...

C++ OMP Ошибка компилятора C3016 ругается на #pragma omp parallel for shared(A,B,C)
C++ OMP Ошибка компилятора C3016 ругается на #pragma omp parallel for shared(A,B,C) #include &lt;omp.h&gt; #include &lt;cstdio&gt; ...

распараллеливание алгоритма
Здравствуйте! Я написал последовательную программу скалярного умножение векторов. Мну нужно сделать еще и параллельную. Вот...

Распараллеливание алгоритма сортировки
Доброго времени суток. Есть программа, в которой реализуется распараллеливание алгоритма сортировки массива. Проблема заключается в...

Распараллеливание алгоритма Фокса
Помогите, пожалуйста, с реализацией алгоритма Фокса на openmp. Не очень понимаю, как параллелить. Есть вариант под MPI. #include...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru