Одним из экзаменационных вопросов факультативного курса параллельного программирования последнего года Стамбульского технического университета была реализация поиска наивных шаблонов с использованием MPI на бумаге. В этой статье я реализую этот простой алгоритм параллельно, используя OpenMP.
Простой поиск по шаблону в сериале
Наивный поиск по шаблону просто берет шаблон и просматривает текст, сравнивая части текста, чтобы найти соответствие. Давайте реализуем этот простой алгоритм, используя функцию strncmp из библиотеки String на языке C.
Простой поиск шаблонов в OpenMP
По сути, мы разбиваем текст на куски, и для каждого потока, который мы выполняем, мы назначаем разные куски, используя начальные и конечные индексы.
Давайте реализуем это на C, используя OpenMP.
Имейте в виду, что вам не нужна библиотека OMP для запуска последовательного кода. Тем не менее, я использовал функцию времени стены OMP для измерения времени, чтобы сравнить производительность.
Скомпилируйте вышеуказанные программы, используя следующие команды
gcc np_serial.c -fopenmp -o np_serial [-fopenmp для функциональности настенных часов]
gcc np_parallel.c -fopenmp -o np_parallel
Результаты испытаний ниже.
Имейте в виду, что в небольших тестовых примерах параллелизм не имеет преимущества. Он работает хуже, чем последовательный код, из-за накладных расходов на распараллеливание.
Сравнение производительности
Я протестировал обе программы, используя функцию OpenMP omp_get_wtime.
Ниже приведены результаты 5 последовательных запусков каждого кода для длины шаблона 8 и длины текста четыре миллиона символов.
Надеюсь, вам понравилась эта статья. Не забудьте подписаться на мой блог.