refactored code intho thread_pool.hpp & test.cpp for testing.
This commit is contained in:
parent
57ce1f25d3
commit
ccb0173877
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
.idea
|
.idea
|
||||||
.DS_Store
|
.DS_Store
|
||||||
build
|
build
|
||||||
|
cmake-build-debug
|
||||||
|
@ -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
78
test.cpp
Normal 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;
|
||||||
|
}
|
@ -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;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user