Skip to content

Commit adf85e3

Browse files
authored
Merge pull request #166 from georges-hatem/main
init on the main thread seems faster?
2 parents 5a28640 + d09eabb commit adf85e3

File tree

2 files changed

+10
-18
lines changed

2 files changed

+10
-18
lines changed

entries/ghatem-fpc/src/OneBRC-parts-largerec.lpr

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ TOneBRC = class
119119
// for a line between idx [aStart; aEnd], returns the station-name length, and the integer-value of temperature
120120
procedure ExtractLineData(const aStart: Int64; const aEnd: Int64; out aLength: ShortInt; out aTemp: SmallInt); {$IFNDEF VALGRIND} inline; {$ENDIF}
121121
procedure GetNextPart (var aStart, aEnd: Int64);
122-
procedure InitMinMax (const aThreadNb: TThreadCount);
122+
procedure InitMinMax (const aThreadNb: TThreadCount); inline;
123123

124124
public
125125
constructor Create (const aThreadCount: TThreadCount);
@@ -148,20 +148,18 @@ TOneBRC = class
148148

149149
TThreadProc = procedure (aThreadNb: TThreadCount; aStartIdx: Int64; aEndIdx: Int64) of object;
150150
TGetNextPart = procedure (var aStart, aEnd: Int64) of object;
151-
TInitMinMax = procedure (const aThreadNb: TThreadCount) of object;
152151

153152
TBRCThread = class (TThread)
154153
private
155154
FProc: TThreadProc;
156155
FGetNextPart: TGetNextPart;
157-
FInitMinMax: TInitMinMax;
158156
FThreadNb: TThreadCount;
159157
FStart: Int64;
160158
FEnd: Int64;
161159
protected
162160
procedure Execute; override;
163161
public
164-
constructor Create (aProc: TThreadProc; aGetNextPart: TGetNextPart; aInitMinMax: TInitMinMax;
162+
constructor Create (aProc: TThreadProc; aGetNextPart: TGetNextPart;
165163
aThreadNb: TThreadCount; aStart: Int64; aEnd: Int64);
166164
end;
167165

@@ -439,7 +437,8 @@ procedure TOneBRC.DispatchThreads;
439437
FDone := cPart * FThreadCount;
440438

441439
for I := 0 to FThreadCount - 1 do begin
442-
FThreads[I] := TBRCThread.Create (@ProcessData, @GetNextPart, @InitMinMax, I, I*cPart, (I+1)*cPart);
440+
InitMinMax(I);
441+
FThreads[I] := TBRCThread.Create (@ProcessData, @GetNextPart, I, I*cPart, (I+1)*cPart);
443442
end;
444443
end;
445444

@@ -668,22 +667,19 @@ procedure TOneBRC.GenerateOutput;
668667

669668
procedure TBRCThread.Execute;
670669
begin
671-
FInitMinMax (FThreadNb);
672-
673670
while true do begin
674671
FProc (FThreadNb, FStart, FEnd);
675672
FGetNextPart(FStart, FEnd);
676673
if FStart = -1 then break;
677674
end;
678675
end;
679676

680-
constructor TBRCThread.Create(aProc: TThreadProc; aGetNextPart: TGetNextPart; aInitMinMax: TInitMinMax;
677+
constructor TBRCThread.Create(aProc: TThreadProc; aGetNextPart: TGetNextPart;
681678
aThreadNb: TThreadCount; aStart: Int64; aEnd: Int64);
682679
begin
683680
inherited Create(False);
684681
FProc := aProc;
685682
FGetNextPart := aGetNextPart;
686-
FInitMinMax := aInitMinMax;
687683
FThreadNb := aThreadNb;
688684
FStart := aStart;
689685
FEnd := aEnd;

entries/ghatem-fpc/src/OneBRC-parts.lpr

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ TOneBRC = class
119119
// for a line between idx [aStart; aEnd], returns the station-name length, and the integer-value of temperature
120120
procedure ExtractLineData(const aStart: Int64; const aEnd: Int64; out aLength: ShortInt; out aTemp: SmallInt); {$IFNDEF VALGRIND} inline; {$ENDIF}
121121
procedure GetNextPart (var aStart, aEnd: Int64);
122-
procedure InitMinMax (const aThreadNb: TThreadCount);
122+
procedure InitMinMax (const aThreadNb: TThreadCount); inline;
123123

124124
public
125125
constructor Create (const aThreadCount: TThreadCount);
@@ -148,20 +148,18 @@ TOneBRC = class
148148

149149
TThreadProc = procedure (aThreadNb: TThreadCount; aStartIdx: Int64; aEndIdx: Int64) of object;
150150
TGetNextPart = procedure (var aStart, aEnd: Int64) of object;
151-
TInitMinMax = procedure (const aThreadNb: TThreadCount) of object;
152151

153152
TBRCThread = class (TThread)
154153
private
155154
FProc: TThreadProc;
156155
FGetNextPart: TGetNextPart;
157-
FInitMinMax: TInitMinMax;
158156
FThreadNb: TThreadCount;
159157
FStart: Int64;
160158
FEnd: Int64;
161159
protected
162160
procedure Execute; override;
163161
public
164-
constructor Create (aProc: TThreadProc; aGetNextPart: TGetNextPart; aInitMinMax: TInitMinMax;
162+
constructor Create (aProc: TThreadProc; aGetNextPart: TGetNextPart;
165163
aThreadNb: TThreadCount; aStart: Int64; aEnd: Int64);
166164
end;
167165

@@ -439,7 +437,8 @@ procedure TOneBRC.DispatchThreads;
439437
FDone := cPart * FThreadCount;
440438

441439
for I := 0 to FThreadCount - 1 do begin
442-
FThreads[I] := TBRCThread.Create (@ProcessData, @GetNextPart, @InitMinMax, I, I*cPart, (I+1)*cPart);
440+
InitMinMax(I);
441+
FThreads[I] := TBRCThread.Create (@ProcessData, @GetNextPart, I, I*cPart, (I+1)*cPart);
443442
end;
444443
end;
445444

@@ -668,22 +667,19 @@ procedure TOneBRC.GenerateOutput;
668667

669668
procedure TBRCThread.Execute;
670669
begin
671-
FInitMinMax (FThreadNb);
672-
673670
while true do begin
674671
FProc (FThreadNb, FStart, FEnd);
675672
FGetNextPart(FStart, FEnd);
676673
if FStart = -1 then break;
677674
end;
678675
end;
679676

680-
constructor TBRCThread.Create(aProc: TThreadProc; aGetNextPart: TGetNextPart; aInitMinMax: TInitMinMax;
677+
constructor TBRCThread.Create(aProc: TThreadProc; aGetNextPart: TGetNextPart;
681678
aThreadNb: TThreadCount; aStart: Int64; aEnd: Int64);
682679
begin
683680
inherited Create(False);
684681
FProc := aProc;
685682
FGetNextPart := aGetNextPart;
686-
FInitMinMax := aInitMinMax;
687683
FThreadNb := aThreadNb;
688684
FStart := aStart;
689685
FEnd := aEnd;

0 commit comments

Comments
 (0)