Skip to content

Commit 8b3fdce

Browse files
authored
Merge branch 'master' into an/add_all_dir
2 parents e3c00df + a8c0499 commit 8b3fdce

File tree

12 files changed

+235
-0
lines changed

12 files changed

+235
-0
lines changed

Diff for: cmake/configure.cmake

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ if( MSVC )
3939
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /wd4267 /wd4244 /wd4100 /WX" )
4040
endif( MSVC )
4141

42+
add_compile_definitions(PPC_PATH_TO_PROJECT="${CMAKE_CURRENT_SOURCE_DIR}")
43+
4244
MACRO(SUBDIRLIST result curdir)
4345
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
4446
SET(dirlist "")

Diff for: modules/core/task/include/task.hpp

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <chrono>
55
#include <cstdint>
6+
#include <filesystem>
67
#include <iostream>
78
#include <memory>
89
#include <string>
@@ -69,6 +70,11 @@ class Task {
6970
std::chrono::high_resolution_clock::time_point tmp_time_point;
7071
};
7172

73+
inline std::filesystem::path GetAbsolutePath(const std::string &relative_path) {
74+
std::filesystem::path path = std::string(PPC_PATH_TO_PROJECT) + "/tasks/" + relative_path;
75+
return path;
76+
}
77+
7278
} // namespace ppc::core
7379

7480
#endif // MODULES_CORE_INCLUDE_TASK_HPP_

Diff for: tasks/mpi/example/data/test.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
120

Diff for: tasks/mpi/example/func_tests/main.cpp

+52
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <boost/mpi/communicator.hpp>
44
#include <boost/mpi/environment.hpp>
5+
#include <fstream>
56
#include <random>
67
#include <vector>
78

@@ -238,3 +239,54 @@ TEST(Parallel_Operations_MPI, Test_Max_2) {
238239
ASSERT_EQ(reference_max[0], global_max[0]);
239240
}
240241
}
242+
243+
TEST(Parallel_Operations_MPI, Test_Max_2_File) {
244+
boost::mpi::communicator world;
245+
std::vector<int> global_vec;
246+
std::vector<int32_t> global_max(1, 0);
247+
// Create TaskData
248+
auto task_data_par = std::make_shared<ppc::core::TaskData>();
249+
250+
if (world.rank() == 0) {
251+
std::string line;
252+
std::ifstream test_file(ppc::core::GetAbsolutePath("mpi/example/data/test.txt"));
253+
if (test_file.is_open()) {
254+
getline(test_file, line);
255+
}
256+
test_file.close();
257+
258+
const int count_size_vector = std::stoi(line);
259+
global_vec = GetRandomVector(count_size_vector);
260+
task_data_par->inputs.emplace_back(reinterpret_cast<uint8_t*>(global_vec.data()));
261+
task_data_par->inputs_count.emplace_back(global_vec.size());
262+
task_data_par->outputs.emplace_back(reinterpret_cast<uint8_t*>(global_max.data()));
263+
task_data_par->outputs_count.emplace_back(global_max.size());
264+
}
265+
266+
nesterov_a_test_task_mpi::TestMPITaskParallel test_mpi_task_parallel(task_data_par, "max");
267+
ASSERT_EQ(test_mpi_task_parallel.validation(), true);
268+
test_mpi_task_parallel.pre_processing();
269+
test_mpi_task_parallel.run();
270+
test_mpi_task_parallel.post_processing();
271+
272+
if (world.rank() == 0) {
273+
// Create data
274+
std::vector<int32_t> reference_max(1, 0);
275+
276+
// Create TaskData
277+
auto task_data_seq = std::make_shared<ppc::core::TaskData>();
278+
task_data_seq->inputs.emplace_back(reinterpret_cast<uint8_t*>(global_vec.data()));
279+
task_data_seq->inputs_count.emplace_back(global_vec.size());
280+
task_data_seq->outputs.emplace_back(reinterpret_cast<uint8_t*>(reference_max.data()));
281+
task_data_seq->outputs_count.emplace_back(reference_max.size());
282+
283+
// Create Task
284+
nesterov_a_test_task_mpi::TestMPITaskSequential test_mpi_task_sequential(task_data_seq, "max");
285+
ASSERT_EQ(test_mpi_task_sequential.validation(), true);
286+
test_mpi_task_sequential.pre_processing();
287+
test_mpi_task_sequential.run();
288+
test_mpi_task_sequential.post_processing();
289+
290+
ASSERT_EQ(reference_max[0], global_max[0]);
291+
}
292+
}

Diff for: tasks/omp/example/data/test.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
5

Diff for: tasks/omp/example/func_tests/main.cpp

+46
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <gtest/gtest.h>
22

3+
#include <fstream>
34
#include <random>
45
#include <vector>
56

