chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
//
|
||||
// OpenCLRunningUtils.cpp
|
||||
// MNN
|
||||
//
|
||||
// Created by MNN on 2023/10/27.
|
||||
// Copyright © 2018, Alibaba Group Holding Limited
|
||||
//
|
||||
|
||||
#include "VulkanQueryPool.hpp"
|
||||
|
||||
namespace MNN {
|
||||
VulkanQueryPool::VulkanQueryPool(const VulkanDevice& dev) : mDevice(dev){
|
||||
VkQueryPoolCreateInfo queryPoolCreateInfo = {};
|
||||
queryPoolCreateInfo.sType = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO;
|
||||
queryPoolCreateInfo.queryType = VK_QUERY_TYPE_TIMESTAMP;
|
||||
queryPoolCreateInfo.queryCount = 2;
|
||||
|
||||
CALL_VK(vkCreateQueryPool(mDevice.get(), &queryPoolCreateInfo, nullptr, &queryPool));
|
||||
}
|
||||
|
||||
VulkanQueryPool::~VulkanQueryPool(){
|
||||
vkDestroyQueryPool(mDevice.get(), queryPool, nullptr);
|
||||
}
|
||||
|
||||
void VulkanQueryPool::VulkanCmdResetQueryPool(VkCommandBuffer commandBuffer){
|
||||
vkCmdResetQueryPool(commandBuffer, queryPool, 0, 2);
|
||||
}
|
||||
|
||||
void VulkanQueryPool::VulkanCmdWriteTimestamp(VkCommandBuffer commandBuffer, int index){
|
||||
vkCmdWriteTimestamp(commandBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, queryPool, index);
|
||||
}
|
||||
|
||||
float VulkanQueryPool::VulkanGetQueryPoolResults(){
|
||||
uint64_t timestamps[2];
|
||||
CALL_VK(vkGetQueryPoolResults(mDevice.get(), queryPool, 0, 2, sizeof(uint64_t) * 2, timestamps, sizeof(uint64_t), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT));
|
||||
|
||||
double timestampPeriod = mDevice.getTimestampPeriod();
|
||||
double executionTime = (timestamps[1] - timestamps[0]) * timestampPeriod / double(1e6); // us
|
||||
return executionTime;
|
||||
}
|
||||
} // namespace MNN
|
||||
Reference in New Issue
Block a user