Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
KatyKova
1 / 1 / 0
Регистрация: 09.11.2013
Сообщений: 109
1

Реализовать параллельную сортировку слиянием

04.04.2016, 21:05. Просмотров 689. Ответов 0
Метки нет (Все метки)

Нужно реализовать параллельную версию сортировки слиянием.
Есть код распределения массива по процессам, сортировки блока на каждом процессоре и слияние блоков.
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
#include "stdio.h"
#include "mpi.h"
#include "fstream"
 
if(processorId == 0)
{
data = new int[sizeOfData];
 
for(int i=0; i data[i] = rand();
 
localData = new int[sizeOfLocalData];
 
for(int i=0; i localData[i] = data[i];
 
for(int i=1; i MPI_Send(&data[i*sizeOfLocalData], sizeOfLocalData, MPI_INT, i, 0, MPI_COMM_WORLD);
 
StartCounter();
}
else
{
localData = new int[sizeOfLocalData];
 
MPI_Recv(localData, sizeOfLocalData, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
}
 
MPI_Barrier(MPI_COMM_WORLD);
 
n = log2(numOfProcessors) + 1;
int step = 1;
 
for(int i=0; i {
if((processorId % step) == 0)
{
if(and(processorId, simpleMask(i)) == 0)
{
int *tempData = new int[sizeOfLocalData];
int *commonTempData = new int[2*sizeOfLocalData];
 
MPI_Recv(tempData, sizeOfLocalData, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status);
 
int l=0;
int r=0;
 
while((l {
if(localData[l] < tempData[r])
{
commonTempData[l+r] = localData[l];
l++;
}
else
{
commonTempData[l+r] = tempData[r];
r++;
}
}
 
while(l {
commonTempData[l+r] = localData[l];
l++;
}
 
while(r {
commonTempData[l+r] = tempData[r];
r++;
}
 
delete[] localData;
delete[] tempData;
 
sizeOfLocalData = sizeOfLocalData * 2;
 
localData = new int[sizeOfLocalData];
 
for(int j=0; j localData[j] = commonTempData[j]
; 
delete[] commonTempData;
}
else
{
int dist = processorId - simpleMask(i);
 
MPI_Send(localData, sizeOfLocalData, MPI_INT, dist, 0, MPI_COMM_WORLD);
}
 
step = step * 2;
}
 
MPI_Barrier(MPI_COMM_WORLD);
}
Помогите добавить еще получение размера сортируемого массива и заполнение массива чтобы программа заработала. Спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2016, 21:05
Ответы с готовыми решениями:

Реализовать параллельную сортировку матрицы
Ребята выручайте не пойму как реализовать параллельную сортировку как добавить? #define...

Пытаюсь реализовать сортировку слиянием (выскакивает ошибка)
Пытаюсь реализовать сортировку слиянием. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Реализовать внешнюю сортировку слиянием для n файлов
Здравствуйте. Помогите пожалуйста с написанием программы. Реализовать внешнюю сортировку слиянием...

Сортировку вставками меняем на сортировку слиянием
Код программы выполняет сортировку массива вставками. Как сюда вставить код сортировки массива...

Сделать параллельную сортировку методом выборов
Может есть у кого-то код примерный. Или написанный. Скиньте плез

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2016, 21:05

Создать шаблон функции, выполняющая внешнюю сортировку сбалансированным слиянием.
Создать шаблон функции, выполняющая внешнюю сортировку сбалансированным слиянием. Протестировать...

Класс Прямая(Помогите реализовать построение прямой через 1 точку и параллельную ей прямую)
Помогите дописать класс // Методы класса &quot;Прямая&quot; //...

Осуществить сортировку текстового файла по длине строк циклическим слиянием/разделением
Осуществить сортировку текстового файла циклическим слиянием/разделением (по длине строк). Файл...


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

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

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