diff --git a/projects/clr/hipamd/include/hip/amd_detail/hip_api_trace.hpp b/projects/clr/hipamd/include/hip/amd_detail/hip_api_trace.hpp index ba0288c02f..f103bb08f3 100644 --- a/projects/clr/hipamd/include/hip/amd_detail/hip_api_trace.hpp +++ b/projects/clr/hipamd/include/hip/amd_detail/hip_api_trace.hpp @@ -209,6 +209,9 @@ typedef hipError_t (*t_hipGraphAddDependencies)(hipGraph_t graph, const hipGraph typedef hipError_t (*t_hipGraphAddEmptyNode)(hipGraphNode_t* pGraphNode, hipGraph_t graph, const hipGraphNode_t* pDependencies, size_t numDependencies); +typedef hipError_t (*t_hipDrvGraphAddMemsetNode)(hipGraphNode_t* phGraphNode, hipGraph_t hGraph, + const hipGraphNode_t* dependencies, size_t numDependencies, + const HIP_MEMSET_NODE_PARAMS* memsetParams, hipCtx_t ctx); typedef hipError_t (*t_hipGraphAddEventRecordNode)(hipGraphNode_t* pGraphNode, hipGraph_t graph, const hipGraphNode_t* pDependencies, size_t numDependencies, hipEvent_t event); @@ -1001,6 +1004,7 @@ struct HipDispatchTable { t_hipGraphAddChildGraphNode hipGraphAddChildGraphNode_fn; t_hipGraphAddDependencies hipGraphAddDependencies_fn; t_hipGraphAddEmptyNode hipGraphAddEmptyNode_fn; + t_hipDrvGraphAddMemsetNode hipDrvGraphAddMemsetNode_fn; t_hipGraphAddEventRecordNode hipGraphAddEventRecordNode_fn; t_hipGraphAddEventWaitNode hipGraphAddEventWaitNode_fn; t_hipGraphAddHostNode hipGraphAddHostNode_fn; diff --git a/projects/clr/hipamd/src/amdhip.def b/projects/clr/hipamd/src/amdhip.def index 490e44c85e..4ff72e19b8 100644 --- a/projects/clr/hipamd/src/amdhip.def +++ b/projects/clr/hipamd/src/amdhip.def @@ -449,3 +449,4 @@ hipGraphMemAllocNodeGetParams hipGraphAddMemFreeNode hipGraphMemFreeNodeGetParams hipDrvGraphAddMemcpyNode +hipDrvGraphAddMemsetNode diff --git a/projects/clr/hipamd/src/hip_api_trace.cpp b/projects/clr/hipamd/src/hip_api_trace.cpp index 8394a0676e..c2dde06dcf 100644 --- a/projects/clr/hipamd/src/hip_api_trace.cpp +++ b/projects/clr/hipamd/src/hip_api_trace.cpp @@ -330,6 +330,9 @@ hipError_t hipImportExternalMemory(hipExternalMemory_t* extMem_out, const hipExternalMemoryHandleDesc* memHandleDesc); hipError_t hipImportExternalSemaphore(hipExternalSemaphore_t* extSem_out, const hipExternalSemaphoreHandleDesc* semHandleDesc); +hipError_t hipDrvGraphAddMemsetNode(hipGraphNode_t* phGraphNode, hipGraph_t hGraph, + const hipGraphNode_t* dependencies, size_t numDependencies, + const HIP_MEMSET_NODE_PARAMS* memsetParams, hipCtx_t ctx); hipError_t hipInit(unsigned int flags); hipError_t hipIpcCloseMemHandle(void* devPtr); hipError_t hipIpcGetEventHandle(hipIpcEventHandle_t* handle, hipEvent_t event); @@ -1193,6 +1196,8 @@ void UpdateHipDispatchTable(HipDispatchTable* ptrDispatchTable) { ptrDispatchTable->hipStreamGetCaptureInfo_v2_spt_fn = hip::hipStreamGetCaptureInfo_v2_spt; ptrDispatchTable->hipLaunchHostFunc_spt_fn = hip::hipLaunchHostFunc_spt; ptrDispatchTable->hipGetStreamDeviceId_fn = hip::hipGetStreamDeviceId; + ptrDispatchTable->hipDrvGraphAddMemsetNode_fn = hip::hipDrvGraphAddMemsetNode; + } namespace hip { diff --git a/projects/clr/hipamd/src/hip_graph.cpp b/projects/clr/hipamd/src/hip_graph.cpp index 1334949a95..ae40a89664 100644 --- a/projects/clr/hipamd/src/hip_graph.cpp +++ b/projects/clr/hipamd/src/hip_graph.cpp @@ -160,7 +160,6 @@ hipError_t ihipGraphAddMemsetNode(hip::GraphNode** pGraphNode, hip::Graph* graph pMemsetParams->elementSize != sizeof(int32_t)) { return hipErrorInvalidValue; } - hipError_t status; status = ihipGraphMemsetParams_validate(pMemsetParams); if (status != hipSuccess) { @@ -1138,6 +1137,31 @@ hipError_t hipGraphAddMemsetNode(hipGraphNode_t* pGraphNode, hipGraph_t graph, HIP_RETURN(status); } +hipError_t hipDrvGraphAddMemsetNode(hipGraphNode_t* phGraphNode, hipGraph_t hGraph, + const hipGraphNode_t* dependencies, size_t numDependencies, + const HIP_MEMSET_NODE_PARAMS* memsetParams, hipCtx_t ctx) { + HIP_INIT_API(hipDrvGraphAddMemsetNode, phGraphNode, hGraph, dependencies, numDependencies, + memsetParams, ctx); + if (phGraphNode == nullptr || hGraph == nullptr || + (numDependencies > 0 && dependencies == nullptr)) { + HIP_RETURN(hipErrorInvalidValue); + } + hip::GraphNode* node; + hipMemsetParams pmemsetParams; + pmemsetParams.dst = reinterpret_cast(memsetParams->dst); + pmemsetParams.elementSize = memsetParams->elementSize; + pmemsetParams.height = memsetParams->height; + pmemsetParams.pitch = memsetParams->pitch; + pmemsetParams.value = memsetParams->value; + pmemsetParams.width = memsetParams->width; + hipError_t status = + ihipGraphAddMemsetNode(&node, reinterpret_cast(hGraph), + reinterpret_cast(dependencies), + numDependencies, &pmemsetParams, false); + *phGraphNode = reinterpret_cast(node); + HIP_RETURN(status); +} + hipError_t hipGraphAddEmptyNode(hipGraphNode_t* pGraphNode, hipGraph_t graph, const hipGraphNode_t* pDependencies, size_t numDependencies) { HIP_INIT_API(hipGraphAddEmptyNode, pGraphNode, graph, pDependencies, numDependencies); diff --git a/projects/clr/hipamd/src/hip_graph_internal.hpp b/projects/clr/hipamd/src/hip_graph_internal.hpp index ab598c2179..a78779aa3f 100644 --- a/projects/clr/hipamd/src/hip_graph_internal.hpp +++ b/projects/clr/hipamd/src/hip_graph_internal.hpp @@ -1668,7 +1668,6 @@ class GraphMemcpyNodeToSymbol : public GraphMemcpyNode1D { memcpyNode->kind_); } }; - class GraphMemsetNode : public GraphNode { hipMemsetParams memsetParams_; @@ -1749,7 +1748,16 @@ class GraphMemsetNode : public GraphNode { std::memcpy(params, &memsetParams_, sizeof(hipMemsetParams)); } - hipError_t SetParams(const hipMemsetParams* params, bool isExec = false) { + void GetParams(HIP_MEMSET_NODE_PARAMS* params) { + params->dst = memsetParams_.dst; + params->elementSize = memsetParams_.elementSize; + params->height = memsetParams_.height; + params->pitch = memsetParams_.pitch; + params->value = memsetParams_.value; + params->width = memsetParams_.width; + } + + hipError_t SetParamsInternal(const hipMemsetParams* params, bool isExec) { hipError_t hip_error = hipSuccess; hip_error = ihipGraphMemsetParams_validate(params); if (hip_error != hipSuccess) { @@ -1811,7 +1819,19 @@ class GraphMemsetNode : public GraphNode { std::memcpy(&memsetParams_, params, sizeof(hipMemsetParams)); return hipSuccess; } - + hipError_t SetParams(const hipMemsetParams* params, bool isExec = false) { + return SetParamsInternal(params, isExec); + } + hipError_t SetParams(const HIP_MEMSET_NODE_PARAMS* params, bool isExec = false) { + hipMemsetParams pmemsetParams; + pmemsetParams.dst = params->dst; + pmemsetParams.elementSize = params->elementSize; + pmemsetParams.height = params->height; + pmemsetParams.pitch = params->pitch; + pmemsetParams.value = params->value; + pmemsetParams.width = params->width; + return SetParamsInternal(&pmemsetParams, isExec); + } hipError_t SetParams(GraphNode* node) { const GraphMemsetNode* memsetNode = static_cast(node); return SetParams(&memsetNode->memsetParams_); diff --git a/projects/clr/hipamd/src/hip_hcc.map.in b/projects/clr/hipamd/src/hip_hcc.map.in index ce160ccaff..164fab1bbe 100644 --- a/projects/clr/hipamd/src/hip_hcc.map.in +++ b/projects/clr/hipamd/src/hip_hcc.map.in @@ -526,6 +526,7 @@ global: hipArrayGetDescriptor; hipArray3DGetDescriptor; hipDrvGraphAddMemcpyNode; + hipDrvGraphAddMemsetNode; local: *; } hip_5.5; diff --git a/projects/clr/hipamd/src/hip_table_interface.cpp b/projects/clr/hipamd/src/hip_table_interface.cpp index 22065cc9aa..7400de6ef7 100644 --- a/projects/clr/hipamd/src/hip_table_interface.cpp +++ b/projects/clr/hipamd/src/hip_table_interface.cpp @@ -798,6 +798,12 @@ hipError_t hipImportExternalSemaphore(hipExternalSemaphore_t* extSem_out, const hipExternalSemaphoreHandleDesc* semHandleDesc) { return hip::GetHipDispatchTable()->hipImportExternalSemaphore_fn(extSem_out, semHandleDesc); } +hipError_t hipDrvGraphAddMemsetNode(hipGraphNode_t* phGraphNode, hipGraph_t hGraph, + const hipGraphNode_t* dependencies, size_t numDependencies, + const HIP_MEMSET_NODE_PARAMS* memsetParams, hipCtx_t ctx) { + return hip::GetHipDispatchTable()->hipDrvGraphAddMemsetNode_fn(phGraphNode, hGraph, + dependencies, numDependencies, memsetParams, ctx); +} hipError_t hipInit(unsigned int flags) { return hip::GetHipDispatchTable()->hipInit_fn(flags); } hipError_t hipIpcCloseMemHandle(void* devPtr) { return hip::GetHipDispatchTable()->hipIpcCloseMemHandle_fn(devPtr);