You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Подсчет частоты символов в строке — базовая задача анализа текстовых данных. Цель работы: реализовать последовательный и параллельный (с использованием MPI) алгоритмы подсчета вхождений заданного символа в строку и сравнить их производительность.
9
+
10
+
## 2. Problem Statement
11
+
На вход подается строка произвольной длины и искомый символ. Необходимо определить общее количество вхождений этого символа в строку. Алгоритм должен корректно обрабатывать ситуации, когда длина строки не кратна числу процессов.
12
+
13
+
## 3. Baseline Algorithm (Sequential)
14
+
Последовательный алгоритм представляет собой линейный проход по строке от первого до последнего символа с использованием цикла. При совпадении текущего символа с искомым инкрементируется локальный счетчик. Временная сложность алгоритма составляет $O(N)$, где $N$ — длина строки.
15
+
16
+
## 4. Parallelization Scheme
17
+
Используется парадигма разделения данных (Data Decomposition). Главный процесс (ранг 0) вычисляет длину строки и делит её на блоки. Для равномерной загрузки учитывается остаток от деления: первые процессы могут получить на один символ больше. Распределение данных осуществляется через `MPI_Scatter` (или локальное вычисление границ при использовании `MPI_Bcast`). Каждый процесс независимо считает совпадения в своем блоке. Результаты собираются и суммируются на главном процессе с помощью `MPI_Reduce`.
18
+
19
+
## 5. Implementation Details
20
+
- Код каждой версии (последовательной и параллельной) разделен на заголовочные файлы (include/) и файлы реализации (src/).
21
+
22
+
Основные типы данных InType и OutType вынесены в общий заголовочный файл в директории common/include, что гарантирует идентичность интерфейсов.
23
+
24
+
Весь код обернут в персональное пространство имен bruskova_v_... для предотвращения конфликтов имен при сборке проекта.
25
+
26
+
Реализована автоматизированная система тестирования в папке tests/, включающая функциональные тесты (functional) и тесты производительности (performance).
27
+
- Корректно обрабатывается остаток от деления строки на число процессов.
28
+
- Использованы функции коллективного взаимодействия MPI для минимизации сетевых задержек.
- Data: Синтетическая строка длиной 100 000 000 символов, сгенерированная в памяти.
35
+
36
+
## 7. Results and Discussion
37
+
38
+
### 7.1 Correctness
39
+
Корректность проверялась путем сравнения результатов работы последовательной и параллельной версий на тестовых строках (например, "abracadabra"). Обе версии выдают идентичные результаты.
40
+
41
+
### 7.2 Performance
42
+
43
+
| Mode | Count | Time, s | Speedup | Efficiency |
44
+
|------|-------|---------|---------|------------|
45
+
| seq | 1 | 0.145 | 1.00 | N/A |
46
+
| mpi | 2 | 0.080 | 1.81 | 90.5% |
47
+
| mpi | 4 | 0.042 | 3.45 | 86.2% |
48
+
49
+
Наблюдается стабильное ускорение при увеличении числа процессов. Эффективность незначительно падает из-за накладных расходов на создание коммуникатора и операцию `MPI_Reduce`.
50
+
51
+
## 8. Conclusions
52
+
Задача подсчета символов эффективно распараллеливается с помощью MPI. Линейная структура данных позволяет равномерно распределить нагрузку между узлами.
53
+
54
+
## 9. References
55
+
1. Документация по курсу Parallel Programming Course
0 commit comments