Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
03e31c5
Add ability to choose compute API for and Example
Petronous Aug 5, 2026
d867ec5
Refactor Example includes to be compiled separately and linked
Petronous Aug 5, 2026
266f4cb
WIP: Start CLI rewrite
Petronous May 26, 2026
1f7ecfb
Merge branch 'development' of https://github.com/HiPerCoRe/KTT into c…
Petronous Aug 5, 2026
6c3cade
Remove redundant code in CliComponent
Petronous Aug 5, 2026
b04c7c9
Extract RunStats into an independent class
Petronous Aug 5, 2026
4f826c9
Implement CompilerTuningComponent
Petronous Aug 5, 2026
8a0ef54
Propagate change of m_tuner from direct member to unique_ptr
Petronous Aug 5, 2026
4e47851
Propagate CLI rewrite to Reference base classes
Petronous Aug 5, 2026
685b5ad
Integrate CompilerTuningComponent with ExampleBase
Petronous Aug 5, 2026
7cdfe2a
Update CoulombSum3d to use the rewrite
Petronous Aug 5, 2026
3a7de0b
Update RodiniaHotspot to use the rewrite
Petronous Aug 7, 2026
b2d87cd
Correctly indent InitCLI and remove redundant ExampleBase include in …
Petronous Aug 7, 2026
0222e9e
Update the rest of the Examples for the rewrite.
Petronous Aug 7, 2026
cfb7b25
Add choice of compute API when testing with verify_refactor.sh
Petronous Aug 5, 2026
a5562a4
Refactor Example includes to be compiled separately and linked
Petronous Aug 5, 2026
5fe0278
Fix NoCompilerTuning not being used
Petronous Aug 7, 2026
244e523
Merge branch 'cli-rewrite' into examples-refactor
Petronous Aug 10, 2026
c2fca26
Merge remote-tracking branch 'upstream/development' into examples-ref…
Petronous Aug 10, 2026
8f8f65f
Cleanup: Remove commented-out code from CliComponent.h
Petronous Aug 10, 2026
a34a6f6
Add preheating CLI option to ExampleBase
Petronous Aug 10, 2026
e65f821
Add logging level CLI option to ExampleBase
Petronous Aug 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
292 changes: 146 additions & 146 deletions Examples/AtfCCSD/AtfCCSD.cpp

Large diffs are not rendered by default.

92 changes: 46 additions & 46 deletions Examples/AtfConvolution/AtfConvolution.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ using namespace std;

