Показать сообщение отдельно
  #4  
Старый 19.08.2023, 09:02
stalkernet stalkernet вне форума
Прохожий
 
Регистрация: 15.10.2017
Сообщения: 6
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Код:
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. получить правильный и стабильный результат - а потом уже исполнять танец на граблях в в виде распараллеливания и деспечера потоков.
Ответить с цитированием