Skip to content

Commit 9b23990

Browse files
Add fence ULTs (2)
Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@intel.com>
1 parent 1a35b0a commit 9b23990

File tree

2 files changed

+91
-2
lines changed

2 files changed

+91
-2
lines changed

level_zero/core/source/fence/fence.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "shared/source/command_stream/command_stream_receiver.h"
1111
#include "shared/source/helpers/constants.h"
12+
#include "shared/source/helpers/string.h"
1213
#include "shared/source/memory_manager/memory_manager.h"
1314
#include "shared/source/utilities/wait_util.h"
1415

@@ -36,8 +37,10 @@ ze_result_t FenceImp::queryStatus() {
3637
csr->downloadAllocations();
3738
}
3839

39-
auto hostAddr = static_cast<uint64_t *>(allocation->getUnderlyingBuffer());
40-
return *hostAddr == Fence::STATE_CLEARED ? ZE_RESULT_NOT_READY : ZE_RESULT_SUCCESS;
40+
uint64_t *hostAddr = static_cast<uint64_t *>(allocation->getUnderlyingBuffer());
41+
uint32_t queryVal = Fence::STATE_CLEARED;
42+
memcpy_s(static_cast<void *>(&queryVal), sizeof(uint32_t), static_cast<void *>(hostAddr), sizeof(uint32_t));
43+
return queryVal == Fence::STATE_CLEARED ? ZE_RESULT_NOT_READY : ZE_RESULT_SUCCESS;
4144
}
4245

4346
void FenceImp::initialize() {

level_zero/core/test/unit_tests/sources/fence/test_fence.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
#include "shared/test/common/mocks/mock_command_stream_receiver.h"
99

10+
#include "opencl/test/unit_test/mocks/mock_csr.h"
1011
#include "test.h"
1112

1213
#include "level_zero/core/source/fence/fence.h"
1314
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
15+
#include "level_zero/core/test/unit_tests/mocks/mock_built_ins.h"
1416
#include "level_zero/core/test/unit_tests/mocks/mock_cmdqueue.h"
1517

1618
namespace L0 {
@@ -63,5 +65,89 @@ TEST_F(FenceTest, whenQueryingStatusAndStateSignaledThenReturnSuccess) {
6365
fence->destroy();
6466
}
6567

68+
using FenceSynchronizeTest = Test<DeviceFixture>;
69+
70+
TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithTimeoutZeroAndStateInitialHostSynchronizeReturnsNotReady) {
71+
std::unique_ptr<MockCommandStreamReceiver> csr = nullptr;
72+
csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
73+
74+
Mock<CommandQueue> cmdQueue(device, csr.get());
75+
std::unique_ptr<L0::Fence> fence;
76+
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, nullptr));
77+
EXPECT_NE(nullptr, fence);
78+
79+
ze_result_t result = fence->hostSynchronize(0);
80+
EXPECT_EQ(ZE_RESULT_NOT_READY, result);
81+
}
82+
83+
TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithNonZeroTimeoutAndStateInitialHostSynchronizeReturnsNotReady) {
84+
std::unique_ptr<MockCommandStreamReceiver> csr = nullptr;
85+
csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
86+
87+
Mock<CommandQueue> cmdQueue(device, csr.get());
88+
std::unique_ptr<L0::Fence> fence;
89+
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, nullptr));
90+
EXPECT_NE(nullptr, fence);
91+
ze_result_t result = fence->hostSynchronize(10);
92+
EXPECT_EQ(ZE_RESULT_NOT_READY, result);
93+
}
94+
95+
TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithTimeoutZeroAndStateSignaledHostSynchronizeReturnsSuccess) {
96+
std::unique_ptr<MockCommandStreamReceiver> csr = nullptr;
97+
csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
98+
99+
Mock<CommandQueue> cmdQueue(device, csr.get());
100+
std::unique_ptr<L0::Fence> fence;
101+
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, nullptr));
102+
EXPECT_NE(nullptr, fence);
103+
auto alloc = &(fence->getAllocation());
104+
auto hostAddr = static_cast<uint64_t *>(alloc->getUnderlyingBuffer());
105+
*hostAddr = Fence::STATE_SIGNALED;
106+
ze_result_t result = fence->hostSynchronize(0);
107+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
108+
}
109+
110+
TEST_F(FenceSynchronizeTest, givenCallToFenceHostSynchronizeWithTimeoutNonZeroAndStateSignaledHostSynchronizeReturnsSuccess) {
111+
std::unique_ptr<MockCommandStreamReceiver> csr = nullptr;
112+
csr = std::make_unique<MockCommandStreamReceiver>(*neoDevice->getExecutionEnvironment(), 0, neoDevice->getDeviceBitfield());
113+
114+
Mock<CommandQueue> cmdQueue(device, csr.get());
115+
std::unique_ptr<L0::Fence> fence;
116+
fence = std::unique_ptr<L0::Fence>(L0::Fence::create(&cmdQueue, nullptr));
117+
EXPECT_NE(nullptr, fence);
118+
auto alloc = &(fence->getAllocation());
119+
auto hostAddr = static_cast<uint64_t *>(alloc->getUnderlyingBuffer());
120+
*hostAddr = Fence::STATE_SIGNALED;
121+
ze_result_t result = fence->hostSynchronize(10);
122+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
123+
}
124+
125+
using FenceAubCsrTest = Test<DeviceFixture>;
126+
127+
HWTEST_F(FenceAubCsrTest, givenCallToFenceHostSynchronizeWithAubModeCsrReturnsSuccess) {
128+
std::unique_ptr<Mock<L0::DriverHandleImp>> driverHandle;
129+
NEO::MockDevice *neoDevice = nullptr;
130+
L0::Device *device = nullptr;
131+
132+
neoDevice = NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get());
133+
auto mockBuiltIns = new MockBuiltins();
134+
neoDevice->executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
135+
NEO::DeviceVector devices;
136+
devices.push_back(std::unique_ptr<NEO::Device>(neoDevice));
137+
driverHandle = std::make_unique<Mock<L0::DriverHandleImp>>();
138+
driverHandle->initialize(std::move(devices));
139+
device = driverHandle->devices[0];
140+
int32_t tag;
141+
auto aubCsr = new MockCsrAub<FamilyType>(tag, *neoDevice->executionEnvironment, neoDevice->getRootDeviceIndex(), neoDevice->getDeviceBitfield());
142+
neoDevice->resetCommandStreamReceiver(aubCsr);
143+
144+
Mock<CommandQueue> cmdQueue(device, aubCsr);
145+
auto fence = Fence::create(&cmdQueue, nullptr);
146+
147+
ze_result_t result = fence->hostSynchronize(10);
148+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
149+
fence->destroy();
150+
}
151+
66152
} // namespace ult
67153
} // namespace L0

0 commit comments

Comments
 (0)