class AtfConvolution : public ExampleBase {
protected:
AtfConvolution(shared_ptr<ExampleConfiguration> config, int defaultProblemSize,
AtfConvolution(int argc, char **argv, int defaultProblemSize,
string exampleFolderPath, string defaultKernelFileBaseName) :
ExampleBase(config, defaultProblemSize, exampleFolderPath, defaultKernelFileBaseName)
ExampleBase(argc, argv, defaultProblemSize, exampleFolderPath, defaultKernelFileBaseName)
{
// Keep OpenCL sizes as specified
m_inputSize1 = static_cast<int>(sqrt(m_problemSize)) * 1024;
m_inputSize2 = m_inputSize1;

m_tuner.SetGlobalSizeType(ktt::GlobalSizeType::OpenCL);
m_tuner->SetGlobalSizeType(ktt::GlobalSizeType::OpenCL);
}

friend ExampleBase;
Expand Down Expand Up @@ -70,9 +70,9 @@ class AtfConvolution : public ExampleBase {

void InitKernel() override
{
m_inId = m_tuner.AddArgumentVector(m_in, ktt::ArgumentAccessType::ReadOnly);
m_outId = m_tuner.AddArgumentVector(m_out, ktt::ArgumentAccessType::ReadWrite);
m_intResId = m_tuner.AddArgumentVector(m_intRes, ktt::ArgumentAccessType::ReadWrite);
m_inId = m_tuner->AddArgumentVector(m_in, ktt::ArgumentAccessType::ReadOnly);
m_outId = m_tuner->AddArgumentVector(m_out, ktt::ArgumentAccessType::ReadWrite);
m_intResId = m_tuner->AddArgumentVector(m_intRes, ktt::ArgumentAccessType::ReadWrite);

InitKernelDefault("gaussian_1", "Convolution", ktt::DimensionVector(), {m_inId, m_outId, m_intResId});
}
Expand Down Expand Up @@ -115,49 +115,49 @@ class AtfConvolution : public ExampleBase {
auto DividesDivConstraint = [](const vector<uint64_t>& v) { return (v[1] / v[2]) % v[0] == 0; };

// Add parameters
m_tuner.AddParameter(m_kernel, "CACHE_L_CB", vector<uint64_t>{0, 1});
m_tuner.AddParameter(m_kernel, "CACHE_P_CB", vector<uint64_t>{0, 1});
m_tuner.AddParameter(m_kernel, "G_CB_RES_DEST_LEVEL", vector<uint64_t>{2});
m_tuner.AddParameter(m_kernel, "L_CB_RES_DEST_LEVEL", vector<uint64_t>{2, 1, 0});
m_tuner.AddParameter(m_kernel, "P_CB_RES_DEST_LEVEL", vector<uint64_t>{2, 1, 0});

m_tuner.AddParameter(m_kernel, "OCL_DIM_L_1", vector<uint64_t>{0, 1});
m_tuner.AddParameter(m_kernel, "OCL_DIM_L_2", vector<uint64_t>{0, 1});

m_tuner.AddParameter(m_kernel, "INPUT_SIZE_L_1", vector<uint64_t>{m_inputSize1 - 4});
m_tuner.AddParameter(m_kernel, "L_CB_SIZE_L_1", ParameterRange(m_inputSize1 - 4));
m_tuner.AddParameter(m_kernel, "P_CB_SIZE_L_1", ParameterRange(m_inputSize1 - 4));
m_tuner.AddParameter(m_kernel, "NUM_WG_L_1", ParameterRange(m_inputSize1 - 4));
m_tuner.AddParameter(m_kernel, "NUM_WI_L_1", ParameterRange(m_inputSize1 - 4));

m_tuner.AddParameter(m_kernel, "INPUT_SIZE_L_2", vector<uint64_t>{m_inputSize2 - 4});
m_tuner.AddParameter(m_kernel, "L_CB_SIZE_L_2", ParameterRange(m_inputSize2 - 4));
m_tuner.AddParameter(m_kernel, "P_CB_SIZE_L_2", ParameterRange(m_inputSize2 - 4));
m_tuner.AddParameter(m_kernel, "NUM_WG_L_2", ParameterRange(m_inputSize2 - 4));
m_tuner.AddParameter(m_kernel, "NUM_WI_L_2", ParameterRange(m_inputSize2 - 4));

m_tuner.AddParameter(m_kernel, "L_REDUCTION", vector<uint64_t>{1});
m_tuner.AddParameter(m_kernel, "P_WRITE_BACK", vector<uint64_t>{0});
m_tuner.AddParameter(m_kernel, "L_WRITE_BACK", vector<uint64_t>{2});
m_tuner->AddParameter(m_kernel, "CACHE_L_CB", vector<uint64_t>{0, 1});
m_tuner->AddParameter(m_kernel, "CACHE_P_CB", vector<uint64_t>{0, 1});
m_tuner->AddParameter(m_kernel, "G_CB_RES_DEST_LEVEL", vector<uint64_t>{2});
m_tuner->AddParameter(m_kernel, "L_CB_RES_DEST_LEVEL", vector<uint64_t>{2, 1, 0});
m_tuner->AddParameter(m_kernel, "P_CB_RES_DEST_LEVEL", vector<uint64_t>{2, 1, 0});

m_tuner->AddParameter(m_kernel, "OCL_DIM_L_1", vector<uint64_t>{0, 1});
m_tuner->AddParameter(m_kernel, "OCL_DIM_L_2", vector<uint64_t>{0, 1});

m_tuner->AddParameter(m_kernel, "INPUT_SIZE_L_1", vector<uint64_t>{m_inputSize1 - 4});
m_tuner->AddParameter(m_kernel, "L_CB_SIZE_L_1", ParameterRange(m_inputSize1 - 4));
m_tuner->AddParameter(m_kernel, "P_CB_SIZE_L_1", ParameterRange(m_inputSize1 - 4));
m_tuner->AddParameter(m_kernel, "NUM_WG_L_1", ParameterRange(m_inputSize1 - 4));
m_tuner->AddParameter(m_kernel, "NUM_WI_L_1", ParameterRange(m_inputSize1 - 4));

m_tuner->AddParameter(m_kernel, "INPUT_SIZE_L_2", vector<uint64_t>{m_inputSize2 - 4});
m_tuner->AddParameter(m_kernel, "L_CB_SIZE_L_2", ParameterRange(m_inputSize2 - 4));
m_tuner->AddParameter(m_kernel, "P_CB_SIZE_L_2", ParameterRange(m_inputSize2 - 4));
m_tuner->AddParameter(m_kernel, "NUM_WG_L_2", ParameterRange(m_inputSize2 - 4));
m_tuner->AddParameter(m_kernel, "NUM_WI_L_2", ParameterRange(m_inputSize2 - 4));

m_tuner->AddParameter(m_kernel, "L_REDUCTION", vector<uint64_t>{1});
m_tuner->AddParameter(m_kernel, "P_WRITE_BACK", vector<uint64_t>{0});
m_tuner->AddParameter(m_kernel, "L_WRITE_BACK", vector<uint64_t>{2});

// Add constraints
m_tuner.AddConstraint(m_kernel, {"G_CB_RES_DEST_LEVEL", "L_CB_RES_DEST_LEVEL", "P_CB_RES_DEST_LEVEL"}, DescendingConstraint);
m_tuner.AddConstraint(m_kernel, {"OCL_DIM_L_1", "OCL_DIM_L_2"}, UnequalConstraint);
m_tuner->AddConstraint(m_kernel, {"G_CB_RES_DEST_LEVEL", "L_CB_RES_DEST_LEVEL", "P_CB_RES_DEST_LEVEL"}, DescendingConstraint);
m_tuner->AddConstraint(m_kernel, {"OCL_DIM_L_1", "OCL_DIM_L_2"}, UnequalConstraint);

m_tuner.AddConstraint(m_kernel, {"L_CB_SIZE_L_1", "INPUT_SIZE_L_1"}, DividesConstraint);
m_tuner.AddConstraint(m_kernel, {"P_CB_SIZE_L_1", "L_CB_SIZE_L_1"}, DividesConstraint);
m_tuner.AddConstraint(m_kernel, {"NUM_WG_L_1", "INPUT_SIZE_L_1", "L_CB_SIZE_L_1"}, DividesDivConstraint);
m_tuner.AddConstraint(m_kernel, {"NUM_WI_L_1", "L_CB_SIZE_L_1", "P_CB_SIZE_L_1"}, DividesDivConstraint);
m_tuner.AddConstraint(m_kernel, {"NUM_WI_L_1", "INPUT_SIZE_L_1", "NUM_WG_L_1"}, LessThanOrEqualCeilDivConstraint);
m_tuner->AddConstraint(m_kernel, {"L_CB_SIZE_L_1", "INPUT_SIZE_L_1"}, DividesConstraint);
m_tuner->AddConstraint(m_kernel, {"P_CB_SIZE_L_1", "L_CB_SIZE_L_1"}, DividesConstraint);
m_tuner->AddConstraint(m_kernel, {"NUM_WG_L_1", "INPUT_SIZE_L_1", "L_CB_SIZE_L_1"}, DividesDivConstraint);
m_tuner->AddConstraint(m_kernel, {"NUM_WI_L_1", "L_CB_SIZE_L_1", "P_CB_SIZE_L_1"}, DividesDivConstraint);
m_tuner->AddConstraint(m_kernel, {"NUM_WI_L_1", "INPUT_SIZE_L_1", "NUM_WG_L_1"}, LessThanOrEqualCeilDivConstraint);

m_tuner.AddConstraint(m_kernel, {"L_CB_SIZE_L_2", "INPUT_SIZE_L_2"}, DividesConstraint);
m_tuner.AddConstraint(m_kernel, {"P_CB_SIZE_L_2", "L_CB_SIZE_L_2"}, DividesConstraint);
m_tuner.AddConstraint(m_kernel, {"NUM_WG_L_2", "INPUT_SIZE_L_2", "L_CB_SIZE_L_2"}, DividesDivConstraint);
m_tuner.AddConstraint(m_kernel, {"NUM_WI_L_2", "L_CB_SIZE_L_2", "P_CB_SIZE_L_2"}, DividesDivConstraint);
m_tuner.AddConstraint(m_kernel, {"NUM_WI_L_2", "INPUT_SIZE_L_2", "NUM_WG_L_2"}, LessThanOrEqualCeilDivConstraint);
m_tuner->AddConstraint(m_kernel, {"L_CB_SIZE_L_2", "INPUT_SIZE_L_2"}, DividesConstraint);
m_tuner->AddConstraint(m_kernel, {"P_CB_SIZE_L_2", "L_CB_SIZE_L_2"}, DividesConstraint);
m_tuner->AddConstraint(m_kernel, {"NUM_WG_L_2", "INPUT_SIZE_L_2", "L_CB_SIZE_L_2"}, DividesDivConstraint);
m_tuner->AddConstraint(m_kernel, {"NUM_WI_L_2", "L_CB_SIZE_L_2", "P_CB_SIZE_L_2"}, DividesDivConstraint);
m_tuner->AddConstraint(m_kernel, {"NUM_WI_L_2", "INPUT_SIZE_L_2", "NUM_WG_L_2"}, LessThanOrEqualCeilDivConstraint);

// Thread modifiers for global X dimension
m_tuner.AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Global, ktt::ModifierDimension::X,
m_tuner->AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Global, ktt::ModifierDimension::X,
{"OCL_DIM_L_1", "NUM_WG_L_1", "NUM_WI_L_1", "OCL_DIM_L_2", "NUM_WG_L_2", "NUM_WI_L_2"},
[](const uint64_t, const vector<uint64_t>& values)
{
Expand All @@ -166,7 +166,7 @@ class AtfConvolution : public ExampleBase {
});

// Thread modifiers for global Y dimension
m_tuner.AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Global, ktt::ModifierDimension::Y,
m_tuner->AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Global, ktt::ModifierDimension::Y,
{"OCL_DIM_L_1", "NUM_WG_L_1", "NUM_WI_L_1", "OCL_DIM_L_2", "NUM_WG_L_2", "NUM_WI_L_2"},
[](const uint64_t, const vector<uint64_t>& values)
{
Expand All @@ -175,7 +175,7 @@ class AtfConvolution : public ExampleBase {
});

// Thread modifiers for local X dimension
m_tuner.AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Local, ktt::ModifierDimension::X,
m_tuner->AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Local, ktt::ModifierDimension::X,
{"OCL_DIM_L_1", "NUM_WI_L_1", "OCL_DIM_L_2", "NUM_WI_L_2"},
[](const uint64_t, const vector<uint64_t>& values)
{
Expand All @@ -184,7 +184,7 @@ class AtfConvolution : public ExampleBase {
});

// Thread modifiers for local Y dimension
m_tuner.AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Local, ktt::ModifierDimension::Y,
m_tuner->AddThreadModifier(m_kernel, {m_definition}, ktt::ModifierType::Local, ktt::ModifierDimension::Y,
{"OCL_DIM_L_1", "NUM_WI_L_1", "OCL_DIM_L_2", "NUM_WI_L_2"},
[](const uint64_t, const vector<uint64_t>& values)
{
Expand Down
Loading