Why is this code slow?

Salih Dincer salihdb at hotmail.com
Fri Mar 29 00:47:20 UTC 2024


On Friday, 29 March 2024 at 00:04:14 UTC, Serg Gini wrote:
> On Thursday, 28 March 2024 at 23:15:26 UTC, Salih Dincer wrote:
>> There is no such thing as parallel programming in D anyway. At 
>> least it has modules, but I didn't see it being works. 
>> Whenever I use toys built in foreach() it always ends in 
>> disappointment
>
> I think it just works :)
> Which issues did you have with it?

A year has passed and I have tried almost everything! Either it 
went into an infinite loop or nothing changed at the speed. At 
least things are not as simple as openMP on the D side! First I 
tried this code snippet: futile attempt!

```d
struct RowlandSequence {
   import std.numeric : gcd;
   import std.format : format;
   import std.conv : text;

   long b, r, a = 3;
   enum empty = false;

   string[] front() {
     string result = format("%s, %s", b, r);
     return [text(a), result];
   }

   void popFront() {
     long result = 1;
     while(result == 1) {
       result = gcd(r++, b);
       b += result;
     }
     a = result;
   }
}

enum BP {
   f = 1, b = 7, r = 2, a = 1, /*
   f = 109, b = 186837516, r = 62279173, //*/
   s = 5
}

void main()
{
   RowlandSequence rs;
   long start, skip;

   with(BP) {
     rs = RowlandSequence(b, r);
     start = f;
     skip = s;
   }
   rs.popFront();

   import std.stdio, std.parallelism;
   import std.range : take;

   auto rsFirst128 = rs.take(128);
   foreach(r; rsFirst128.parallel)
   {
     if(r[0].length > skip)
     {
       start.writeln(": ", r);
     }
     start++;
   }
}
```
SDB at 79


More information about the Digitalmars-d-learn mailing list