SWDEV-325711 - Added implementation for graph API hipGraphKernelNodeCopyAttributes

Change-Id: I576d0e81c69097fe881556f6d022bb7c7ca3287b
Bu işleme şunda yer alıyor:
Anusha GodavarthySurya
2022-11-28 17:19:26 +00:00
ebeveyn 1ab46fe7ae
işleme 3a9621574c
2 değiştirilmiş dosya ile 41 ekleme ve 16 silme
+5 -1
Dosyayı Görüntüle
@@ -2141,7 +2141,11 @@ hipError_t hipGraphReleaseUserObject(hipGraph_t graph, hipUserObject_t object, u
hipError_t hipGraphKernelNodeCopyAttributes(hipGraphNode_t hSrc, hipGraphNode_t hDst) {
HIP_INIT_API(hipGraphKernelNodeCopyAttributes, hSrc, hDst);
HIP_RETURN(hipErrorNotSupported);
if(hSrc == nullptr || hDst == nullptr) {
HIP_RETURN(hipErrorInvalidValue);
}
HIP_RETURN(reinterpret_cast<hipGraphKernelNode*>(hDst)->CopyAttr(
reinterpret_cast<hipGraphKernelNode*>(hSrc)));
}
hipError_t ihipGraphDebugDotPrint(hipGraph_t graph, const char* path, unsigned int flags) {
+36 -15
Dosyayı Görüntüle
@@ -168,7 +168,6 @@ struct hipGraphNode : public hipGraphNodeDOTAttribute {
struct ihipGraph* parentGraph_;
static std::unordered_set<hipGraphNode*> nodeSet_;
static amd::Monitor nodeSetLock_;
hipKernelNodeAttrValue kernelAttr_;
unsigned int isEnabled_;
public:
@@ -185,7 +184,6 @@ struct hipGraphNode : public hipGraphNodeDOTAttribute {
hipGraphNodeDOTAttribute(style, shape, label) {
amd::ScopedLock lock(nodeSetLock_);
nodeSet_.insert(this);
memset(&kernelAttr_, 0, sizeof(kernelAttr_));
}
/// Copy Constructor
hipGraphNode(const hipGraphNode& node) : hipGraphNodeDOTAttribute(node) {
@@ -658,6 +656,8 @@ struct hipChildGraphNode : public hipGraphNode {
class hipGraphKernelNode : public hipGraphNode {
hipKernelNodeParams* pKernelParams_;
unsigned int numParams_;
hipKernelNodeAttrValue kernelAttr_;
hipKernelNodeAttrID kernelAttrInUse_;
public:
std::string GetLabel(hipGraphDebugDotFlags flag) {
@@ -693,18 +693,17 @@ class hipGraphKernelNode : public hipGraphNode {
}
}
static hipFunction_t getFunc(const hipKernelNodeParams& params,
unsigned int device) {
static hipFunction_t getFunc(const hipKernelNodeParams& params, unsigned int device) {
hipFunction_t func = nullptr;
hipError_t status = PlatformState::instance().getStatFunc(&func, params.func, device);
if (status == hipErrorInvalidSymbol) {
// capturehipExtModuleLaunchKernel() mixes host function with hipFunction_t, so we convert
// here. If it's wrong, later functions will fail
func = static_cast<hipFunction_t>(params.func);
ClPrint(amd::LOG_INFO, amd::LOG_CODE,"[hipGraph] capturehipExtModuleLaunchKernel() should be called",
status);
ClPrint(amd::LOG_INFO, amd::LOG_CODE,
"[hipGraph] capturehipExtModuleLaunchKernel() should be called", status);
} else if (status != hipSuccess) {
ClPrint(amd::LOG_ERROR, amd::LOG_CODE,"[hipGraph] getStatFunc() failed with err %d", status);
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "[hipGraph] getStatFunc() failed with err %d", status);
}
return func;
}
@@ -771,6 +770,7 @@ class hipGraphKernelNode : public hipGraphNode {
if (copyParams(pNodeParams) != hipSuccess) {
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "[hipGraph] Failed to copy params");
}
memset(&kernelAttr_, 0, sizeof(kernelAttr_));
}
~hipGraphKernelNode() {
@@ -808,6 +808,10 @@ class hipGraphKernelNode : public hipGraphNode {
ClPrint(amd::LOG_ERROR, amd::LOG_CODE,
"[hipGraph] Failed to allocate memory to copy params");
}
status = CopyAttr(&rhs);
if (status != hipSuccess) {
ClPrint(amd::LOG_ERROR, amd::LOG_CODE, "[hipGraph] Failed to during copy attrs");
}
}
hipGraphNode* clone() const {
@@ -838,10 +842,7 @@ class hipGraphKernelNode : public hipGraphNode {
return status;
}
void GetParams(hipKernelNodeParams* params) {
*params = *pKernelParams_;
}
void GetParams(hipKernelNodeParams* params) { *params = *pKernelParams_; }
hipError_t SetParams(const hipKernelNodeParams* params) {
// updates kernel params
@@ -883,26 +884,46 @@ class hipGraphKernelNode : public hipGraphNode {
kernelAttr_.accessPolicyWindow.hitRatio = params->accessPolicyWindow.hitRatio;
kernelAttr_.accessPolicyWindow.missProp = params->accessPolicyWindow.missProp;
kernelAttr_.accessPolicyWindow.num_bytes = params->accessPolicyWindow.num_bytes;
} else if (attr == hipKernelNodeAttributeCooperative)
{
} else if (attr == hipKernelNodeAttributeCooperative) {
kernelAttr_.cooperative = params->cooperative;
}
kernelAttrInUse_ = attr;
return hipSuccess;
}
hipError_t GetAttrParams(hipKernelNodeAttrID attr, hipKernelNodeAttrValue* params) {
// Get kernel attr params
if (kernelAttrInUse_ != attr) return hipErrorInvalidValue;
if (attr == hipKernelNodeAttributeAccessPolicyWindow) {
params->accessPolicyWindow.base_ptr = kernelAttr_.accessPolicyWindow.base_ptr;
params->accessPolicyWindow.hitProp = kernelAttr_.accessPolicyWindow.hitProp;
params->accessPolicyWindow.hitRatio = kernelAttr_.accessPolicyWindow.hitRatio;
params->accessPolicyWindow.missProp = kernelAttr_.accessPolicyWindow.missProp;
params->accessPolicyWindow.num_bytes = kernelAttr_.accessPolicyWindow.num_bytes;
} else if (attr == hipKernelNodeAttributeCooperative)
{
} else if (attr == hipKernelNodeAttributeCooperative) {
params->cooperative = kernelAttr_.cooperative;
}
return hipSuccess;
}
hipError_t CopyAttr(const hipGraphKernelNode* srcNode) {
if(srcNode->kernelAttrInUse_ != kernelAttrInUse_) {
return hipErrorInvalidContext;
}
switch (kernelAttrInUse_) {
case hipKernelNodeAttributeAccessPolicyWindow:
kernelAttr_.accessPolicyWindow.base_ptr = srcNode->kernelAttr_.accessPolicyWindow.base_ptr;
kernelAttr_.accessPolicyWindow.hitProp = srcNode->kernelAttr_.accessPolicyWindow.hitProp;
kernelAttr_.accessPolicyWindow.hitRatio = srcNode->kernelAttr_.accessPolicyWindow.hitRatio;
kernelAttr_.accessPolicyWindow.missProp = srcNode->kernelAttr_.accessPolicyWindow.missProp;
kernelAttr_.accessPolicyWindow.num_bytes = srcNode->kernelAttr_.accessPolicyWindow.num_bytes;
break;
case hipKernelNodeAttributeCooperative:
kernelAttr_.cooperative = srcNode->kernelAttr_.cooperative;
break;
default:
return hipErrorInvalidValue;
}
return hipSuccess;
}
// ToDo: use this when commands are cloned and command params are to be updated
hipError_t SetCommandParams(const hipKernelNodeParams* params) {
// updates kernel params