Благодаря бдительности Антона Шелина, после обсуждения в чате
https://t.me/blackbox_20 была внесена правка в компиляторе
Добавлена строчка
Код:
INC(DevCPE.dsize, DevCPM.cacheLineSize);
DevCPM.cacheLineSize установлен размером 64 байта.
DevCPV486.Allocate
Код:
PROCEDURE Allocate*;
VAR gvarSize: INTEGER;
BEGIN
DevCPM.errpos := DevCPT.topScope.adr; (* text position of scope used if error *)
gvarSize := 0;
Variables(DevCPT.topScope.scope, gvarSize); DevCPE.dsize := -gvarSize;
INC(DevCPE.dsize, DevCPM.cacheLineSize);(* gap to prevent cache line share between code and data*)
Objects(DevCPT.topScope.right)
END Allocate;
Модуль для проверки:
Код:
MODULE Test3;
VAR j* : INTEGER;
PROCEDURE Do1*;BEGIN FOR j:=0 TO 100000000-1 DO END;INC(j);END Do1;
PROCEDURE Do2*;BEGIN FOR j:=0 TO 100000000-1 DO END;INC(j);END Do2;
PROCEDURE Do3*;BEGIN FOR j:=0 TO 100000000-1 DO END;INC(j);END Do3;
PROCEDURE Do4*;BEGIN FOR j:=0 TO 100000000-1 DO END;INC(j);END Do4;
END Test3.
Test3.Do1
Test3.Do2
Test3.Do3
Test3.Do4
В старом Блэкбоксе выполнение последней процедуры очень долгое, так как данные и код попадают в одну строчку кэша процессора и он код постоянно из-за этого перезагружает при изменении данных.