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

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

Восстановить пароль Регистрация
 
razr_
Сообщений: n/a
31.05.2013, 14:08     Сортировка с использованием OpenMP #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" );
}
//------------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2013, 14:08     Сортировка с использованием OpenMP
Посмотрите здесь:

C++ Сортировка с использованием рекурсии
Умножение матриц с использованием OpenMP C++
Сортировка массива с использованием алгоритма стандартной библиотеки шаблонов Sort() C++
C++ сортировка по убыванию с использованием указателя
C++ Сортировка списка строк с использованием стандартных алгоритмов библиотеки STL
Сортировка списка с использованием std::sort C++
Вычисление функции с использованием OpenMP на нескольких ядрах C++
Простая сортировка выбором с использованием указателей C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dstat
36 / 38 / 1
Регистрация: 01.06.2011
Сообщений: 238
31.05.2013, 15:20     Сортировка с использованием OpenMP #2
1)разбить массив на N блоки (по числу параллельных нитей).
2)каждый блок отсортировать и сформировать N массивов счётчиков.
3) синхронизировать основной поток с дочерними по окончанию дочерних сортировок.
4) получить от каждой нити массив счётчиков, записывая его в результат с накоплением (прибавлением)
5) вывести результат =)
Yandex
Объявления
31.05.2013, 15:20     Сортировка с использованием OpenMP
Ответ Создать тему
Опции темы

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