Optimization problem: bulk Boolean operations on vectors

hardreset via Digitalmars-d digitalmars-d at puremagic.com
Fri Dec 23 10:03:54 PST 2016


On Friday, 23 December 2016 at 16:15:44 UTC, Andrei Alexandrescu 
wrote:
> An interesting problem to look at:
>
> https://github.com/dlang/dmd/pull/6352
>
> Andrei

Ok some hand written assembler to and-assign ints...

enum SIZE = 100000000;

void foo3(int* a, int* b)
{
     asm
     {
         mov   EAX,a;
         mov   EDX,b;
         sub   EDX,EAX;
         mov   ECX,EAX;
         add   ECX,SIZE*4;
     l1:;
         cmp   EAX,ECX;
         jae   done;
         mov   EBX,[EAX];
         and   EBX,[EAX+EDX];
         mov   [EAX],EBX;
         add   EAX,4;
         jmp l1;
     done:;
     }
}

I get..

456ms for unconditional
505ms for conditional
268ms for assembler

So the asm is about 40% faster than the best of the alternatives. 
The point being that it's the generated code not the source 
that's the problem.


More information about the Digitalmars-d mailing list