Skip to content

Commit 6673730

Browse files
committed
Add benchmark
1 parent db74ec1 commit 6673730

8 files changed

+136
-37
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Copyright Voxel Plugin, Inc. All Rights Reserved.
2+
3+
#include "VoxelCoreBenchmarkCommandlet.h"
4+
#include "VoxelWelfordVariance.h"
5+
6+
static void RunBenchmark(
7+
const FString& Name,
8+
TVoxelUniqueFunction<void()> EngineExecute,
9+
TVoxelUniqueFunction<void()> VoxelExecute)
10+
{
11+
TVoxelWelfordVariance<double> EngineTime;
12+
for (int32 Run = 0; Run < 1000; Run++)
13+
{
14+
const double StartTime = FPlatformTime::Seconds();
15+
EngineExecute();
16+
const double EndTime = FPlatformTime::Seconds();
17+
18+
EngineTime.Add(EndTime - StartTime);
19+
}
20+
21+
TVoxelWelfordVariance<double> VoxelTime;
22+
for (int32 Run = 0; Run < 1000; Run++)
23+
{
24+
const double StartTime = FPlatformTime::Seconds();
25+
VoxelExecute();
26+
const double EndTime = FPlatformTime::Seconds();
27+
28+
VoxelTime.Add(EndTime - StartTime);
29+
}
30+
31+
LOG_VOXEL(Display, "%s: Engine: %.3fus ~ %.3f Voxel: %.3fus ~ %.3f ----- %2.1f%% faster",
32+
*Name,
33+
EngineTime.Average * 1000000,
34+
EngineTime.GetStd() * 1000000,
35+
VoxelTime.Average * 1000000,
36+
VoxelTime.GetStd() * 1000000,
37+
(EngineTime.Average - VoxelTime.Average) / EngineTime.Average * 100);
38+
}
39+
40+
int32 UVoxelCoreBenchmarkCommandlet::Main(const FString& Params)
41+
{
42+
LOG_VOXEL(Display, "####################################################");
43+
LOG_VOXEL(Display, "####################################################");
44+
LOG_VOXEL(Display, "####################################################");
45+
LOG_VOXEL(Display, "VOXEL_DEBUG=%d", VOXEL_DEBUG);
46+
47+
FString OSLabel, OSVersion;
48+
FPlatformMisc::GetOSVersions(OSLabel, OSVersion);
49+
LOG_VOXEL(Display, "OS: %s (%s)", *OSLabel, *OSVersion);
50+
LOG_VOXEL(Display, "CPU: %s", *FPlatformMisc::GetCPUBrand());
51+
LOG_VOXEL(Display, "GPU: %s", *FPlatformMisc::GetPrimaryGPUBrand());
52+
53+
LOG_VOXEL(Display, "####################################################");
54+
LOG_VOXEL(Display, "####################################################");
55+
LOG_VOXEL(Display, "####################################################");
56+
57+
RunBenchmark(
58+
"Calling function 1000 times",
59+
[]
60+
{
61+
int32 Time = 0;
62+
const TFunction<void()> Function = [&] { Time++; };
63+
64+
for (int32 Run = 0; Run < 1000; Run++)
65+
{
66+
Function();
67+
}
68+
69+
check(Time == 1000);
70+
},
71+
[]
72+
{
73+
int32 Time = 0;
74+
const TVoxelUniqueFunction<void()> Function = [&] { Time++; };
75+
76+
for (int32 Run = 0; Run < 1000; Run++)
77+
{
78+
Function();
79+
}
80+
81+
check(Time == 1000);
82+
});
83+
84+
while (true)
85+
{
86+
FPlatformProcess::Sleep(1);
87+
}
88+
89+
return Super::Main(Params);
90+
}

Source/VoxelCore/Private/VoxelMinimal/Utilities/VoxelArrayUtilities.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
// Copyright Voxel Plugin, Inc. All Rights Reserved.
22

33
#include "VoxelMinimal.h"
4-
#include "VoxelBaseUtilitiesImpl.ispc.generated.h"
4+
#include "VoxelArrayUtilitiesImpl.ispc.generated.h"
55

