Task 5, 5* some fixes and cleanup

This commit is contained in:
Markus Schmidt 2025-12-09 23:33:08 +01:00
commit c8bf307391
154 changed files with 214851 additions and 93 deletions

View file

@ -183,50 +183,63 @@ int main(int argc, char **argv)
const int NLOOPS = 20;
for (int k = 3; k <= 8; ++k)
{
unsigned int n = pow(10.0, k);
vector<double> x(n), y(n);
for (unsigned int i = 0; i < n; ++i)
{
size_t n = (size_t)pow(10, k);
vector<double> x(n), y(n);
for (unsigned int i = 0; i < n; ++i)
{
double xi= (i % 219) + 1;
x[i] = xi;
y[i] = 1.0 / xi;
}
// ---- SUM benchmark (sequential) ----
double t0 = omp_get_wtime();
double s1 = benchmark_A_sum_old(x);
double t_sum_seq = omp_get_wtime() - t0;
// ---- SUM benchmark (parallel) ----
t0 = omp_get_wtime();
double s2 = benchmark_A_sum(x);
double t_sum_omp = omp_get_wtime() - t0;
double sum_speedup = t_sum_seq / t_sum_omp;
// ---- INNER PRODUCT benchmark (sequential) ----
t0 = omp_get_wtime();
double ip1 = benchmark_A_old(x, y);
double t_inner_seq = omp_get_wtime() - t0;
// ---- INNER PRODUCT benchmark (parallel) ----
t0 = omp_get_wtime();
double ip2 = benchmark_A(x, y);
double t_inner_omp = omp_get_wtime() - t0;
double inner_speedup = t_inner_seq / t_inner_omp;
// ---- Print results ----
cout << k << endl;
cout << t_sum_seq << ", " << t_sum_omp << ", " << sum_speedup << endl;
cout << t_inner_seq << ", " << t_inner_omp << ", " << inner_speedup << endl;
cout << endl;
double xi = (i % 219) + 1;
x[i] = xi;
y[i] = 1.0 / xi;
}
double s1_guard = 0.0, s2_guard = 0.0;
double ip1_guard = 0.0, ip2_guard = 0.0;
// ---- SUM benchmark (sequential) ----
double t0 = omp_get_wtime();
for (int r = 0; r < NLOOPS; ++r)
s1_guard += benchmark_A_sum_old(x);
double t_sum_seq = (omp_get_wtime() - t0) / NLOOPS;
// ---- SUM benchmark (parallel) ----
t0 = omp_get_wtime();
for (int r = 0; r < NLOOPS; ++r)
s2_guard += benchmark_A_sum(x);
double t_sum_omp = (omp_get_wtime() - t0) / NLOOPS;
double sum_speedup = t_sum_seq / t_sum_omp;
// ---- INNER PRODUCT benchmark (sequential) ----
t0 = omp_get_wtime();
for (int r = 0; r < NLOOPS; ++r)
ip1_guard += benchmark_A_old(x, y);
double t_inner_seq = (omp_get_wtime() - t0) / NLOOPS;
// ---- INNER PRODUCT benchmark (parallel) ----
t0 = omp_get_wtime();
for (int r = 0; r < NLOOPS; ++r)
ip2_guard += benchmark_A(x, y);
double t_inner_omp = (omp_get_wtime() - t0) / NLOOPS;
double inner_speedup = t_inner_seq / t_inner_omp;
// ---- Print results ----
std::cout << "k = " << k << " (n = 10^" << k << " = " << n << ")\n";
std::cout << "SUM seq: " << t_sum_seq << " s, omp: " << t_sum_omp
<< " s, speedup = " << sum_speedup << '\n';
std::cout << "INNER seq: " << t_inner_seq << " s, omp: " << t_inner_omp
<< " s, speedup = " << inner_speedup << '\n';
std::cout << "guards: "
<< s1_guard << ", " << s2_guard << ", "
<< ip1_guard << ", " << ip2_guard << "\n\n";
}
return 0;