sargarass / NUP-LAB

Threads synchronization: Лабораторная работа N2 (низкоуровневая синхронизация потоков) по курсу «Низкоуровневое Программирование» Вариант № 2 от 2014-12-02

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Лабораторная работа N2 (низкоуровневая синхронизация потоков) по курсу «Низкоуровневое Программирование» Вариант № 2 от 2014-12-02

Разработать собственное представление и потокобезопасную реализацию основных операций вставки, удаления и поиска в несбалансированном двоичном дереве; Для проверки работоспособности разработать систему тестов; Запрещается применять стандартные примитивы синхронизации; Разработка выполняется на С и встроенном ассемблере MSVC 32 бита и GCC 32 и 64 бита. Встроенный ассемблер надо использовать в минимально необходимой степени, но так, чтобы получить максимально эффективный результирующий код. Разработка многопоточной версии выполняется на основе варианта, разработанного в рамках домашнего задания по крусу архитектуры (при совпадении тем);

Замечания:

  • Удаление также было не реализовано, как и в работе по архитектуре...
  • Был оставлен только vEB порядок
  • В процессе разработки были попробованы реализации на mutex, rwlock и наконец seqlock (реализации примитивов синхронизации расположены в соответствующих файлах)
  • Все время указано в секундах

Компиляция

Код написан на языке С, для необходимы gcc и qmake.

Для компиляции выполнить:

  • qmake lab6.pro
  • make

Управляющие директивы препроцессора

В файле "include.h": 1.

#define CACHE_LINE_SIZE 64 

Задает размер кэш-линии (используется в malloc для выравнивания).

#define HEIGHT 5 

Задает высоту кластера. Должна быть >= 4.

В файле "main.c":

#define CPUS_NUM 8
#define TESTS_INSERT 4032000*9
#define TESTS_FIND 40320000

Задает число процессоров, количество тестов на вставку, количество тестов на поиск.

Запуск

Приложение является консольным.

  • На вход ничего не принимает.
  • На выход выдает информацию:
  1. Время аллокации памяти для тестов: а) поиск б) удаление

  2. Время выполнения однопроцессорной версии без всяких синхронизаций: а) поиск б) удаление

  3. Во всех остальных строчках выдает: а) количество потоков б) время на вставку при данном числе потоков в) время на поиск при данном числе потоков

Пример результата работы программы при параметрах

#define CPUS_NUM 8
#define TESTS_INSERT 4032000*9
#define TESTS_FIND 40320000

выход:

Allocating memory
Time elapsed: 9,40260196896269917
Time elapsed: 5,20849413494579494
Testing single thread with out any sync: 
Time elapsed: 26,3823331110179424
Time elapsed: 23,9623020130675286
Threads: 2
Time elapsed: 17,5209693800425157
Time elapsed: 14,2657347529893741
Threads: 3
Time elapsed: 12,4543397920206189
Time elapsed: 10,2702292829053476
Threads: 4
Time elapsed: 10,2781622559996322
Time elapsed: 8,19344480405561626
Threads: 5
Time elapsed: 9,37511635501869023
Time elapsed: 7,19041527900844812
Threads: 6
Time elapsed: 8,69638188392855227
Time elapsed: 6,15473217400722206
Threads: 7
Time elapsed: 7,89636765699833632
Time elapsed: 5,57781437400262803
Threads: 8
Time elapsed: 7,85514036600943655
Time elapsed: 5,28296633099671453

About

Threads synchronization: Лабораторная работа N2 (низкоуровневая синхронизация потоков) по курсу «Низкоуровневое Программирование» Вариант № 2 от 2014-12-02


Languages

Language:C 82.3%Language:Makefile 12.5%Language:C++ 4.2%Language:QMake 1.0%