66
bool FVoxelUtilities::AllEqual(const uint8 Value, const TConstArrayView<uint8> Data)
77
{
8-
return ispc::BaseUtilities_AllEqual_uint8(Value, Data.GetData(), Data.Num());
8+
return ispc::ArrayUtilities_AllEqual_uint8(Value, Data.GetData(), Data.Num());
99
}
1010

1111
bool FVoxelUtilities::AllEqual(const uint16 Value, const TConstArrayView<uint16> Data)
1212
{
13-
return ispc::BaseUtilities_AllEqual_uint16(Value, Data.GetData(), Data.Num());
13+
return ispc::ArrayUtilities_AllEqual_uint16(Value, Data.GetData(), Data.Num());
1414
}
1515

1616
bool FVoxelUtilities::AllEqual(const uint32 Value, const TConstArrayView<uint32> Data)
1717
{
18-
return ispc::BaseUtilities_AllEqual_uint32(Value, Data.GetData(), Data.Num());
18+
return ispc::ArrayUtilities_AllEqual_uint32(Value, Data.GetData(), Data.Num());
1919
}
2020

2121
bool FVoxelUtilities::AllEqual(const uint64 Value, const TConstArrayView<uint64> Data)
2222
{
23-
return ispc::BaseUtilities_AllEqual_uint64(Value, Data.GetData(), Data.Num());
23+
return ispc::ArrayUtilities_AllEqual_uint64(Value, Data.GetData(), Data.Num());
2424
}
2525

2626
///////////////////////////////////////////////////////////////////////////////
@@ -34,7 +34,7 @@ float FVoxelUtilities::GetMin(const TConstArrayView<float> Data)
3434
return 0.f;
3535
}
3636

37-
return ispc::BaseUtilities_GetMin(Data.GetData(), Data.Num());
37+
return ispc::ArrayUtilities_GetMin(Data.GetData(), Data.Num());
3838
}
3939

4040
float FVoxelUtilities::GetMax(const TConstArrayView<float> Data)
@@ -44,7 +44,7 @@ float FVoxelUtilities::GetMax(const TConstArrayView<float> Data)
4444
return 0.f;
4545
}
4646

47-
return ispc::BaseUtilities_GetMax(Data.GetData(), Data.Num());
47+
return ispc::ArrayUtilities_GetMax(Data.GetData(), Data.Num());
4848
}
4949

5050
///////////////////////////////////////////////////////////////////////////////
@@ -59,7 +59,7 @@ FInt32Interval FVoxelUtilities::GetMinMax(const TConstArrayView<int32> Data)
5959
}
6060

6161
FInt32Interval Result;
62-
ispc::BaseUtilities_GetMinMax_Int32(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
62+
ispc::ArrayUtilities_GetMinMax_Int32(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
6363
return Result;
6464
}
6565

@@ -71,7 +71,7 @@ FFloatInterval FVoxelUtilities::GetMinMax(const TConstArrayView<float> Data)
7171
}
7272

7373
FFloatInterval Result;
74-
ispc::BaseUtilities_GetMinMax_Float(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
74+
ispc::ArrayUtilities_GetMinMax_Float(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
7575
return Result;
7676
}
7777

@@ -87,7 +87,7 @@ FFloatInterval FVoxelUtilities::GetMinMaxSafe(const TConstArrayView<float> Data)
8787
}
8888

