31 Sum final_result_udr(0);
32 Sum final_result_udr_pctor(1);
35 int expected_value = 0;
36 int expected_value_pctor = 0;
37 for (
int i = 0;
i <
N; ++
i) {
38 array_sum[
i] =
Sum(
i);
40 expected_value_pctor +=
i;
42 int num_threads_for_pctor_calc = 4;
43 int priv_initializer_val_pctor = 1;
44 expected_value_pctor +=
45 num_threads_for_pctor_calc + priv_initializer_val_pctor;
46#pragma omp parallel num_threads(4) private(final_result_udr) private( \
47 final_result_udr_pctor)
49#pragma omp for reduction(sum_reduction : final_result_udr) \
50 reduction(sum_pctor_reduction : final_result_udr_pctor)
51 for (
int i = 0;
i <
N; ++
i) {
52 final_result_udr += array_sum[
i];
53 final_result_udr_pctor += array_sum[
i];
56 if (final_result_udr.
getValue() != expected_value ||
57 final_result_udr_pctor.
getValue() != expected_value_pctor)
109 int total_errors = 0;
110 const float kPiVal = 3.14f;
111 const int kExpectedSum = 45;
112 const int kExpectedProd = 3628800;
113 const float kExpectedFsum = 31.400000f;
114 const float kTolerance = 1e-4f;
115 const int kExpectedMin = 3;
116 const int kExpectedMax = 12;
117 std::complex<double>
arr[
N];
118 std::complex<double> kExpectedComplex(1, 0);
120 for (
int i = 1;
i <=
N; ++
i) {
121 arr[
i - 1] = std::complex<double>(
122 1.0 + 0.1 *
i, 0.5 *
i);
123 kExpectedComplex *=
arr[
i - 1];
126 for (
int i = 0;
i <
N;
i++)
128#pragma omp parallel num_threads(4)
135 if (t_sum_v != kExpectedSum)
137 if (t_prod_v != kExpectedProd)
139 if (std::abs(t_fsum_v - kExpectedFsum) > kTolerance)
142#pragma omp parallel num_threads(4)
147 if (t_min_v != kExpectedMin)
149 if (t_max_v != kExpectedMax)
153#pragma omp parallel num_threads(4)
155 std::complex<double>
result(1, 0);
157 if (std::abs(
result.real() - kExpectedComplex.real()) > 1e-6 ||
158 std::abs(
result.imag() - kExpectedComplex.imag()) > 1e-6) {
162 if (total_errors != 0)
163 fprintf(stderr,
"ERROR: reduction on private variable %d\n", total_errors);