mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-30 09:58:55 +08:00
Return timestamps for each subdevice via queryTimestampExp
Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
7c1ea18f74
commit
6061b61aea
@@ -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 ×tampFieldForWriting, uint64_t ×tampFieldToCopy) {
|
||||
memcpy_s(×tampFieldForWriting, sizeof(uint64_t), static_cast<void *>(×tampFieldToCopy), 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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user