8989
FFloatInterval Result;
90-
ispc::BaseUtilities_GetMinMaxSafe_Float(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
90+
ispc::ArrayUtilities_GetMinMaxSafe_Float(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
9191
return Result;
9292
}
9393

@@ -99,6 +99,6 @@ FDoubleInterval FVoxelUtilities::GetMinMaxSafe(const TConstArrayView<double> Dat
9999
}
100100

101101
FDoubleInterval Result;
102-
ispc::BaseUtilities_GetMinMaxSafe_Double(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
102+
ispc::ArrayUtilities_GetMinMaxSafe_Double(Data.GetData(), Data.Num(), &Result.Min, &Result.Max);
103103
return Result;
104104
}

Source/VoxelCore/Private/VoxelMinimal/Utilities/VoxelBaseUtilitiesImpl.ispc renamed to Source/VoxelCore/Private/VoxelMinimal/Utilities/VoxelArrayUtilitiesImpl.ispc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include "VoxelMinimal.isph"
44

5-
export uniform bool BaseUtilities_AllEqual_uint8(
5+
export uniform bool ArrayUtilities_AllEqual_uint8(
66
const uniform uint8 Constant,
77
const uniform uint8 Data[],
88
const uniform int32 Num)
@@ -28,7 +28,7 @@ export uniform bool BaseUtilities_AllEqual_uint8(
2828
return true;
2929
}
3030

31-
export uniform bool BaseUtilities_AllEqual_uint16(
31+
export uniform bool ArrayUtilities_AllEqual_uint16(
3232
const uniform uint16 Constant,
3333
const uniform uint16 Data[],
3434
const uniform int32 Num)
@@ -54,7 +54,7 @@ export uniform bool BaseUtilities_AllEqual_uint16(
5454
return true;
5555
}
5656

57-
export uniform bool BaseUtilities_AllEqual_uint32(
57+
export uniform bool ArrayUtilities_AllEqual_uint32(
5858
const uniform uint32 Constant,
5959
const uniform uint32 Data[],
6060
const uniform int32 Num)
@@ -80,7 +80,7 @@ export uniform bool BaseUtilities_AllEqual_uint32(
8080
return true;
8181
}
8282

83-
export uniform bool BaseUtilities_AllEqual_uint64(
83+
export uniform bool ArrayUtilities_AllEqual_uint64(
8484
const uniform uint64 Constant,
8585
const uniform uint64 Data[],
8686
const uniform int32 Num)
@@ -110,7 +110,7 @@ export uniform bool BaseUtilities_AllEqual_uint64(
110110
///////////////////////////////////////////////////////////////////////////////
111111
///////////////////////////////////////////////////////////////////////////////
112112

113-
export uniform float BaseUtilities_GetMin(
113+
export uniform float ArrayUtilities_GetMin(
114114
const uniform float Values[],
115115
const uniform int32 Num)
116116
{
@@ -138,7 +138,7 @@ export uniform float BaseUtilities_GetMin(
138138
return Result;
139139
}
140140

141-
export uniform float BaseUtilities_GetMax(
141+
export uniform float ArrayUtilities_GetMax(
142142
const uniform float Values[],
143143
const uniform int32 Num)
144144
{
@@ -166,7 +166,7 @@ export uniform float BaseUtilities_GetMax(
166166
return Result;
167167
}
168168

169-
export void BaseUtilities_GetMinMax_Int32(
169+
export void ArrayUtilities_GetMinMax_Int32(
170170
const uniform int32 Values[],
171171
const uniform int32 Num,
172172
int32* uniform OutMin,
@@ -206,7 +206,7 @@ export void BaseUtilities_GetMinMax_Int32(
206206
*OutMax = MaxResult;
207207
}
208208

209-
export void BaseUtilities_GetMinMax_Float(
209+
export void ArrayUtilities_GetMinMax_Float(
210210
const uniform float Values[],
211211
const uniform int32 Num,
212212
float* uniform OutMin,
@@ -246,7 +246,7 @@ export void BaseUtilities_GetMinMax_Float(
246246
*OutMax = MaxResult;
247247
}
248248

249-
export void BaseUtilities_GetMinMaxSafe_Float(
249+
export void ArrayUtilities_GetMinMaxSafe_Float(
250250
const uniform float Values[],
251251
const uniform int32 Num,
252252
float* uniform OutMin,
@@ -296,7 +296,7 @@ export void BaseUtilities_GetMinMaxSafe_Float(
296296
*OutMax = MaxResult;
297297
}
298298

299-
export void BaseUtilities_GetMinMaxSafe_Double(
299+
export void ArrayUtilities_GetMinMaxSafe_Double(
300300
const uniform double Values[],
301301
const uniform int32 Num,
302302
double* uniform OutMin,

Source/VoxelCore/Private/VoxelMinimal/Utilities/VoxelSystemUtilities.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ IPlugin& FVoxelSystemUtilities::GetPlugin()
3131
{
3232
static TSharedPtr<IPlugin> Plugin = IPluginManager::Get().FindPlugin("Voxel");
3333
if (!Plugin)
34+
{
35+
Plugin = IPluginManager::Get().FindPlugin("VoxelCore");
36+
}
37+
if (!Plugin)
3438
{
3539
Plugin = IPluginManager::Get().FindPlugin("Voxel-dev");
3640
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright Voxel Plugin, Inc. All Rights Reserved.
2+
3+
#pragma once
4+
5+
#include "VoxelMinimal.h"
6+
#include "Commandlets/Commandlet.h"
7+
#include "VoxelCoreBenchmarkCommandlet.generated.h"
8+
9+
UCLASS()
10+
class UVoxelCoreBenchmarkCommandlet : public UCommandlet
11+
{
12+
GENERATED_BODY()
13+
14+
public:
15+
virtual int32 Main(const FString& Params) override;
16+
};

Source/VoxelCore/Public/VoxelWelfordVariance.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,8 @@ struct TVoxelWelfordVariance
3232
return ScaledVariance / (Num - 1);
3333
}
3434
}
35+
FORCEINLINE T GetStd() const
36+
{
37+
return FMath::Sqrt(GetVariance());
38+
}
3539
};

Source/VoxelCore/VoxelCore.Build.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,6 @@ public ModuleRules_Voxel(ReadOnlyTargetRules Target) : base(Target)
8686
if (GetType().Name != "VoxelCore")
8787
{
8888
PublicDependencyModuleNames.Add("VoxelCore");
89-
90-
if (GetType().Name != "VoxelGraphCore")
91-
{
92-
PublicDependencyModuleNames.Add("VoxelGraphCore");
93-
}
9489
}
9590

9691
if (GetType().Name.EndsWith("Editor"))
@@ -102,9 +97,7 @@ public ModuleRules_Voxel(ReadOnlyTargetRules Target) : base(Target)
10297
"SlateCore",
10398
"EditorStyle",
10499
"PropertyEditor",
105-
#if UE_5_0_OR_LATER
106100
"EditorFramework",
107-
#endif
108101
}
109102
);
110103

@@ -143,9 +136,7 @@ public ModuleRules_Voxel(ReadOnlyTargetRules Target) : base(Target)
143136
"Intermediate",
144137
"Build",
145138
Target.Platform.ToString(),
146-
#if UE_5_2_OR_LATER
147139
"x64",
148-
#endif
149140
Target.bBuildEditor ? "UnrealEditor" : "UnrealGame",
150141
Target.Configuration.ToString(),
151142
GetType().Name));
@@ -157,11 +148,7 @@ public class VoxelCore : ModuleRules_Voxel
157148
{
158149
public VoxelCore(ReadOnlyTargetRules Target) : base(Target)
159150
{
160-
#if UE_5_2_OR_LATER
161151
IWYUSupport = IWYUSupport.None;
162-
#else
163-
bEnforceIWYU = false;
164-
#endif
165152

166153
if (!bUseUnity &&
167154
!bStrictIncludes)
@@ -209,7 +196,6 @@ public VoxelCore(ReadOnlyTargetRules Target) : base(Target)
209196
"HTTP",
210197
"Slate",
211198
"SlateCore",
212-
"Landscape",
213199
}
214200
);
215201

@@ -218,7 +204,6 @@ public VoxelCore(ReadOnlyTargetRules Target) : base(Target)
218204
PrivateDependencyModuleNames.AddRange(
219205
new string[]
220206
{
221-
"DesktopPlatform",
222207
"UATHelper",
223208
}
224209
);

VoxelCore.uplugin

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
{
2525
"Name": "VoxelCoreEditor",
2626
"Type": "Editor",
27-
"LoadingPhase": "PostEngineInit"
27+
"LoadingPhase": "Default"
2828
}
2929
]
3030
}

0 commit comments

Comments
 (0)