Why is this code slow?

Salih Dincer salihdb at hotmail.com
Thu Mar 28 14:07:43 UTC 2024


On Thursday, 28 March 2024 at 11:50:38 UTC, rkompass wrote:
> 
> Turning back to this: Are there similarly simple libraries for 
> C, that allow for
> parallel computation?

You can achieve parallelism in C using libraries such as OpenMP, 
which provides a set of compiler directives and runtime library 
routines for parallel programming.

Here’s an example of how you might modify the code to use OpenMP 
for parallel processing:

```c
#include <stdio.h>
#include <time.h>
#include <omp.h>

#define ITERS 1000000000
#define STEPS 31

double leibniz(int i) {
   double r = (i == ITERS) ? 0.5 * ((i % 2) ? -1.0 : 1.0) / (i * 
2.0 + 1.0) : 0.0;
   for (--i; i >= 0; i -= STEPS)
     r += ((i % 2) ? -1.0 : 1.0) / (i * 2.0 + 1.0);
   return r * 4.0;
}

int main() {
   double start_time = omp_get_wtime();

   double result = 0.0;

   #pragma omp parallel for reduction(+:result)
   for (int s = ITERS; s >= 0; s -= STEPS) {
     result += leibniz(s);
   }

   // Calculate the time taken
   double time_taken = omp_get_wtime() - start_time;

   printf("%.16f\n", result);
   printf("%f (seconds)\n", time_taken);

   return 0;
}
```
To compile this code with OpenMP support, you would use a command 
like gcc -fopenmp your_program.c. This tells the GCC compiler to 
enable OpenMP directives. The #pragma omp parallel for directive 
tells the compiler to parallelize the loop, and the reduction 
clause is used to safely accumulate the result variable across 
multiple threads.

SDB at 79


More information about the Digitalmars-d-learn mailing list