@@ -207,3 +208,48 @@ TEST(Parallel_Operations_OpenMP, Test_Mult_2) {
207208
test_omp_task_parallel.post_processing();
208209
ASSERT_EQ(ref_res[0], par_res[0]);
209210
}
211+
212+
TEST(Parallel_Operations_OpenMP, Test_Mult_2_File) {
213+
std::string line;
214+
std::ifstream test_file(ppc::core::GetAbsolutePath("omp/example/data/test.txt"));
215+
if (test_file.is_open()) {
216+
getline(test_file, line);
217+
}
218+
test_file.close();
219+
220+
std::vector<int> vec = GetRandomVector(std::stoi(line));
221+
// Create data
222+
std::vector<int> ref_res(1, 0);
223+
224+
// Create TaskData
225+
auto task_data_seq = std::make_shared<ppc::core::TaskData>();
226+
task_data_seq->inputs.emplace_back(reinterpret_cast<uint8_t *>(vec.data()));
227+
task_data_seq->inputs_count.emplace_back(vec.size());
228+
task_data_seq->outputs.emplace_back(reinterpret_cast<uint8_t *>(ref_res.data()));
229+
task_data_seq->outputs_count.emplace_back(ref_res.size());
230+
231+
// Create Task
232+
nesterov_a_test_task_omp::TestOMPTaskSequential test_omp_task_sequential(task_data_seq, "*");
233+
ASSERT_EQ(test_omp_task_sequential.validation(), true);
234+
test_omp_task_sequential.pre_processing();
235+
test_omp_task_sequential.run();
236+
test_omp_task_sequential.post_processing();
237+
238+
// Create data
239+
std::vector<int> par_res(1, 0);
240+
241+
// Create TaskData
242+
auto task_data_par = std::make_shared<ppc::core::TaskData>();
243+
task_data_par->inputs.emplace_back(reinterpret_cast<uint8_t *>(vec.data()));
244+
task_data_par->inputs_count.emplace_back(vec.size());
245+
task_data_par->outputs.emplace_back(reinterpret_cast<uint8_t *>(par_res.data()));
246+
task_data_par->outputs_count.emplace_back(par_res.size());
247+
248+
// Create Task
249+
nesterov_a_test_task_omp::TestOMPTaskParallel test_omp_task_parallel(task_data_par, "*");
250+
ASSERT_EQ(test_omp_task_parallel.validation(), true);
251+
test_omp_task_parallel.pre_processing();
252+
test_omp_task_parallel.run();
253+
test_omp_task_parallel.post_processing();
254+
ASSERT_EQ(ref_res[0], par_res[0]);
255+
}

Diff for: tasks/seq/example/data/test.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
100

Diff for: tasks/seq/example/func_tests/main.cpp

+31
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <gtest/gtest.h>
22

3+
#include <fstream>
34
#include <vector>
45

56
#include "seq/example/include/ops_seq.hpp"
@@ -118,3 +119,33 @@ TEST(Sequential, Test_Sum_100) {
118119
test_task_sequential.post_processing();
119120
ASSERT_EQ(count, out[0]);
120121
}
122+
123+
TEST(Sequential, Test_Sum_100_From_File) {
124+
std::string line;
125+
std::ifstream test_file(ppc::core::GetAbsolutePath("seq/example/data/test.txt"));
126+
if (test_file.is_open()) {
127+
getline(test_file, line);
128+
}
129+
test_file.close();
130+
131+
const int count = std::stoi(line);
132+
133+
// Create data
134+
std::vector<int> in(1, count);
135+
std::vector<int> out(1, 0);
136+
137+
// Create TaskData
138+
auto task_data_seq = std::make_shared<ppc::core::TaskData>();
139+
task_data_seq->inputs.emplace_back(reinterpret_cast<uint8_t *>(in.data()));
140+
task_data_seq->inputs_count.emplace_back(in.size());
141+
task_data_seq->outputs.emplace_back(reinterpret_cast<uint8_t *>(out.data()));
142+
task_data_seq->outputs_count.emplace_back(out.size());
143+
144+
// Create Task
145+
nesterov_a_test_task_seq::TestTaskSequential test_task_sequential(task_data_seq);
146+
ASSERT_EQ(test_task_sequential.validation(), true);
147+
test_task_sequential.pre_processing();
148+
test_task_sequential.run();
149+
test_task_sequential.post_processing();
150+
ASSERT_EQ(count, out[0]);
151+
}

Diff for: tasks/stl/example/data/test.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
15

Diff for: tasks/stl/example/func_tests/main.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <gtest/gtest.h>
22

