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

Сортировка с использованием OpenMP

31.05.2013, 14:08. Просмотров 1743. Ответов 1
Метки нет (Все метки)

Ребят, помогите пожалуйста распараллелить с помощью OpenMP сортировку подсчетом (Counting Sort).

Код последовательной версии:
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
#include <iostream>
#include <time.h>
 
//------------------------------------------------------------------------------
using namespace std;
 
//------------------------------------------------------------------------------
const int MAX = 30;
 
//------------------------------------------------------------------------------
class cSort
{
public:
    void sort( int* arr, int len )
    {
    int mi, mx, z = 0; findMinMax( arr, len, mi, mx );
    int nlen = ( mx - mi ) + 1; int* temp = new int[nlen];
    memset( temp, 0, nlen * sizeof( int ) );
 
    for( int i = 0; i < len; i++ ) temp[arr[i] - mi]++;
 
    for( int i = mi; i <= mx; i++ )
    {
        while( temp[i - mi] )
        {
        arr[z++] = i;
        temp[i - mi]--;
        }
    }
 
    delete [] temp;
    }
 
private:
    void findMinMax( int* arr, int len, int& mi, int& mx )
    {
    mi = INT_MAX; mx = 0;
    for( int i = 0; i < len; i++ )
    {
        if( arr[i] > mx ) mx = arr[i];
        if( arr[i] < mi ) mi = arr[i];
    }
    }
};
//------------------------------------------------------------------------------
int main( int argc, char* argv[] )
{
    srand( time( NULL ) ); int arr[MAX];
    for( int i = 0; i < MAX; i++ )
    arr[i] = rand() % 140 - rand() % 40 + 1;
 
    for( int i = 0; i < MAX; i++ )
    cout << arr[i] << ", ";
    cout << endl << endl;
 
    cSort s; s.sort( arr, MAX );
 
    for( int i = 0; i < MAX; i++ )
    cout << arr[i] << ", ";
    cout << endl << endl;
 
    return system( "pause" );
}
//------------------------------------------------------------------------------
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2013, 14:08
Ответы с готовыми решениями:

Распараллеливание цикла For с использованием OpenMP
Всем привет. Задался целью изучить OpenMP, что бы в дальнейшем уметь распараллеливать программы....

Распараллеливание циклов с использованием OpenMP C++
Доброго времени суток. (Нужен совет, так как разбираюсь с omp почти 3 дня и не хватает знанний) ...

Умножение матриц с использованием OpenMP
Здрасте. Есть следующая задача. Нужно реализировать умножение двух квадратных матриц с...

Вычисление функции с использованием OpenMP на нескольких ядрах
Дана функция y=\frac{{x}^{2}-7x+10}{{x}^{2}-8x+12} на промежутке . Нужно вычислить её значения и...

1
36 / 38 / 7
Регистрация: 01.06.2011
Сообщений: 238
31.05.2013, 15:20 2
1)разбить массив на N блоки (по числу параллельных нитей).
2)каждый блок отсортировать и сформировать N массивов счётчиков.
3) синхронизировать основной поток с дочерними по окончанию дочерних сортировок.
4) получить от каждой нити массив счётчиков, записывая его в результат с накоплением (прибавлением)
5) вывести результат =)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2013, 15:20

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

Параллельные вычисления с использованием параллельных секций в OpenMP
Доброго времени суток, ребята! Ребят, нужно вычислить интеграл на отрезке для функции. Нужно...

Глупая сортировка OpenMP
Есть код &quot;Глупой&quot; сортировки массива. Необходимо распараллелить его и посчитать ускорение. Только...

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

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

Как ускорить эту часть кода с использованием OpenMp?
я пытаюсь ускорить, но разницы вообще никакой... for (int y = 0; y &lt; src-&gt;height -...

Сортировка с использованием comboBox
Доброго времени суток! Есть проект с привязанной к нему базой access, в одной из форм нужно...


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

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

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