Реализовать параллельный алгоритм на С/С++ с использованием возможностей библиотеки OpenMP.
Замерить время работы последовательной и параллельной версий алгоритма.
Для каждого запуска сравнивать результат с результатом работы последовательной версии.
Исследовать влияние на время работы параллельной версии алгоритма:
- числа используемых потоков (ompset_numthreads), от 1 до количества ядер процессора.
- объема обрабатываемых данных (N, M)
Индивидуальные задания (можно выбирать любое):
1. Сортировку (любой nlogn алгоритм) массива целых чисел, массив из N случайных чисел.
2. Алгоритм Гаусса для решения системы из N линейных уравнений с N неизвестными.
3. Сортировку подсчетом массива целых чисел, массив из N случайных чисел от 0 до M < N/10
4. Алгоритм флойда (поиск путей в графе из каждой вершины в каждую), для из N вершин, 3N ребер со случайными весами.
5. Поиск строки длиной M символов в тексте длиной N символов. Текст и искомую строку загружать из файла. Для сравнения строк использовать расстояние Хэмминга.
6. Brute-Force matcher: Есть 2 матрицы из N(строк)*M(столбцов) float элементов, необходимо реализовать алгоритм, для каждой строки первой матрицы подбирающий номер строки во второй матрице, так, что бы сумма квадратов разностей элементов выбранных строк была минимальна. Можно использовать каждую строку второй матрицы несколько раз.
7. Для массива из N чисел, случайно распределенных от 0 до 1 (лучше использовать нелинейное распределение чисел по интервалу) найти границы интервала x1 и x2, такого, что бы ему принадлежало не менее 50% чисел массива а ширина интервала была минимальна.