mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-10 12:53:42 +08:00
Device Enqueue: Add ULTs
- add Gen8 AUBParentKernel aub test - add scheduler kernel source tests: SECOND_LEVEL_BUFFER_SPACE_FOR_EACH_ENQUEUE, SECOND_LEVEL_BUFFER_NUMBER_OF_ENQUEUES, space used for SlbDummyCommands Change-Id: I67afeb731e0bff52696157f3fa6fb4bc2079c73c
This commit is contained in:

committed by
sys_ocldev

parent
f8299e8705
commit
afdc4ac1bb
@ -31,6 +31,8 @@
|
||||
namespace OCLRT {
|
||||
DeviceQueueCreateFunc deviceQueueFactory[IGFX_MAX_CORE] = {};
|
||||
|
||||
const uint32_t DeviceQueue::numberOfDeviceEnqueues = 128;
|
||||
|
||||
DeviceQueue::DeviceQueue(Context *context,
|
||||
Device *device,
|
||||
cl_queue_properties &properties) : DeviceQueue() {
|
||||
|
@ -117,7 +117,7 @@ class DeviceQueue : public BaseObject<_device_queue> {
|
||||
static const uint32_t interfaceDescriptorEntries = 64;
|
||||
static const uint32_t colorCalcStateSize = 192;
|
||||
static const uint32_t schedulerIDIndex = 62;
|
||||
static const uint32_t numberOfDeviceEnqueues = 128;
|
||||
static const uint32_t numberOfDeviceEnqueues;
|
||||
|
||||
protected:
|
||||
void allocateResources();
|
||||
|
@ -23,4 +23,5 @@ if(TESTS_GEN8)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/aub_tests_configuration.cpp
|
||||
)
|
||||
add_subdirectories()
|
||||
endif()
|
||||
|
24
unit_tests/aub_tests/gen8/execution_model/CMakeLists.txt
Normal file
24
unit_tests/aub_tests/gen8/execution_model/CMakeLists.txt
Normal file
@ -0,0 +1,24 @@
|
||||
# Copyright (c) 2018, Intel Corporation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
# OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
target_sources(igdrcl_aub_tests PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/enqueue_parent_kernel_tests_gen8.cpp
|
||||
)
|
@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "runtime/built_ins/built_ins.h"
|
||||
#include "runtime/mem_obj/image.h"
|
||||
#include "runtime/sampler/sampler.h"
|
||||
#include "unit_tests/aub_tests/fixtures/aub_parent_kernel_fixture.h"
|
||||
#include "unit_tests/fixtures/buffer_fixture.h"
|
||||
|
||||
#include "test.h"
|
||||
#include <memory>
|
||||
|
||||
using namespace OCLRT;
|
||||
|
||||
typedef AUBParentKernelFixture GEN8AUBParentKernelFixture;
|
||||
|
||||
GEN8TEST_F(GEN8AUBParentKernelFixture, EnqueueParentKernel) {
|
||||
if (pDevice->getSupportedClVersion() >= 20) {
|
||||
ASSERT_NE(nullptr, pKernel);
|
||||
ASSERT_TRUE(pKernel->isParentKernel);
|
||||
|
||||
const cl_queue_properties properties[3] = {(CL_QUEUE_ON_DEVICE | CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE),
|
||||
0, 0};
|
||||
|
||||
std::unique_ptr<DeviceQueue> devQueue(DeviceQueue::create(
|
||||
&pCmdQ->getContext(),
|
||||
pDevice,
|
||||
properties[0],
|
||||
retVal));
|
||||
|
||||
BuiltIns &builtIns = BuiltIns::getInstance();
|
||||
SchedulerKernel &scheduler = builtIns.getSchedulerKernel(pCmdQ->getContext());
|
||||
// Aub execution takes huge time for bigger GWS
|
||||
scheduler.setGws(24);
|
||||
|
||||
size_t offset[3] = {0, 0, 0};
|
||||
size_t gws[3] = {1, 1, 1};
|
||||
size_t lws[3] = {1, 1, 1};
|
||||
|
||||
cl_image_format imageFormat;
|
||||
imageFormat.image_channel_data_type = CL_UNSIGNED_INT8;
|
||||
imageFormat.image_channel_order = CL_R;
|
||||
|
||||
cl_image_desc desc = {0};
|
||||
desc.image_array_size = 0;
|
||||
desc.image_depth = 1;
|
||||
desc.image_height = 4;
|
||||
desc.image_width = 4;
|
||||
desc.image_type = CL_MEM_OBJECT_IMAGE3D;
|
||||
desc.image_row_pitch = 0;
|
||||
desc.image_slice_pitch = 0;
|
||||
|
||||
auto surfaceFormat = Image::getSurfaceFormatFromTable(0, &imageFormat);
|
||||
std::unique_ptr<Image> image(Image::create(
|
||||
pContext,
|
||||
0,
|
||||
surfaceFormat,
|
||||
&desc,
|
||||
nullptr,
|
||||
retVal));
|
||||
|
||||
std::unique_ptr<Buffer> buffer(BufferHelper<BufferUseHostPtr<>>::create(pContext));
|
||||
|
||||
cl_mem bufferMem = buffer.get();
|
||||
cl_mem imageMem = image.get();
|
||||
|
||||
std::unique_ptr<Sampler> sampler(Sampler::create(
|
||||
pContext,
|
||||
CL_TRUE,
|
||||
CL_ADDRESS_NONE,
|
||||
CL_FILTER_LINEAR,
|
||||
retVal));
|
||||
|
||||
size_t argScalar = 2;
|
||||
pKernel->setArg(
|
||||
3,
|
||||
sizeof(size_t),
|
||||
&argScalar);
|
||||
|
||||
pKernel->setArg(
|
||||
2,
|
||||
sizeof(cl_mem),
|
||||
&bufferMem);
|
||||
|
||||
pKernel->setArg(
|
||||
1,
|
||||
sizeof(cl_mem),
|
||||
&imageMem);
|
||||
|
||||
pKernel->setArg(
|
||||
0,
|
||||
sizeof(cl_sampler),
|
||||
&sampler);
|
||||
|
||||
pCmdQ->enqueueKernel(pKernel, 1, offset, gws, lws, 0, 0, 0);
|
||||
|
||||
pCmdQ->finish(false);
|
||||
|
||||
uint32_t expectedNumberOfEnqueues = 1;
|
||||
IGIL_CommandQueue *igilQueue = reinterpret_cast<IGIL_CommandQueue *>(devQueue->getQueueBuffer()->getUnderlyingBuffer());
|
||||
uint64_t gpuAddress = devQueue->getQueueBuffer()->getGpuAddress();
|
||||
uint32_t *pointerTonumberOfEnqueues = &igilQueue->m_controls.m_TotalNumberOfQueues;
|
||||
size_t offsetToEnqueues = ptrDiff(pointerTonumberOfEnqueues, igilQueue);
|
||||
gpuAddress = gpuAddress + offsetToEnqueues;
|
||||
|
||||
AUBCommandStreamFixture::expectMemory<FamilyType>((void *)(uintptr_t)gpuAddress, &expectedNumberOfEnqueues, sizeof(uint32_t));
|
||||
AUBCommandStreamFixture::expectMemory<FamilyType>((void *)(uintptr_t)buffer->getGraphicsAllocation()->getGpuAddress(), &argScalar, sizeof(size_t));
|
||||
}
|
||||
}
|
@ -22,7 +22,6 @@ set(IGDRCL_SRCS_tests_built_in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_kernels_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_source_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sip_tests.cpp
|
||||
)
|
||||
target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_tests_built_in})
|
||||
|
@ -31,6 +31,7 @@ if(TESTS_GEN8)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/l3_helper_gen8.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sampler_tests_gen8.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_dispatch_tests_gen8.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_source_tests_gen8.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_device_caps_gen8.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_device_queue_hw_gen8.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_platform_caps_gen8.cpp
|
||||
|
47
unit_tests/gen8/scheduler_source_tests_gen8.cpp
Normal file
47
unit_tests/gen8/scheduler_source_tests_gen8.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "runtime/device_queue/device_queue_hw.h"
|
||||
#include "hw_cmds.h"
|
||||
|
||||
// Keep the order of device_enqueue.h and scheduler_definitions.h as the latter uses defines from the first one
|
||||
#include "runtime/gen8/device_enqueue.h"
|
||||
#include "runtime/gen8/scheduler_definitions.h"
|
||||
|
||||
#include "unit_tests/scheduler/scheduler_source_tests.h"
|
||||
// Keep this include below scheduler_definitions.h and device_enqueue.h headers as it depends on defines defined in them
|
||||
#include "unit_tests/scheduler/scheduler_source_tests.inl"
|
||||
|
||||
using namespace OCLRT;
|
||||
|
||||
typedef SchedulerSourceTest SchedulerSourceTestGen8;
|
||||
GEN8TEST_F(SchedulerSourceTestGen8, GivenDeviceQueueWhenCommandsSizeIsCalculatedThenItEqualsSpaceForEachEnqueueInSchedulerKernelCode) {
|
||||
givenDeviceQueueWhenCommandsSizeIsCalculatedThenItEqualsSpaceForEachEnqueueInSchedulerKernelCodeTest<FamilyType>();
|
||||
}
|
||||
|
||||
GEN8TEST_F(SchedulerSourceTestGen8, GivenDeviceQueueWhenSlbDummyCommandsAreBuildThenSizeUsedIsCorrect) {
|
||||
givenDeviceQueueWhenSlbDummyCommandsAreBuildThenSizeUsedIsCorrectTest<FamilyType>();
|
||||
}
|
||||
|
||||
GEN8TEST_F(SchedulerSourceTestGen8, GivenDeviceQueueThenNumberOfEnqueuesEqualsNumberOfEnqueuesInSchedulerKernelCode) {
|
||||
givenDeviceQueueThenNumberOfEnqueuesEqualsNumberOfEnqueuesInSchedulerKernelCodeTest<FamilyType>();
|
||||
}
|
@ -31,6 +31,7 @@ if(TESTS_GEN9)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/l3_helper_gen9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/preamble_tests_gen9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sampler_tests_gen9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_source_tests_gen9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/sip_tests_gen9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_device_caps_gen9.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/test_device_queue_hw_gen9.cpp
|
||||
|
47
unit_tests/gen9/scheduler_source_tests_gen9.cpp
Normal file
47
unit_tests/gen9/scheduler_source_tests_gen9.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "runtime/device_queue/device_queue_hw.h"
|
||||
#include "hw_cmds.h"
|
||||
|
||||
// Keep the order of device_enqueue.h and scheduler_definitions.h as the latter uses defines from the first one
|
||||
#include "runtime/gen9/device_enqueue.h"
|
||||
#include "runtime/gen9/scheduler_definitions.h"
|
||||
|
||||
#include "unit_tests/scheduler/scheduler_source_tests.h"
|
||||
// Keep this include below scheduler_definitions.h and device_enqueue.h headers as it depends on defines defined in them
|
||||
#include "unit_tests/scheduler/scheduler_source_tests.inl"
|
||||
|
||||
using namespace OCLRT;
|
||||
|
||||
typedef SchedulerSourceTest SchedulerSourceTestGen9;
|
||||
GEN9TEST_F(SchedulerSourceTestGen9, GivenDeviceQueueWhenCommandsSizeIsCalculatedThenItEqualsSpaceForEachEnqueueInSchedulerKernelCode) {
|
||||
givenDeviceQueueWhenCommandsSizeIsCalculatedThenItEqualsSpaceForEachEnqueueInSchedulerKernelCodeTest<FamilyType>();
|
||||
}
|
||||
|
||||
GEN9TEST_F(SchedulerSourceTestGen9, GivenDeviceQueueWhenSlbDummyCommandsAreBuildThenSizeUsedIsCorrect) {
|
||||
givenDeviceQueueWhenSlbDummyCommandsAreBuildThenSizeUsedIsCorrectTest<FamilyType>();
|
||||
}
|
||||
|
||||
GEN9TEST_F(SchedulerSourceTestGen9, GivenDeviceQueueThenNumberOfEnqueuesEqualsNumberOfEnqueuesInSchedulerKernelCode) {
|
||||
givenDeviceQueueThenNumberOfEnqueuesEqualsNumberOfEnqueuesInSchedulerKernelCodeTest<FamilyType>();
|
||||
}
|
@ -21,5 +21,8 @@
|
||||
set(IGDRCL_SRCS_tests_scheduler
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_kernel_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_source_tests.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_source_tests.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/scheduler_source_tests.inl
|
||||
)
|
||||
target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_tests_scheduler})
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "unit_tests/fixtures/execution_model_fixture.h"
|
||||
#include "unit_tests/helpers/hw_parse.h"
|
||||
#include "unit_tests/mocks/mock_device_queue.h"
|
||||
#include "unit_tests/scheduler/scheduler_source_tests.h"
|
||||
// Keep this include after execution_model_fixture.h otherwise there is high chance of conflict with macros
|
||||
#include "runtime/builtin_kernels_simulation/opencl_c.h"
|
||||
#include "runtime/builtin_kernels_simulation/scheduler_simulation.h"
|
||||
@ -40,19 +41,6 @@ extern PRODUCT_FAMILY defaultProductFamily;
|
||||
using namespace OCLRT;
|
||||
using namespace BuiltinKernelsSimulation;
|
||||
|
||||
class SchedulerSourceTest : public testing::Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
pDevice = DeviceHelper<>::create();
|
||||
}
|
||||
void TearDown() override {
|
||||
delete pDevice;
|
||||
}
|
||||
|
||||
Device *pDevice;
|
||||
MockContext context;
|
||||
};
|
||||
|
||||
HWCMDTEST_F(IGFX_GEN8_CORE, SchedulerSourceTest, PatchGpgpuWalker) {
|
||||
using MEDIA_STATE_FLUSH = typename FamilyType::MEDIA_STATE_FLUSH;
|
||||
using MEDIA_INTERFACE_DESCRIPTOR_LOAD = typename FamilyType::MEDIA_INTERFACE_DESCRIPTOR_LOAD;
|
46
unit_tests/scheduler/scheduler_source_tests.h
Normal file
46
unit_tests/scheduler/scheduler_source_tests.h
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "unit_tests/fixtures/device_fixture.h"
|
||||
#include "unit_tests/mocks/mock_context.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "test.h"
|
||||
|
||||
class SchedulerSourceTest : public testing::Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
pDevice = DeviceHelper<>::create();
|
||||
}
|
||||
void TearDown() override {
|
||||
delete pDevice;
|
||||
}
|
||||
|
||||
OCLRT::Device *pDevice;
|
||||
OCLRT::MockContext context;
|
||||
|
||||
template <typename GfxFamily>
|
||||
void givenDeviceQueueThenNumberOfEnqueuesEqualsNumberOfEnqueuesInSchedulerKernelCodeTest();
|
||||
template <typename GfxFamily>
|
||||
void givenDeviceQueueWhenCommandsSizeIsCalculatedThenItEqualsSpaceForEachEnqueueInSchedulerKernelCodeTest();
|
||||
template <typename GfxFamily>
|
||||
void givenDeviceQueueWhenSlbDummyCommandsAreBuildThenSizeUsedIsCorrectTest();
|
||||
};
|
52
unit_tests/scheduler/scheduler_source_tests.inl
Normal file
52
unit_tests/scheduler/scheduler_source_tests.inl
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Intel Corporation
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "runtime/device_queue/device_queue.h"
|
||||
#include "unit_tests/fixtures/device_host_queue_fixture.h"
|
||||
#include "unit_tests/mocks/mock_device_queue.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
template <typename GfxFamily>
|
||||
void SchedulerSourceTest::givenDeviceQueueWhenCommandsSizeIsCalculatedThenItEqualsSpaceForEachEnqueueInSchedulerKernelCodeTest() {
|
||||
auto devQueueHw = std::unique_ptr<MockDeviceQueueHw<GfxFamily>>(new MockDeviceQueueHw<GfxFamily>(&context, pDevice, DeviceHostQueue::deviceQueueProperties::minimumProperties[0]));
|
||||
|
||||
auto singleEnqueueSpace = devQueueHw->getMinimumSlbSize() + devQueueHw->getWaCommandsSize();
|
||||
EXPECT_EQ(singleEnqueueSpace, SECOND_LEVEL_BUFFER_SPACE_FOR_EACH_ENQUEUE);
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
void SchedulerSourceTest::givenDeviceQueueWhenSlbDummyCommandsAreBuildThenSizeUsedIsCorrectTest() {
|
||||
auto devQueueHw = std::unique_ptr<MockDeviceQueueHw<GfxFamily>>(new MockDeviceQueueHw<GfxFamily>(&context, pDevice, DeviceHostQueue::deviceQueueProperties::minimumProperties[0]));
|
||||
devQueueHw->buildSlbDummyCommands();
|
||||
|
||||
auto slbCS = devQueueHw->getSlbCS();
|
||||
auto usedSpace = slbCS->getUsed();
|
||||
|
||||
auto spaceRequiredForEnqueuesAndBBStart = SECOND_LEVEL_BUFFER_SPACE_FOR_EACH_ENQUEUE * SECOND_LEVEL_BUFFER_NUMBER_OF_ENQUEUES + sizeof(typename GfxFamily::MI_BATCH_BUFFER_START);
|
||||
EXPECT_EQ(usedSpace, spaceRequiredForEnqueuesAndBBStart);
|
||||
}
|
||||
|
||||
template <typename GfxFamily>
|
||||
void SchedulerSourceTest::givenDeviceQueueThenNumberOfEnqueuesEqualsNumberOfEnqueuesInSchedulerKernelCodeTest() {
|
||||
EXPECT_EQ(DeviceQueue::numberOfDeviceEnqueues, static_cast<uint32_t>(SECOND_LEVEL_BUFFER_NUMBER_OF_ENQUEUES));
|
||||
}
|
Reference in New Issue
Block a user