Spaces:
Runtime error
Runtime error
BioMistral_gradio
/
llama-cpp-python
/vendor
/llama.cpp
/kompute
/test
/TestOpShadersFromStringAndFile.cpp
// SPDX-License-Identifier: Apache-2.0 | |
TEST(TestShaderEndianness, ShaderRawDataFromConstructor) | |
{ | |
std::string shader(R"( | |
#version 450 | |
layout (local_size_x = 1) in; | |
layout(set = 0, binding = 0) buffer a { float pa[]; }; | |
layout(set = 0, binding = 1) buffer b { float pb[]; }; | |
void main() { | |
uint index = gl_GlobalInvocationID.x; | |
pb[index] = pa[index]; | |
pa[index] = index; | |
} | |
)"); | |
std::vector<uint32_t> spirv = compileSource(shader); | |
std::vector<uint32_t> spirv2(kp::TEST_SHADER_COMP_SPV.begin(), | |
kp::TEST_SHADER_COMP_SPV.end()); | |
EXPECT_EQ(spirv.size(), spirv2.size()); | |
for (size_t i = 0; i < spirv.size(); i++) { | |
EXPECT_EQ(spirv[i], spirv2[i]); | |
} | |
} | |
TEST(TestOpAlgoCreate, ShaderRawDataFromConstructor) | |
{ | |
kp::Manager mgr; | |
std::shared_ptr<kp::TensorT<float>> tensorA = mgr.tensor({ 3, 4, 5 }); | |
std::shared_ptr<kp::TensorT<float>> tensorB = mgr.tensor({ 0, 0, 0 }); | |
std::string shader(R"( | |
#version 450 | |
layout (local_size_x = 1) in; | |
layout(set = 0, binding = 0) buffer a { float pa[]; }; | |
layout(set = 0, binding = 1) buffer b { float pb[]; }; | |
void main() { | |
uint index = gl_GlobalInvocationID.x; | |
pb[index] = pa[index]; | |
pa[index] = index; | |
} | |
)"); | |
std::vector<uint32_t> spirv = compileSource(shader); | |
std::vector<std::shared_ptr<kp::Tensor>> params = { tensorA, tensorB }; | |
mgr.sequence() | |
->eval<kp::OpTensorSyncDevice>(params) | |
->eval<kp::OpAlgoDispatch>(mgr.algorithm(params, spirv)) | |
->eval<kp::OpTensorSyncLocal>(params); | |
EXPECT_EQ(tensorA->vector(), std::vector<float>({ 0, 1, 2 })); | |
EXPECT_EQ(tensorB->vector(), std::vector<float>({ 3, 4, 5 })); | |
} | |
TEST(TestOpAlgoCreate, ShaderCompiledDataFromConstructor) | |
{ | |
kp::Manager mgr; | |
std::shared_ptr<kp::TensorT<float>> tensorA = mgr.tensor({ 3, 4, 5 }); | |
std::shared_ptr<kp::TensorT<float>> tensorB = mgr.tensor({ 0, 0, 0 }); | |
std::vector<uint32_t> spirv(kp::TEST_OP_CUSTOM_SHADER_COMP_SPV.begin(), | |
kp::TEST_OP_CUSTOM_SHADER_COMP_SPV.end()); | |
std::vector<std::shared_ptr<kp::Tensor>> params = { tensorA, tensorB }; | |
mgr.sequence() | |
->eval<kp::OpTensorSyncDevice>(params) | |
->eval<kp::OpAlgoDispatch>(mgr.algorithm(params, spirv)) | |
->eval<kp::OpTensorSyncLocal>(params); | |
EXPECT_EQ(tensorA->vector(), std::vector<float>({ 0, 1, 2 })); | |
EXPECT_EQ(tensorB->vector(), std::vector<float>({ 3, 4, 5 })); | |
} | |
// TODO: Add support to read from file for shader | |
// TEST(TestOpAlgoCreate, ShaderCompiledDataFromFile) | |
//{ | |
// 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 }); | |
// | |
// mgr.evalOpDefault<kp::OpAlgoCreate>( | |
// { tensorA, tensorB }, | |
// "test/shaders/glsl/test_op_custom_shader.comp.spv"); | |
// | |
// mgr.evalOpDefault<kp::OpTensorSyncLocal>({ tensorA, tensorB }); | |
// | |
// EXPECT_EQ(tensorA->vector(), std::vector<float>({ 0, 1, 2 })); | |
// EXPECT_EQ(tensorB->vector(), std::vector<float>({ 3, 4, 5 })); | |
//} | |