Skip to content

Denactive/TechnoCpp-2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

TechnoCpp-2

Описание Взаимодействие приложения с операционной системой (ОС) семейства UNIX. Многопоточное программирование с использованием потоков POSIX. Работа с разделяемой памятью. Линковщик и внешние библиотеки. Оптимизация работы с оперативной и кэш-памятью ЦП ЭВМ.

Домашнее задание №2: ИЗ №2 До 1 апреля, 18:00 (осталось 2 недели)Максимум 15 балловКритерии К семинару №2 необходимо индивидуально решить ИЗ2 по программированию на С в соответствии с назначенным вариантом.

ИЗ2 посвящено приобретению навыков системной разработки на C и работе с внешними библиотеками. В качестве результата ИЗ2 ожидается:

  • грамотное разбиение проекта на файлы;
  • наличие двух реализаций – последовательной и параллельной, оформленных в виде статической и динамической библиотеки соответственно, а также тестирующей программы, которая будет сравнивать на разных входных данных результаты обеих реализаций между собой;
  • максимальная утилизация ресурсов процессора при параллельной обработке данных путём использования нескольких процессов или потоков;
  • продуманные структуры данных в целях экономии оперативной памяти;
  • реализация алгоритмов, эффективно взаимодействующих с кэш-памятью.

Вариант #74

На вход поступает путь до директории проекта на языке С. Проект может быть любым, но для того, чтобы протестировать эффективность распараллеливания – имеет смысл взять довольно объёмный проект – например, скачав его из списка популярных репозиториев на языке C (https://github.com/trending/c). Также на вход поступает слово, по которому необходимо осуществить поиск по всем файлам проекта. В результате выполнения программа должна вывести отсортированный список файлов, содержащих искомое слово. Критерий сортировки – по убыванию количества вхождений слова в файл. Поиск необходимо осуществлять независимо от регистра, только по файлам .c, причём необходимо игнорировать текст комментариев. Распараллеливание осуществить на уровне использования нескольких потоков.

На что необходимо обратить внимание:

  • основная информация описана в https://park.mail.ru/blog/topic/view/14270/
  • параллельная реализация не должна быть осуществлена с помощью процессов, когда требуется реализация с помощью потоков (и наоборот);
  • компиляция должна происходить с флагами -Wall -Werror -Wpedantic, то есть необработанных ворнингов быть не должно;
  • количество потоков/процессов должно быть не захардкожено, а определяться в зависимости от возможностей системы (например, в зависимости от количества ядер процессора);
  • при разработке обеих библиотек стоит делать общий интерфейс, не раскрывая особенностей реализации;
  • библиотеки должны быть взаимозаменяемыми - конкретная реализация (последовательная/параллельная) - использоваться в зависимости от конфигурации сборки;
  • юнит-тесты должны быть реализованы для обеих реализаций (последовательной/параллельной). Покрытие тестами должно быть максимально возможным;
  • должны присутствовать стресс-тесты. Они могут быть реализованы внешним образом, запуская две разные программы - одну со статической библиотекой с последовательной реализацией, вторую - с динамической библиотекой с параллельной реализацией, и сравнивая их выводы друг с другом.
  • для организации ввода/вывода больших данных полезно работать с файлами, а в программе - предусмотреть работу с универсальными потоками входных/выходных данных (или хотя бы перенаправлять ввод/вывод на уровне их запуска)
  • если в задании сказано, что программа должна обрабатывать файлы объёмом 100 Мб – это лишь ориентир, на которых программа точно должна работать, и на котором имеет смысл делать замеры производительности и эффективности алгоритмов. Поэтому тесты на такой объём должны быть. Однако сама программа должна уметь работать с произвольными размерами входных данных
  • измерение времени должно осуществляться внешним образом, а не внутри кода библиотек. При этом необходимо делать несколько замеров и усреднять. Стоит помнить о том, что clock() в многопоточных приложениях работает не так, как ожидается.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published