Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.vscode
build
51 changes: 51 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
dist: focal
sudo: required # используем Virtual Machine (а не Docker container)

language: c

os:
- linux

compiler:
- gcc

addons:
apt:
packages:
- cmake
- lcov
- gcovr

install:
- sudo apt -y install python3-pip
- sudo apt-get install valgrind
- sudo pip3 install cpplint
- sudo apt update
- sudo apt install build-essential
- sudo apt install libgtest-dev
- sudo apt-get install cmake
- sudo apt-get install -y gcovr
- sudo apt install lcov
- sudo apt install cppcheck
- sudo apt install curl

before_script:
- sudo apt-get install -y libgtest-dev
- cd /usr/src/gtest
- sudo cmake CMakeLists.txt && sudo make
- cd "${TRAVIS_BUILD_DIR}"/
- ls
- sudo mkdir build
- cd build
- sudo cmake ..
- sudo make clean
- sudo make
- cd ..
- cd ..

script:
- cpplint --extensions=c,cpp src/main.c src/find_letters.c include/testy/find_letters.h test/main.cpp
- cppcheck --enable=warning,performance,portability,style --language=c++ ./
- valgrind --track-origins=yes --child-silent-after-fork=yes --leak-check=full "${TRAVIS_BUILD_DIR}"/build/TEST
- cd "${TRAVIS_BUILD_DIR}"/src
- bash <(curl -s https://codecov.io/bash)
8 changes: 8 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"C_Cpp.errorSquiggles": "Disabled",
"files.associations": {
"find_letters.h": "c",
"stdio.h": "c",
"types.h": "c"
}
}
51 changes: 51 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
cmake_minimum_required(VERSION 3.16)
project(try C CXX)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

set(CMAKE_C_FLAGS "-g -Wall -Werror -Wextra -O3 -fprofile-arcs -ftest-coverage")
set(CMAKE_CXX_FLAGS "-g -Wall -O3 -fprofile-arcs -ftest-coverage")

find_package(GTest REQUIRED)
find_package(Threads REQUIRED)



set(DIR ${CMAKE_CURRENT_SOURCE_DIR})
add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")

set(INC_DIR ${DIR}/include/testy)

set(SRC_DIR ${DIR}/src)

set(TESTS_DIR ${DIR}/test)

include_directories("${GTEST_INCLUDE_DIRS}")
include_directories(/include/testy)

add_library(f_letter STATIC
${INC_DIR}/find_letters.h
${SRC_DIR}/find_letters.c)

add_library(multi_compute_matrix MODULE

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

лучше использовать SHARED

${INC_DIR}/find_letters.h
${SRC_DIR}/find_letters.c)

add_executable(TEST
test/main.cpp)

target_include_directories(TEST PUBLIC ${INC_DIR})

target_link_libraries(TEST ${GTEST_LIBRARIES} Threads::Threads pthread -ldl f_letter)

enable_testing()



add_executable(try
${SRC_DIR}/main.c)

target_link_libraries(try Threads::Threads pthread -ldl f_letter)

target_include_directories(try PUBLIC ${INC_DIR})
19 changes: 19 additions & 0 deletions CMakeLists.txt.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.1)

project(googletest-download NONE)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}-pthread")

include(ExternalProject)
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.8.1
SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
6 changes: 6 additions & 0 deletions CPPLINT.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
headers=h
linelength=120
filter=-runtime/int
filter=-legal/copyright
filter=-build/include_subdir
filter=-build/include
9 changes: 3 additions & 6 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
.. image:: https://travis-ci.com/Golem24434/IZ2.svg?branch=other
:target: https://travis-ci.com/Golem24434/IZ2
.. image:: https://codecov.io/gh/Golem24434/IZ2/branch/other/graph/badge.svg?token=A9Q0DV7S7K
:target: https://codecov.io/gh/Golem24434/IZ2
:target: https://travis-ci.com/Golem24434/IZ2CD

Второе индивидуальное задание по курсу "Углубленное программирование на C/C++
-----------------------------------------------------------------------------

Вариант #12
В вашем распоряжении — квадратная матрица из 10 000 x 10 000 чисел. Составьте наивный алгоритм подсчета сумм диагональных элементов матрицы (для каждой диагонали), а затем реализуйте параллельный алгоритм с использованием нескольких процессов с учетом оптимизации работы с кэш-памятью.

Вариант #35
В вашем распоряжении – данные о письмах пользователей (отправитель, список получателей, тема, тело письма, дата отправки). Суммарное количество пользователей – 10к, писем – 1 млн. Реализуйте последовательный и параллельный алгоритм поиска с использованием нескольких процессов тем всех писем, которые были получены пользователем в определённый временной промежуток, отсортированных по дате.
На что необходимо обратить внимание:
- основная информация описана в https://park.mail.ru/blog/topic/view/14270/
- параллельная реализация не должна быть осуществлена с помощью процессов, когда требуется реализация с помощью потоков (и наоборот);
Expand Down
58 changes: 58 additions & 0 deletions include/testy/find_letters.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#ifndef FUNCTION_H
#define FUNCTION_H

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <time.h>
#include <dlfcn.h>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

много инклюдов в публичном хедере, здесь должны подключаться только необходимые заголовки6 остальные в c файле


#define MAX_NUMBER_LETTERS 1000000
#define MAX_NUMBER_TOPICS 1000


typedef struct letter letter;
typedef struct date_frame date_frame;
typedef struct str_topics str_topics;

struct str_topics {
int number;
char topics[100][10];
};


struct date_frame {
int year;
int month;
int day;
};

struct letter {
int sender_id;
int ecipient_id[10];
char topic[10];
int number_ecipient;
date_frame date;
};

int testing_letters_el(letter** letters, int N);

int date_in_key(date_frame date);

int binary_search(letter** k, int key, int N);

int get_number_process();

int fill_in_elements(letter** letters);

str_topics* singleprocces_find_topic(letter** letters, int start,int end, int number_user);

str_topics* multiprocess_find_topic(letter** letters, int start,int end, int number_user);

int equality_test(str_topics* topics1,str_topics* topics2);
#endif
Loading