3+
#include <fstream>
34
#include <random>
45
#include <thread>
56
#include <vector>
@@ -212,3 +213,49 @@ TEST(Parallel_Operations_STL_Threads, Test_Diff_2) {
212213
test_stl_task_parallel.post_processing();
213214
ASSERT_EQ(ref_res[0], par_res[0]);
214215
}
216+
217+
TEST(Parallel_Operations_STL_Threads, Test_Diff_2_File) {
218+
std::string line;
219+
std::ifstream test_file(ppc::core::GetAbsolutePath("stl/example/data/test.txt"));
220+
if (test_file.is_open()) {
221+
getline(test_file, line);
222+
}
223+
test_file.close();
224+
225+
auto nthreads = std::thread::hardware_concurrency() * std::stoi(line);
226+
std::vector<int> vec = GetRandomVector(static_cast<int>(nthreads));
227+
// Create data
228+
std::vector<int> ref_res(1, 0);
229+
230+
// Create TaskData
231+
auto task_data_seq = std::make_shared<ppc::core::TaskData>();
232+
task_data_seq->inputs.emplace_back(reinterpret_cast<uint8_t *>(vec.data()));
233+
task_data_seq->inputs_count.emplace_back(vec.size());
234+
task_data_seq->outputs.emplace_back(reinterpret_cast<uint8_t *>(ref_res.data()));
235+
task_data_seq->outputs_count.emplace_back(ref_res.size());
236+
237+
// Create Task
238+
nesterov_a_test_task_stl::TestSTLTaskSequential test_stl_task_sequential(task_data_seq, "-");
239+
ASSERT_EQ(test_stl_task_sequential.validation(), true);
240+
test_stl_task_sequential.pre_processing();
241+
test_stl_task_sequential.run();
242+
test_stl_task_sequential.post_processing();
243+
244+
// Create data
245+
std::vector<int> par_res(1, 0);
246+
247+
// Create TaskData
248+
auto task_data_par = std::make_shared<ppc::core::TaskData>();
249+
task_data_par->inputs.emplace_back(reinterpret_cast<uint8_t *>(vec.data()));
250+
task_data_par->inputs_count.emplace_back(vec.size());
251+
task_data_par->outputs.emplace_back(reinterpret_cast<uint8_t *>(par_res.data()));
252+
task_data_par->outputs_count.emplace_back(par_res.size());
253+
254+
// Create Task
255+
nesterov_a_test_task_stl::TestSTLTaskParallel test_stl_task_parallel(task_data_par, "-");
256+
ASSERT_EQ(test_stl_task_parallel.validation(), true);
257+
test_stl_task_parallel.pre_processing();
258+
test_stl_task_parallel.run();
259+
test_stl_task_parallel.post_processing();
260+
ASSERT_EQ(ref_res[0], par_res[0]);
261+
}

Diff for: tasks/tbb/example/data/test.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
5

Diff for: tasks/tbb/example/func_tests/main.cpp

+46
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <gtest/gtest.h>
22

3+
#include <fstream>
34
#include <random>
45
#include <vector>
56

@@ -206,3 +207,48 @@ TEST(Parallel_Operations_TBB, Test_Mult_2) {
206207
test_tbb_task_parallel.post_processing();
207208
ASSERT_EQ(ref_res[0], par_res[0]);
208209
}
210+
211+
TEST(Parallel_Operations_TBB, Test_Mult_2_File) {
212+
std::string line;
213+
std::ifstream test_file(ppc::core::GetAbsolutePath("tbb/example/data/test.txt"));
214+
if (test_file.is_open()) {
215+
getline(test_file, line);
216+
}
217+
test_file.close();
218+
219+
std::vector<int> vec = GetRandomVector(std::stoi(line));
220+
// Create data
221+
std::vector<int> ref_res(1, 0);
222+
223+
// Create TaskData
224+
auto task_data_seq = std::make_shared<ppc::core::TaskData>();
225+
task_data_seq->inputs.emplace_back(reinterpret_cast<uint8_t *>(vec.data()));
226+
task_data_seq->inputs_count.emplace_back(vec.size());
227+
task_data_seq->outputs.emplace_back(reinterpret_cast<uint8_t *>(ref_res.data()));
228+
task_data_seq->outputs_count.emplace_back(ref_res.size());
229+
230+
// Create Task
231+
nesterov_a_test_task_tbb::TestTBBTaskSequential test_tbb_task_sequential(task_data_seq, "*");
232+
ASSERT_EQ(test_tbb_task_sequential.validation(), true);
233+
test_tbb_task_sequential.pre_processing();
234+
test_tbb_task_sequential.run();
235+
test_tbb_task_sequential.post_processing();
236+
237+
// Create data
238+
std::vector<int> par_res(1, 0);
239+
240+
// Create TaskData
241+
auto task_data_par = std::make_shared<ppc::core::TaskData>();
242+
task_data_par->inputs.emplace_back(reinterpret_cast<uint8_t *>(vec.data()));
243+
task_data_par->inputs_count.emplace_back(vec.size());
244+
task_data_par->outputs.emplace_back(reinterpret_cast<uint8_t *>(par_res.data()));
245+
task_data_par->outputs_count.emplace_back(par_res.size());
246+
247+
// Create Task
248+
nesterov_a_test_task_tbb::TestTBBTaskParallel test_tbb_task_parallel(task_data_par, "*");
249+
ASSERT_EQ(test_tbb_task_parallel.validation(), true);
250+
test_tbb_task_parallel.pre_processing();
251+
test_tbb_task_parallel.run();
252+
test_tbb_task_parallel.post_processing();
253+
ASSERT_EQ(ref_res[0], par_res[0]);
254+
}

0 commit comments

Comments
 (0)