refactored code intho thread_pool.hpp & test.cpp for testing.

This commit is contained in:
Kjistóf 2016-11-27 17:54:55 +01:00
parent 57ce1f25d3
commit ccb0173877
4 changed files with 81 additions and 81 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.idea .idea
.DS_Store .DS_Store
build build
cmake-build-debug

View File

@ -4,6 +4,6 @@ project(thread_pool)
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -pthread")
set(SOURCE_FILES main.cpp) set(SOURCE_FILES thread_pool.hpp test.cpp)
add_executable(thread_pool ${SOURCE_FILES}) add_executable(thread_pool ${SOURCE_FILES})

78
test.cpp Normal file
View File

@ -0,0 +1,78 @@
#include "thread_pool.hpp"
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/type_index.hpp>
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// functions for testing & test zone ////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
boost::multiprecision::cpp_int mp_factorial(unsigned long long int number)
{
boost::multiprecision::cpp_int num = number;
for (unsigned long long int i = number; i > 1; --i)
{
num *=(--number);
}
return num;
}
void simpleTask()
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
void function_vs_packaged_task_test(thread_pool &tp, const unsigned short TIMES = 10000)
{
namespace ch = std::chrono;
namespace mp = boost::multiprecision;
auto fstart = ch::high_resolution_clock::now();
for (int j = 0; j < TIMES; ++j)
{
tp.add_task(simpleTask);
}
auto fdur = ch::high_resolution_clock::now() - fstart;
auto pt = std::packaged_task<void()>(simpleTask);
auto pstart = ch::high_resolution_clock::now();
for (int j = 0; j < TIMES; ++j)
{
tp.add_task(pt);
}
auto pdur = ch::high_resolution_clock::now() - pstart;
std::cout << "Function: " << ch::duration_cast<ch::microseconds>(fdur).count() <<
std::endl << "Packaged task: " << ch::duration_cast<ch::microseconds>(pdur).count() << std::endl;
}
void factorial_test(thread_pool& tp, unsigned long long number)
{
std::packaged_task<boost::multiprecision::cpp_int()> pt(std::bind(mp_factorial, number-1));
tp.add_task(pt);
auto fu1 = tp.add_task(mp_factorial, number);
auto fu2 = pt.get_future();
std::cout << "Results for n & n-1: " << fu1.get() << " " << fu2.get() << std::endl;
std::cout << "With " << tp.get_thread_num() << " threads" << std::endl;
std::cout << "Type of future: " << boost::typeindex::type_id_with_cvr<decltype(fu1)>().pretty_name() << std::endl;
}
void boost_vs_me_test(thread_pool& tp)
{ /* TODO */ }
int main(void)
{
thread_pool tp(4);
factorial_test(tp, 6);
function_vs_packaged_task_test(tp, 10000);
return 0;
}

View File

@ -1,3 +1,4 @@
#pragma once
// //
// main.cpp // main.cpp
// thread_pool v0.2a // thread_pool v0.2a
@ -27,7 +28,6 @@
// //
/* necessary includes */ /* necessary includes */
#include <iostream>
#include <thread> #include <thread>
#include <future> #include <future>
#include <mutex> #include <mutex>
@ -38,13 +38,6 @@
#include <functional> #include <functional>
#include <memory> #include <memory>
/* for the tests */
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/type_index.hpp>
//#include <boost/asio/io_service.hpp>
//#include <boost/bind.hpp>
//#include <boost/thread/thread.hpp>
class thread_pool class thread_pool
@ -203,75 +196,3 @@ void thread_pool::loop()
fun(); fun();
} }
} }
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////// functions for testing & test zone ////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
boost::multiprecision::cpp_int mp_factorial(unsigned long long int number)
{
boost::multiprecision::cpp_int num = number;
for (unsigned long long int i = number; i > 1; --i)
{
num *=(--number);
}
return num;
}
void simpleTask()
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
void function_vs_packaged_task_test(thread_pool &tp, const unsigned short TIMES = 10000)
{
namespace ch = std::chrono;
namespace mp = boost::multiprecision;
auto fstart = ch::high_resolution_clock::now();
for (int j = 0; j < TIMES; ++j)
{
tp.add_task(simpleTask);
}
auto fdur = ch::high_resolution_clock::now() - fstart;
auto pt = std::packaged_task<void()>(simpleTask);
auto pstart = ch::high_resolution_clock::now();
for (int j = 0; j < TIMES; ++j)
{
tp.add_task(pt);
}
auto pdur = ch::high_resolution_clock::now() - pstart;
std::cout << "Function: " << ch::duration_cast<ch::microseconds>(fdur).count() <<
std::endl << "Packaged task: " << ch::duration_cast<ch::microseconds>(pdur).count() << std::endl;
}
void factorial_test(thread_pool& tp, unsigned long long number)
{
std::packaged_task<boost::multiprecision::cpp_int()> pt(std::bind(mp_factorial, number-1));
tp.add_task(pt);
auto fu1 = tp.add_task(mp_factorial, number);
auto fu2 = pt.get_future();
std::cout << "Results for n & n-1: " << fu1.get() << " " << fu2.get() << std::endl;
std::cout << "With " << tp.get_thread_num() << " threads" << std::endl;
std::cout << "Type of future: " << boost::typeindex::type_id_with_cvr<decltype(fu1)>().pretty_name() << std::endl;
}
void boost_vs_me_test(thread_pool& tp)
{ /* TODO */ }
int main(void)
{
thread_pool tp(4);
factorial_test(tp, 6);
function_vs_packaged_task_test(tp, 10000);
return 0;
}