Why is this code slow?

rkompass rkompass at gmx.de
Thu Mar 28 20:18:10 UTC 2024


On Thursday, 28 March 2024 at 14:07:43 UTC, Salih Dincer wrote:
> 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
>  . . .
>
>   #pragma omp parallel for reduction(+:result)
>   for (int s = ITERS; s >= 0; s -= STEPS) {
>     result += leibniz(s);
>   }
>  . . . ```
> 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

Nice, thank you.
It worked endlessly until I saw I had to correct the `for` to
   `for (int s = ITERS; s > ITERS-STEPS; s--)`
Now the result is:
```
3.1415926535897936
Execution time: 0.212483 (seconds).
```
This result is sooo similar!

I didn't know that OpenMP programming could be that easy.
Binary size is 16K, same order of magnitude, although somewhat 
less.
D advantage is gone here, I would say.



More information about the Digitalmars-d-learn mailing list