9template<
typename ElementType>
21 m_x{x}, m_y{y}, m_z{z} { }
30 return { L.m_y * R.m_z - L.m_z * R.m_y,
31 L.m_z * R.m_x - L.m_x * R.m_z,
32 L.m_x * R.m_y - L.m_y * R.m_x};
37 os <<
"< " << v.m_x <<
", " << v.m_y <<
", " << v.m_z <<
" >";
51 stream <<
"x = " << x<<
", y = " << y <<
", z = " << z <<
nl;
52 stream <<
"v1 = " << v1 <<
", v2 = " << v2 <<
", v3 = " << v3 <<
endl;
55template<
typename ExecutionPolicy>
58 std::vector<vector_3d<float>> points;
59 points.reserve(element_count);
63 auto generator = tpf::chrono_random::random_generator<float>(-10, +10);
67 for(
size_t i = 0; i < element_count; ++i)
69 points.emplace_back(generator(), generator(), generator());
75 for(
size_t i = 0; i < test_count; ++i)
78 std::transform(policy, points.begin(), points.end(),
80 [&rhs](
const auto& lhs){ return lhs * rhs; }
94 size_t element_count = 10'000'000;
96 stream <<
"Sequential policy: \n";
99 stream <<
"\nParallel policy: \n";
102 stream <<
"\nParallel Unsequenced policy: \n";
107template<
typename ExecutionPolicy>
110 std::vector<vector_3d<float>> points;
111 points.reserve(element_count);
115 auto generator = tpf::chrono_random::random_generator<float>(-10, +10);
119 for(
size_t i = 0; i < element_count; ++i)
121 points.emplace_back(generator(), generator(), generator());
127 for(
size_t i = 0; i < test_count; ++i)
130 std::transform(policy, points.begin(), points.end(),
136 [&rhs](
const auto& lhs)
155 size_t element_count = 10'000'000;
159 stream <<
"Sequential policy: \n";
162 stream <<
"You cannot see this message" <<
endl;
166 stream <<
"This does not work - you cannot see this message either" <<
endl;
void why_naive_dangerous_parallel_algorithm(ExecutionPolicy policy, size_t test_count, size_t element_count)
void test_why_naive_dangerous_parallel_algorithm()
void naive_dangerous_parallel_algorithm(ExecutionPolicy policy, size_t test_count, size_t element_count)
void test_naive_dangerous_parallel_algorithm()
std::string elapsed_time(bool bReset=true, TimeUnit dummy_time=TimeUnit{}) const
friend std::ostream & operator<<(std::ostream &os, const vector_3d &v)
friend vector_3d operator*(const vector_3d &L, const vector_3d &R)
vector_3d(element_type x, element_type y, element_type z)
Stream output operators << are implemented.