Reformat
This commit is contained in:
parent
1d2d33b269
commit
1d1018fa0c
22 changed files with 326 additions and 259 deletions
|
|
@ -7,7 +7,7 @@ TEST(TestDestroy, TestDestroyTensorSingle)
|
|||
{
|
||||
std::shared_ptr<kp::TensorT<float>> tensorA = nullptr;
|
||||
|
||||
std::string shader(R"(
|
||||
std::string shader(R"(
|
||||
#version 450
|
||||
layout (local_size_x = 1) in;
|
||||
layout(set = 0, binding = 0) buffer a { float pa[]; };
|
||||
|
|
|
|||
|
|
@ -20,13 +20,17 @@ TEST(TestLogisticRegression, TestMainLogisticRegression)
|
|||
std::shared_ptr<kp::TensorT<float>> y = mgr.tensor({ 0, 0, 0, 1, 1 });
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> wIn = mgr.tensor({ 0.001, 0.001 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutI = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutJ = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutI =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutJ =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> bIn = mgr.tensor({ 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> bOut = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> bOut =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> lOut = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> lOut =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
|
||||
std::vector<std::shared_ptr<kp::Tensor>> params = { xI, xJ, y,
|
||||
wIn, wOutI, wOutJ,
|
||||
|
|
@ -95,14 +99,18 @@ TEST(TestLogisticRegression, TestMainLogisticRegressionManualCopy)
|
|||
|
||||
std::shared_ptr<kp::TensorT<float>> wIn =
|
||||
mgr.tensor({ 0.001, 0.001 }, kp::Tensor::TensorTypes::eHost);
|
||||
std::shared_ptr<kp::TensorT<float>> wOutI = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutJ = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutI =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> wOutJ =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> bIn =
|
||||
mgr.tensor({ 0 }, kp::Tensor::TensorTypes::eHost);
|
||||
std::shared_ptr<kp::TensorT<float>> bOut = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> bOut =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> lOut = mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> lOut =
|
||||
mgr.tensor({ 0, 0, 0, 0, 0 });
|
||||
|
||||
std::vector<std::shared_ptr<kp::Tensor>> params = { xI, xJ, y,
|
||||
wIn, wOutI, wOutJ,
|
||||
|
|
|
|||
|
|
@ -50,8 +50,11 @@ TEST(TestMultipleAlgoExecutions, TestEndToEndFunctionality)
|
|||
kp::Constants pushConstsA({ 2.0 });
|
||||
kp::Constants pushConstsB({ 3.0 });
|
||||
|
||||
auto algorithm = mgr.algorithm(
|
||||
params, kp::Shader::compileSource(shader), workgroup, specConsts, pushConstsA);
|
||||
auto algorithm = mgr.algorithm(params,
|
||||
kp::Shader::compileSource(shader),
|
||||
workgroup,
|
||||
specConsts,
|
||||
pushConstsA);
|
||||
|
||||
// 3. Run operation with string shader synchronously
|
||||
mgr.sequence()
|
||||
|
|
@ -202,4 +205,3 @@ TEST(TestMultipleAlgoExecutions, SingleRecordMultipleEval)
|
|||
|
||||
EXPECT_EQ(tensorA->vector(), std::vector<float>({ 3, 3, 3 }));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ TEST(TestOpAlgoCreate, ShaderCompiledDataFromConstructor)
|
|||
//{
|
||||
// kp::Manager mgr;
|
||||
//
|
||||
// std::shared_ptr<kp::TensorT<float>> tensorA{ new kp::Tensor({ 3, 4, 5 }) };
|
||||
// std::shared_ptr<kp::TensorT<float>> tensorB{ new kp::Tensor({ 0, 0, 0 }) };
|
||||
// mgr.rebuild({ tensorA, tensorB });
|
||||
// std::shared_ptr<kp::TensorT<float>> tensorA{ new kp::Tensor({ 3, 4, 5 })
|
||||
// }; std::shared_ptr<kp::TensorT<float>> tensorB{ new kp::Tensor({ 0, 0, 0
|
||||
// }) }; mgr.rebuild({ tensorA, tensorB });
|
||||
//
|
||||
// mgr.evalOpDefault<kp::OpAlgoCreate>(
|
||||
// { tensorA, tensorB },
|
||||
|
|
|
|||
|
|
@ -29,15 +29,17 @@ TEST(TestPushConstants, TestConstantsAlgoDispatchOverride)
|
|||
{
|
||||
kp::Manager mgr;
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> tensor = mgr.tensor({ 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensor =
|
||||
mgr.tensor({ 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::Algorithm> algo =
|
||||
mgr.algorithm({ tensor }, spirv, kp::Workgroup({ 1 }), {}, { 0.0, 0.0, 0.0 });
|
||||
std::shared_ptr<kp::Algorithm> algo = mgr.algorithm(
|
||||
{ tensor }, spirv, kp::Workgroup({ 1 }), {}, { 0.0, 0.0, 0.0 });
|
||||
|
||||
sq = mgr.sequence()->eval<kp::OpTensorSyncDevice>({ tensor });
|
||||
|
||||
// We need to run this in sequence to avoid race condition
|
||||
// We can't use atomicAdd as swiftshader doesn't support it for float
|
||||
// We can't use atomicAdd as swiftshader doesn't support it for
|
||||
// float
|
||||
sq->eval<kp::OpAlgoDispatch>(algo, kp::Constants{ 0.1, 0.2, 0.3 });
|
||||
sq->eval<kp::OpAlgoDispatch>(algo, kp::Constants{ 0.3, 0.2, 0.1 });
|
||||
sq->eval<kp::OpTensorSyncLocal>({ tensor });
|
||||
|
|
@ -72,15 +74,17 @@ TEST(TestPushConstants, TestConstantsAlgoDispatchNoOverride)
|
|||
{
|
||||
kp::Manager mgr;
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> tensor = mgr.tensor({ 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensor =
|
||||
mgr.tensor({ 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::Algorithm> algo =
|
||||
mgr.algorithm({ tensor }, spirv, kp::Workgroup({ 1 }), {}, { 0.1, 0.2, 0.3 });
|
||||
std::shared_ptr<kp::Algorithm> algo = mgr.algorithm(
|
||||
{ tensor }, spirv, kp::Workgroup({ 1 }), {}, { 0.1, 0.2, 0.3 });
|
||||
|
||||
sq = mgr.sequence()->eval<kp::OpTensorSyncDevice>({ tensor });
|
||||
|
||||
// We need to run this in sequence to avoid race condition
|
||||
// We can't use atomicAdd as swiftshader doesn't support it for float
|
||||
// We can't use atomicAdd as swiftshader doesn't support it for
|
||||
// float
|
||||
sq->eval<kp::OpAlgoDispatch>(algo);
|
||||
sq->eval<kp::OpAlgoDispatch>(algo, kp::Constants{ 0.3, 0.2, 0.1 });
|
||||
sq->eval<kp::OpTensorSyncLocal>({ tensor });
|
||||
|
|
@ -115,15 +119,17 @@ TEST(TestPushConstants, TestConstantsWrongSize)
|
|||
{
|
||||
kp::Manager mgr;
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> tensor = mgr.tensor({ 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensor =
|
||||
mgr.tensor({ 0, 0, 0 });
|
||||
|
||||
std::shared_ptr<kp::Algorithm> algo =
|
||||
mgr.algorithm({ tensor }, spirv, kp::Workgroup({ 1 }), {}, { 0.0 });
|
||||
std::shared_ptr<kp::Algorithm> algo = mgr.algorithm(
|
||||
{ tensor }, spirv, kp::Workgroup({ 1 }), {}, { 0.0 });
|
||||
|
||||
sq = mgr.sequence()
|
||||
->record<kp::OpTensorSyncDevice>({ tensor });
|
||||
sq = mgr.sequence()->record<kp::OpTensorSyncDevice>({ tensor });
|
||||
|
||||
EXPECT_THROW(sq->record<kp::OpAlgoDispatch>(algo, kp::Constants{ 0.1, 0.2, 0.3 }), std::runtime_error);
|
||||
EXPECT_THROW(sq->record<kp::OpAlgoDispatch>(
|
||||
algo, kp::Constants{ 0.1, 0.2, 0.3 }),
|
||||
std::runtime_error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,9 +60,9 @@ TEST(TestSequence, RerecordSequence)
|
|||
|
||||
std::shared_ptr<kp::Sequence> sq = mgr.sequence();
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> tensorA = mgr.tensor({1, 2, 3});
|
||||
std::shared_ptr<kp::TensorT<float>> tensorB = mgr.tensor({2, 2, 2});
|
||||
std::shared_ptr<kp::TensorT<float>> tensorOut = mgr.tensor({0, 0, 0});
|
||||
std::shared_ptr<kp::TensorT<float>> tensorA = mgr.tensor({ 1, 2, 3 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensorB = mgr.tensor({ 2, 2, 2 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensorOut = mgr.tensor({ 0, 0, 0 });
|
||||
|
||||
sq->eval<kp::OpTensorSyncDevice>({ tensorA, tensorB, tensorOut });
|
||||
|
||||
|
|
@ -83,25 +83,24 @@ TEST(TestSequence, RerecordSequence)
|
|||
)");
|
||||
|
||||
std::shared_ptr<kp::Algorithm> algo =
|
||||
mgr.algorithm({tensorA, tensorB, tensorOut}, spirv);
|
||||
mgr.algorithm({ tensorA, tensorB, tensorOut }, spirv);
|
||||
|
||||
sq->record<kp::OpAlgoDispatch>(algo)
|
||||
->record<kp::OpTensorSyncLocal>({tensorA, tensorB, tensorOut});
|
||||
sq->record<kp::OpAlgoDispatch>(algo)->record<kp::OpTensorSyncLocal>(
|
||||
{ tensorA, tensorB, tensorOut });
|
||||
|
||||
sq->eval();
|
||||
|
||||
EXPECT_EQ(tensorOut->vector(), std::vector<float>({2, 4, 6}));
|
||||
EXPECT_EQ(tensorOut->vector(), std::vector<float>({ 2, 4, 6 }));
|
||||
|
||||
algo->rebuild({tensorOut, tensorA, tensorB}, spirv);
|
||||
algo->rebuild({ tensorOut, tensorA, tensorB }, spirv);
|
||||
|
||||
// Refresh and trigger a rerecord
|
||||
sq->rerecord();
|
||||
sq->eval();
|
||||
|
||||
EXPECT_EQ(tensorB->vector(), std::vector<float>({2, 8, 18}));
|
||||
EXPECT_EQ(tensorB->vector(), std::vector<float>({ 2, 8, 18 }));
|
||||
}
|
||||
|
||||
|
||||
TEST(TestSequence, SequenceTimestamps)
|
||||
{
|
||||
kp::Manager mgr;
|
||||
|
|
@ -118,15 +117,16 @@ TEST(TestSequence, SequenceTimestamps)
|
|||
})");
|
||||
|
||||
std::vector<uint32_t> spirv = kp::Shader::compileSource(shader);
|
||||
|
||||
auto seq = mgr.sequence(0, 100); //100 timestamps
|
||||
|
||||
auto seq = mgr.sequence(0, 100); // 100 timestamps
|
||||
seq->record<kp::OpTensorSyncDevice>({ tensorA })
|
||||
->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv))
|
||||
->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv))
|
||||
->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv))
|
||||
->record<kp::OpTensorSyncLocal>({ tensorA })
|
||||
->eval();
|
||||
->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv))
|
||||
->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv))
|
||||
->record<kp::OpAlgoDispatch>(mgr.algorithm({ tensorA }, spirv))
|
||||
->record<kp::OpTensorSyncLocal>({ tensorA })
|
||||
->eval();
|
||||
const std::vector<uint64_t> timestamps = seq->getTimestamps();
|
||||
|
||||
EXPECT_EQ(timestamps.size(), 6); //1 timestamp at start + 1 after each operation
|
||||
|
||||
EXPECT_EQ(timestamps.size(),
|
||||
6); // 1 timestamp at start + 1 after each operation
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,34 +24,43 @@ static const std::string shaderString = (R"(
|
|||
}
|
||||
)");
|
||||
|
||||
void compileShaderWithGivenResources(const std::string shaderString, const TBuiltInResource resources) {
|
||||
kp::Shader::compileSource(shaderString, std::string("main"), std::vector<std::pair<std::string,std::string>>({}), resources);
|
||||
void
|
||||
compileShaderWithGivenResources(const std::string shaderString,
|
||||
const TBuiltInResource resources)
|
||||
{
|
||||
kp::Shader::compileSource(
|
||||
shaderString,
|
||||
std::string("main"),
|
||||
std::vector<std::pair<std::string, std::string>>({}),
|
||||
resources);
|
||||
}
|
||||
|
||||
|
||||
|
||||
TEST(TestShaderResources, TestNoMaxLight)
|
||||
{
|
||||
TBuiltInResource noMaxLightResources = kp::Shader::defaultResource;
|
||||
noMaxLightResources.maxLights=0;
|
||||
|
||||
EXPECT_NO_THROW(compileShaderWithGivenResources(shaderString, noMaxLightResources));
|
||||
}
|
||||
noMaxLightResources.maxLights = 0;
|
||||
|
||||
EXPECT_NO_THROW(
|
||||
compileShaderWithGivenResources(shaderString, noMaxLightResources));
|
||||
}
|
||||
|
||||
TEST(TestShaderResources, TestSmallComputeWorkGroupSizeX)
|
||||
{
|
||||
TBuiltInResource smallComputeWorkGroupSizeXResources = kp::Shader::defaultResource;
|
||||
smallComputeWorkGroupSizeXResources.maxComputeWorkGroupSizeX=0;
|
||||
|
||||
ASSERT_THROW(compileShaderWithGivenResources(shaderString, smallComputeWorkGroupSizeXResources), std::runtime_error);
|
||||
}
|
||||
TBuiltInResource smallComputeWorkGroupSizeXResources =
|
||||
kp::Shader::defaultResource;
|
||||
smallComputeWorkGroupSizeXResources.maxComputeWorkGroupSizeX = 0;
|
||||
|
||||
ASSERT_THROW(compileShaderWithGivenResources(
|
||||
shaderString, smallComputeWorkGroupSizeXResources),
|
||||
std::runtime_error);
|
||||
}
|
||||
|
||||
TEST(TestShaderResources, TestNoWhileLoopLimit)
|
||||
{
|
||||
TBuiltInResource noWhileLoopLimitResources = kp::Shader::defaultResource;
|
||||
noWhileLoopLimitResources.limits.whileLoops=0;
|
||||
|
||||
ASSERT_THROW(compileShaderWithGivenResources(shaderString, noWhileLoopLimitResources), std::runtime_error);
|
||||
}
|
||||
noWhileLoopLimitResources.limits.whileLoops = 0;
|
||||
|
||||
ASSERT_THROW(
|
||||
compileShaderWithGivenResources(shaderString, noWhileLoopLimitResources),
|
||||
std::runtime_error);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,8 +25,10 @@ TEST(TestSpecializationConstants, TestTwoConstants)
|
|||
{
|
||||
kp::Manager mgr;
|
||||
|
||||
std::shared_ptr<kp::TensorT<float>> tensorA = mgr.tensor({ 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensorB = mgr.tensor({ 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensorA =
|
||||
mgr.tensor({ 0, 0, 0 });
|
||||
std::shared_ptr<kp::TensorT<float>> tensorB =
|
||||
mgr.tensor({ 0, 0, 0 });
|
||||
|
||||
std::vector<std::shared_ptr<kp::Tensor>> params = { tensorA,
|
||||
tensorB };
|
||||
|
|
|
|||
|
|
@ -52,12 +52,13 @@ TEST(TestWorkgroup, TestSimpleWorkgroup)
|
|||
};
|
||||
|
||||
std::vector<float> expectedB = {
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5,
|
||||
6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3,
|
||||
4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1,
|
||||
2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5,
|
||||
6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2,
|
||||
3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5,
|
||||
6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0,
|
||||
1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3,
|
||||
4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6,
|
||||
7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1,
|
||||
2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7
|
||||
};
|
||||
|
||||
EXPECT_EQ(tensorA->vector(), expectedA);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue