Код:
var
N1arr: array[0..2] of uint64; // calc xor sect
N2arr: array[0..2] of uint64;
NOutarr: array[0..2] of uint64;
n1arrB: array[0..23] of byte absolute n1arr;
n2arrB: array[0..23] of byte absolute n2arr;
nOutarrB: array[0..23] of byte absolute nOutarr;
.....
Move((Pointer(DataArr[NumBlock,NumData].Data))^, n1arrB[0], SectLen);
Move((Pointer(RuleArr[NumBlock,NumRule].Data))^, n2arrB[0], SectLen);
NOutarr[0] := N1arr[0] xor N2arr[0];
NOutarr[1] := N1arr[1] xor N2arr[1];
NOutarr[2] := N1arr[2] xor N2arr[2];
Move(nOutarrB, (Pointer(OutxorArr))^, SectLen);
Aristarh Dark из 24 байт делается 3 int64 и xor а после выводятся в 24 байта. работает намного быстрее чем прямой перебор. толи в регистр 24 раза загружать, толи 3 .... Но за код спасибо. более красиво получается.
один поток сделан чтобы убедиться что все работает правильно. А уж потом заботливо раскладывать самому себе грабли с делением на потоки.
Для меня задача - как обновить динамический массив в потоке. при условии что поток в suspend. получить правильный и стабильный результат - а потом уже исполнять танец на граблях в в виде распараллеливания и деспечера потоков.