Return timestamps for each subdevice via queryTimestampExp

Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@intel.com>
This commit is contained in:
Aravind Gopalakrishnan
2021-09-09 07:59:45 +00:00
committed by Compute-Runtime-Automation
parent 7c1ea18f74
commit 6061b61aea
2 changed files with 56 additions and 9 deletions

View File

@@ -261,23 +261,33 @@ ze_result_t EventImp<TagSizeT>::queryTimestampsExp(Device *device, uint32_t *pCo
isStaticPartitioning = false;
}
if (deviceImp->isSubdevice || !isStaticPartitioning) {
if (!isStaticPartitioning) {
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
}
uint32_t numPacketsUsed = 1u;
if (!deviceImp->isSubdevice) {
numPacketsUsed = this->getPacketsInUse();
}
if ((*pCount == 0) ||
(*pCount > kernelTimestampsData[timestampPacket].getPacketsUsed())) {
*pCount = this->getPacketsInUse();
(*pCount > numPacketsUsed)) {
*pCount = numPacketsUsed;
return ZE_RESULT_SUCCESS;
}
for (auto packetId = 0u; packetId < *pCount; packetId++) {
ze_kernel_timestamp_result_t &result = *(pTimestamps + packetId);
for (auto i = 0u; i < *pCount; i++) {
ze_kernel_timestamp_result_t &result = *(pTimestamps + i);
auto queryTsEventAssignFunc = [&](uint64_t &timestampFieldForWriting, uint64_t &timestampFieldToCopy) {
memcpy_s(&timestampFieldForWriting, sizeof(uint64_t), static_cast<void *>(&timestampFieldToCopy), sizeof(uint64_t));
};
auto packetId = i;
if (deviceImp->isSubdevice) {
packetId = static_cast<NEO::SubDevice *>(deviceImp->neoDevice)->getSubDeviceIndex();
}
globalStartTs = kernelTimestampsData[timestampPacket].getGlobalStartValue(packetId);
contextStartTs = kernelTimestampsData[timestampPacket].getContextStartValue(packetId);
contextEndTs = kernelTimestampsData[timestampPacket].getContextEndValue(packetId);

View File

@@ -741,10 +741,9 @@ TEST_F(TimestampEventCreate, givenEventWithStaticPartitionOffThenQueryTimestampE
using EventQueryTimestampExpWithSubDevice = Test<MultiDeviceFixture>;
TEST_F(EventQueryTimestampExpWithSubDevice, givenEventWhenQuerytimestampExpWithSubDeviceThenReturnsUnsupported) {
TEST_F(EventQueryTimestampExpWithSubDevice, givenEventWhenQuerytimestampExpWithSubDeviceThenReturnsCorrectValueReturned) {
std::unique_ptr<L0::EventPool> eventPool;
std::unique_ptr<L0::EventImp<uint32_t>> event;
uint32_t deviceCount = 1;
ze_device_handle_t rootDeviceHandle;
@@ -769,16 +768,54 @@ TEST_F(EventQueryTimestampExpWithSubDevice, givenEventWhenQuerytimestampExpWithS
eventDesc.signal = 0;
eventDesc.wait = 0;
auto subdevice = L0::Device::fromHandle(subDeviceHandle[0]);
auto subDeviceId = 0u;
auto subdevice = L0::Device::fromHandle(subDeviceHandle[subDeviceId]);
eventPool = std::unique_ptr<L0::EventPool>(L0::EventPool::create(driverHandle.get(), context, 1, &subDeviceHandle[0], &eventPoolDesc));
ASSERT_NE(nullptr, eventPool);
event = std::unique_ptr<L0::EventImp<uint32_t>>(static_cast<L0::EventImp<uint32_t> *>(L0::Event::create<uint32_t>(eventPool.get(), &eventDesc, subdevice)));
ASSERT_NE(nullptr, event);
class MockTimestampPackets32 : public TimestampPackets<uint32_t> {
public:
using typename TimestampPackets<uint32_t>::Packet;
};
typename MockTimestampPackets32::Packet packetData[2];
event->setPacketsInUse(2u);
packetData[0].contextStart = 1u;
packetData[0].contextEnd = 2u;
packetData[0].globalStart = 3u;
packetData[0].globalEnd = 4u;
packetData[1].contextStart = 5u;
packetData[1].contextEnd = 6u;
packetData[1].globalStart = 7u;
packetData[1].globalEnd = 8u;
event->hostAddress = packetData;
ze_kernel_timestamp_result_t results[2];
uint32_t numPackets = 2;
for (uint32_t packetId = 0; packetId < numPackets; packetId++) {
event->kernelTimestampsData[0].assignDataToAllTimestamps(packetId, event->hostAddress);
event->hostAddress = ptrOffset(event->hostAddress, NEO::TimestampPackets<uint32_t>::getSinglePacketSize());
}
uint32_t pCount = 0;
result = event->queryTimestampsExp(subdevice, &pCount, nullptr);
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
EXPECT_EQ(1u, pCount);
result = event->queryTimestampsExp(subdevice, &pCount, results);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
for (uint32_t i = 0; i < pCount; i++) {
EXPECT_EQ(packetData[subDeviceId].contextStart, results[i].context.kernelStart);
EXPECT_EQ(packetData[subDeviceId].contextEnd, results[i].context.kernelEnd);
EXPECT_EQ(packetData[subDeviceId].globalStart, results[i].global.kernelStart);
EXPECT_EQ(packetData[subDeviceId].globalEnd, results[i].global.kernelEnd);
}
}
HWCMDTEST_F(IGFX_GEN9_CORE, TimestampEventCreate, givenEventTimestampsWhenQueryKernelTimestampThenCorrectDataAreSet) {