mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-14 02:32:59 +08:00
Implement fence creation flag
Related-To: NEO-6242 Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
bb753784cc
commit
e4d8dfcdd9
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -38,5 +38,5 @@ zeFenceQueryStatus(
|
||||
ZE_APIEXPORT ze_result_t ZE_APICALL
|
||||
zeFenceReset(
|
||||
ze_fence_handle_t hFence) {
|
||||
return L0::Fence::fromHandle(hFence)->reset();
|
||||
return L0::Fence::fromHandle(hFence)->reset(false);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace L0 {
|
||||
Fence *Fence::create(CommandQueueImp *cmdQueue, const ze_fence_desc_t *desc) {
|
||||
auto fence = new Fence(cmdQueue);
|
||||
UNRECOVERABLE_IF(fence == nullptr);
|
||||
fence->reset();
|
||||
fence->reset(!!(desc->flags & ZE_FENCE_FLAG_SIGNALED));
|
||||
return fence;
|
||||
}
|
||||
|
||||
@@ -36,8 +36,12 @@ ze_result_t Fence::assignTaskCountFromCsr() {
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
ze_result_t Fence::reset() {
|
||||
taskCount = std::numeric_limits<uint32_t>::max();
|
||||
ze_result_t Fence::reset(bool signaled) {
|
||||
if (signaled) {
|
||||
taskCount = 0;
|
||||
} else {
|
||||
taskCount = std::numeric_limits<uint32_t>::max();
|
||||
}
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ struct Fence : _ze_fence_handle_t {
|
||||
MOCKABLE_VIRTUAL ze_result_t hostSynchronize(uint64_t timeout);
|
||||
MOCKABLE_VIRTUAL ze_result_t queryStatus();
|
||||
MOCKABLE_VIRTUAL ze_result_t assignTaskCountFromCsr();
|
||||
MOCKABLE_VIRTUAL ze_result_t reset();
|
||||
MOCKABLE_VIRTUAL ze_result_t reset(bool signaled);
|
||||
|
||||
static Fence *fromHandle(ze_fence_handle_t handle) { return static_cast<Fence *>(handle); }
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ struct Mock<Fence> : public Fence {
|
||||
ADDMETHOD_NOBASE(hostSynchronize, ze_result_t, ZE_RESULT_SUCCESS, (uint64_t timeout));
|
||||
ADDMETHOD_NOBASE(queryStatus, ze_result_t, ZE_RESULT_SUCCESS, ());
|
||||
ADDMETHOD_NOBASE(assignTaskCountFromCsr, ze_result_t, ZE_RESULT_SUCCESS, ());
|
||||
ADDMETHOD_NOBASE(reset, ze_result_t, ZE_RESULT_SUCCESS, ());
|
||||
ADDMETHOD_NOBASE(reset, ze_result_t, ZE_RESULT_SUCCESS, (bool signaled));
|
||||
};
|
||||
|
||||
} // namespace ult
|
||||
|
||||
@@ -38,7 +38,8 @@ TEST_F(FenceTest, whenQueryingStatusThenCsrAllocationsAreDownloaded) {
|
||||
auto csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
|
||||
*csr->tagAddress = 0;
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
auto fence = Fence::create(&cmdQueue, nullptr);
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
auto fence = Fence::create(&cmdQueue, &fenceDesc);
|
||||
|
||||
EXPECT_NE(nullptr, fence);
|
||||
|
||||
@@ -52,11 +53,34 @@ TEST_F(FenceTest, whenQueryingStatusThenCsrAllocationsAreDownloaded) {
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, status);
|
||||
}
|
||||
|
||||
TEST_F(FenceTest, givenFenceSignalFlagUsedWhenQueryingFenceAfterCreationThenReturnReadyStatus) {
|
||||
auto csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
|
||||
*csr->tagAddress = 0;
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
fenceDesc.stype = ZE_STRUCTURE_TYPE_FENCE_DESC;
|
||||
fenceDesc.pNext = nullptr;
|
||||
fenceDesc.flags = ZE_FENCE_FLAG_SIGNALED;
|
||||
|
||||
auto fence = Fence::create(&cmdQueue, &fenceDesc);
|
||||
EXPECT_NE(nullptr, fence);
|
||||
|
||||
EXPECT_FALSE(csr->downloadAllocationsCalled);
|
||||
|
||||
auto status = fence->queryStatus();
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, status);
|
||||
|
||||
status = fence->destroy();
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, status);
|
||||
}
|
||||
|
||||
TEST_F(FenceTest, whenQueryingStatusWithoutCsrAndFenceUnsignaledThenReturnsNotReady) {
|
||||
auto csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
|
||||
*csr->tagAddress = 0;
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
auto fence = Fence::create(&cmdQueue, nullptr);
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
auto fence = Fence::create(&cmdQueue, &fenceDesc);
|
||||
|
||||
EXPECT_NE(nullptr, fence);
|
||||
auto status = fence->queryStatus();
|
||||
@@ -70,7 +94,7 @@ TEST_F(FenceTest, GivenGpuHangWhenHostSynchronizeIsCalledThenDeviceLostIsReturne
|
||||
csr->testTaskCountReadyReturnValue = false;
|
||||
|
||||
Mock<CommandQueue> cmdqueue(device, csr.get());
|
||||
ze_fence_desc_t desc;
|
||||
ze_fence_desc_t desc = {};
|
||||
|
||||
std::unique_ptr<WhiteBox<L0::Fence>> fence;
|
||||
fence.reset(whitebox_cast(Fence::create(&cmdqueue, &desc)));
|
||||
@@ -91,7 +115,7 @@ TEST_F(FenceTest, GivenNoGpuHangAndOneNanosecondTimeoutWhenHostSynchronizeIsCall
|
||||
csr->testTaskCountReadyReturnValue = false;
|
||||
|
||||
Mock<CommandQueue> cmdqueue(device, csr.get());
|
||||
ze_fence_desc_t desc;
|
||||
ze_fence_desc_t desc = {};
|
||||
|
||||
std::unique_ptr<WhiteBox<L0::Fence>> fence;
|
||||
fence.reset(whitebox_cast(Fence::create(&cmdqueue, &desc)));
|
||||
@@ -111,7 +135,7 @@ TEST_F(FenceTest, GivenLongPeriodOfGpuCheckAndOneNanosecondTimeoutWhenHostSynchr
|
||||
csr->testTaskCountReadyReturnValue = false;
|
||||
|
||||
Mock<CommandQueue> cmdqueue(device, csr.get());
|
||||
ze_fence_desc_t desc;
|
||||
ze_fence_desc_t desc = {};
|
||||
|
||||
std::unique_ptr<WhiteBox<L0::Fence>> fence;
|
||||
fence.reset(whitebox_cast(Fence::create(&cmdqueue, &desc)));
|
||||
@@ -131,7 +155,7 @@ TEST_F(FenceTest, GivenSuccessfulQueryResultAndNoTimeoutWhenHostSynchronizeIsCal
|
||||
csr->testTaskCountReadyReturnValue = true;
|
||||
|
||||
Mock<CommandQueue> cmdqueue(device, csr.get());
|
||||
ze_fence_desc_t desc;
|
||||
ze_fence_desc_t desc = {};
|
||||
|
||||
std::unique_ptr<WhiteBox<L0::Fence>> fence;
|
||||
fence.reset(whitebox_cast(Fence::create(&cmdqueue, &desc)));
|
||||
@@ -153,7 +177,8 @@ TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithTimeoutZeroAndSt
|
||||
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
std::unique_ptr<L0::Fence> fence;
|
||||
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, nullptr));
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, &fenceDesc));
|
||||
EXPECT_NE(nullptr, fence);
|
||||
*csr->tagAddress = 0;
|
||||
ze_result_t result = fence->hostSynchronize(0);
|
||||
@@ -166,7 +191,8 @@ TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithNonZeroTimeoutAn
|
||||
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
std::unique_ptr<L0::Fence> fence;
|
||||
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, nullptr));
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, &fenceDesc));
|
||||
EXPECT_NE(nullptr, fence);
|
||||
*csr->tagAddress = 0;
|
||||
ze_result_t result = fence->hostSynchronize(10);
|
||||
@@ -178,7 +204,8 @@ TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithTimeoutZeroAndTa
|
||||
csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
|
||||
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
auto fence = std::unique_ptr<Fence>(whitebox_cast(Fence::create(&cmdQueue, nullptr)));
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
auto fence = std::unique_ptr<Fence>(whitebox_cast(Fence::create(&cmdQueue, &fenceDesc)));
|
||||
EXPECT_NE(nullptr, fence);
|
||||
|
||||
fence->taskCount = 1;
|
||||
@@ -192,7 +219,8 @@ TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithTimeoutNonZeroAn
|
||||
csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
|
||||
|
||||
Mock<CommandQueue> cmdQueue(device, csr.get());
|
||||
auto fence = std::unique_ptr<Fence>(whitebox_cast(Fence::create(&cmdQueue, nullptr)));
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
auto fence = std::unique_ptr<Fence>(whitebox_cast(Fence::create(&cmdQueue, &fenceDesc)));
|
||||
EXPECT_NE(nullptr, fence);
|
||||
|
||||
fence->taskCount = 1;
|
||||
@@ -267,7 +295,8 @@ HWTEST_F(FenceAubCsrTest, givenCallToFenceHostSynchronizeWithAubModeCsrReturnsSu
|
||||
neoDevice->resetCommandStreamReceiver(aubCsr);
|
||||
|
||||
Mock<CommandQueue> cmdQueue(device, aubCsr);
|
||||
auto fence = std::unique_ptr<L0::Fence>(Fence::create(&cmdQueue, nullptr));
|
||||
ze_fence_desc_t fenceDesc = {};
|
||||
auto fence = std::unique_ptr<L0::Fence>(Fence::create(&cmdQueue, &fenceDesc));
|
||||
|
||||
ze_result_t result = fence->hostSynchronize(10);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2022 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -86,10 +86,10 @@ TEST_F(zeAPITracingRuntimeTests, WhenCallingFenceResetTracingWrapperWithOneSetOf
|
||||
|
||||
struct {
|
||||
ze_command_queue_handle_t hCommandQueue0;
|
||||
ze_fence_desc_t desc0;
|
||||
ze_fence_desc_t desc0{};
|
||||
ze_fence_handle_t hFence0;
|
||||
ze_command_queue_handle_t hCommandQueue1;
|
||||
ze_fence_desc_t desc1;
|
||||
ze_fence_desc_t desc1{};
|
||||
ze_fence_handle_t hFence1;
|
||||
ze_fence_handle_t hFenceAPI;
|
||||
void *instanceData0;
|
||||
|
||||
Reference in New Issue
Block a user