Initial Commit
This commit is contained in:
commit
e0de035a9c
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
cmake-build-debug
|
||||
.idea
|
||||
task1/dataset.dat
|
30
CMakeLists.txt
Normal file
30
CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(task1)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
|
||||
find_package(Qt6 COMPONENTS
|
||||
Core
|
||||
REQUIRED)
|
||||
|
||||
find_package(fmt)
|
||||
|
||||
|
||||
add_executable(task1_7 task1/main.cpp)
|
||||
add_custom_command(OUTPUT dataset.dat
|
||||
DEPENDS task1/dataset.dat
|
||||
COMMAND cmake -E copy_if_different ${CMAKE_SOURCE_DIR}/task1/dataset.dat ${CMAKE_BINARY_DIR}/dataset.dat
|
||||
COMMENT "Copying dataset")
|
||||
|
||||
add_custom_target(task1_7_dataset DEPENDS dataset.dat)
|
||||
add_dependencies(task1_7 task1_7_dataset)
|
||||
|
||||
|
||||
target_link_libraries(task1_7
|
||||
fmt::fmt
|
||||
Qt::Core)
|
31
docker/Dockerfile
Normal file
31
docker/Dockerfile
Normal file
@ -0,0 +1,31 @@
|
||||
ARG UBUNTU_VERSION="23.04"
|
||||
FROM ubuntu:${UBUNTU_VERSION}
|
||||
|
||||
# Build environment
|
||||
# Profiling and analyzer tools
|
||||
RUN --mount=type=bind,target=/var/lib/apt \
|
||||
apt-get -y update \
|
||||
&& DEBIAN_FRONTEND=noninteractive TZ=Europe/Berlin apt-get -y install tzdata apt-utils \
|
||||
&& apt-get -y upgrade \
|
||||
&& apt-get -y install python3 python3-pip lsb-release software-properties-common \
|
||||
rename wget git ninja-build make gdb gdbserver pkg-config \
|
||||
gperf linux-tools-generic linux-tools-common valgrind \
|
||||
&& apt-get clean
|
||||
|
||||
# CMake
|
||||
ENV CMAKE_VERSION="3.28.0-rc2"
|
||||
RUN wget -P /opt https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \
|
||||
&& bash /opt/cmake-${CMAKE_VERSION}-linux-x86_64.sh --skip-license --prefix=/usr \
|
||||
&& rm /opt/cmake-${CMAKE_VERSION}-linux-x86_64.sh
|
||||
|
||||
# Conan
|
||||
ENV CONAN_VERSION="1.61.0"
|
||||
ARG UBUNTU_VERSION
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
RUN env; if [[ ${UBUNTU_VERSION} == "23.04" || ${UBUNTU_VERSION} == "23.10" ]]; then \
|
||||
pip3 install --break-system-packages conan==${CONAN_VERSION}; else \
|
||||
pip3 install conan==${CONAN_VERSION}; fi
|
||||
|
||||
ARG GCC_VERSION="13"
|
||||
RUN apt-get -y install gcc-${GCC_VERSION} g++-${GCC_VERSION}
|
||||
|
14
task1/dataset-gen.py
Normal file
14
task1/dataset-gen.py
Normal file
@ -0,0 +1,14 @@
|
||||
import numpy as np
|
||||
import os
|
||||
|
||||
randomizer = np.random.default_rng(42)
|
||||
randvec = randomizer.integers(low=0, high=pow(2, 32), size=pow(10, 7))
|
||||
|
||||
print("Generated random vector with {} entries".format(randvec.size))
|
||||
|
||||
with open("dataset.dat", "w") as file:
|
||||
for value in randvec:
|
||||
file.write("{}\n".format(value))
|
||||
|
||||
fsize = os.path.getsize("dataset.dat")
|
||||
print("File written down with Size {} MB".format(fsize/1000/1000))
|
43
task1/main.cpp
Normal file
43
task1/main.cpp
Normal file
@ -0,0 +1,43 @@
|
||||
#include <fmt/format.h>
|
||||
#include <QCoreApplication>
|
||||
#include <QFile>
|
||||
#include <vector>
|
||||
#include <printf.h>
|
||||
|
||||
/*
|
||||
Create a simple sorting application that uses the mergesort algorithm to sort a
|
||||
large collection (e.g., 10^7 ) of 32-bit integers. The input data and output results
|
||||
should be stored in files, and the I/O operations should be considered a
|
||||
sequential part of the application. Mergesort is an algorithm that is considered
|
||||
appropriate for parallel execution, although it cannot be equally divided between
|
||||
an arbitrary number of processors, as Amdahl’s and Gustafson-Barsis’ laws
|
||||
require.
|
||||
Assuming that this equal division is possible, estimate α, i.e., the part of the
|
||||
program that can be parallelized, by using a profiler like gprof or valgrind to
|
||||
measure the duration of mergesort’s execution relative to the overall execution
|
||||
time. Use this number to estimate the predicted speedup for your program.
|
||||
Does α depend on the size of the input? If it does, how should you modify
|
||||
your predictions and their graphical illustration?
|
||||
*/
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
QFile file("dataset.dat");
|
||||
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
//qDebug() << "Could not open file";
|
||||
return 0;
|
||||
}
|
||||
|
||||
fmt::print("Opened file {} sucessfully!\n", file.fileName().toStdString());
|
||||
|
||||
|
||||
std::vector<int32_t> dataset;
|
||||
int counter = 0;
|
||||
|
||||
while(!file.atEnd()) {
|
||||
dataset.emplace_back(file.readLine().toInt());
|
||||
}
|
||||
|
||||
fmt::print("Read {} values from {}\n", dataset.size(), file.fileName().toStdString());
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user