From d3918208956e2fb38c7731ec80ffa450fd60fd0f Mon Sep 17 00:00:00 2001 From: Rahul Manocha Date: Wed, 10 Apr 2024 13:09:04 -0700 Subject: [PATCH] [SWDEV-454655] - Fix for ExecMempcyNodeSetParams1D Negative testcase Change-Id: Id24e27fee7a519edeed28bd937fb7ca31195de97 --- catch/hipTestMain/config/config_amd_linux | 1 - .../hipGraphExecMemcpyNodeSetParams1D_old.cc | 92 ++++++++++--------- 2 files changed, 47 insertions(+), 46 deletions(-) diff --git a/catch/hipTestMain/config/config_amd_linux b/catch/hipTestMain/config/config_amd_linux index 161689408e..63ddb3dcc6 100644 --- a/catch/hipTestMain/config/config_amd_linux +++ b/catch/hipTestMain/config/config_amd_linux @@ -191,7 +191,6 @@ "Unit_hipGraphicsUnmapResources_Negative_Parameters", "Unit_hipGraphicsUnregisterResource_Negative_Parameters", "SWDEV-443760: This test fails when device memory is used for kernel args", - "Unit_hipGraphExecMemcpyNodeSetParams1D_Negative", "=== Below tests fail in external CI for PR https://github.com/ROCm-Developer-Tools/hip-tests/pull/356 ===", "Unit_Device_Complex_Unary_Negative_Parameters_RTC", "Unit_Device_Complex_Binary_Negative_Parameters_RTC", diff --git a/catch/unit/graph/hipGraphExecMemcpyNodeSetParams1D_old.cc b/catch/unit/graph/hipGraphExecMemcpyNodeSetParams1D_old.cc index 0a28e6f31e..752fc9677e 100644 --- a/catch/unit/graph/hipGraphExecMemcpyNodeSetParams1D_old.cc +++ b/catch/unit/graph/hipGraphExecMemcpyNodeSetParams1D_old.cc @@ -114,6 +114,7 @@ TEST_CASE("Unit_hipGraphExecMemcpyNodeSetParams1D_Functional") { free(hData); } + /* Test verifies hipGraphExecMemcpyNodeSetParams1D API Negative scenarios. */ TEST_CASE("Unit_hipGraphExecMemcpyNodeSetParams1D_Negative") { @@ -121,81 +122,82 @@ TEST_CASE("Unit_hipGraphExecMemcpyNodeSetParams1D_Negative") { constexpr size_t Nbytes = N * sizeof(int); LinearAllocGuard A_d(LinearAllocs::hipMalloc, Nbytes); - LinearAllocGuard A_h(LinearAllocs::malloc, Nbytes); - memset(A_h.ptr(), 0, Nbytes); + LinearAllocGuard B_d(LinearAllocs::hipMalloc, Nbytes); hipGraph_t graph; HIP_CHECK(hipGraphCreate(&graph, 0)); - hipGraphNode_t memcpyH2D; - HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyH2D, graph, nullptr, 0, A_d.ptr(), A_h.ptr(), - Nbytes, hipMemcpyHostToDevice)); + hipGraphNode_t memcpyD2D; + HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyD2D, graph, nullptr, 0, A_d.ptr(), B_d.ptr(), + Nbytes, hipMemcpyDeviceToDevice)); // Instantiate the graph hipGraphExec_t graphExec; HIP_CHECK(hipGraphInstantiate(&graphExec, graph, NULL, NULL, 0)); SECTION("Pass hGraphExec as nullptr") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(nullptr, memcpyH2D, A_d.ptr(), - A_h.ptr(), Nbytes, - hipMemcpyHostToDevice), + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(nullptr, memcpyD2D, A_d.ptr(), + B_d.ptr(), Nbytes, + hipMemcpyDeviceToDevice), hipErrorInvalidValue); } SECTION("Pass GraphNode as nullptr") { HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, nullptr, A_d.ptr(), - A_h.ptr(), Nbytes, - hipMemcpyHostToDevice), - hipErrorInvalidValue); - } - - SECTION("Pass destination ptr is nullptr") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, - nullptr, A_h.ptr(), Nbytes, - hipMemcpyHostToDevice), - hipErrorInvalidValue); - } - - SECTION("Pass source ptr is nullptr") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, A_d.ptr(), - nullptr, Nbytes, - hipMemcpyHostToDevice), - hipErrorInvalidValue); - } - - SECTION("Pass count as zero") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, A_d.ptr(), - A_h.ptr(), 0, - hipMemcpyHostToDevice), - hipErrorInvalidValue); - } - - SECTION("Pass same pointer as source ptr and destination ptr") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, A_d.ptr(), - A_d.ptr(), Nbytes, + B_d.ptr(), Nbytes, hipMemcpyDeviceToDevice), hipErrorInvalidValue); } + SECTION("Pass destination ptr is nullptr") { + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, + nullptr, B_d.ptr(), Nbytes, + hipMemcpyDeviceToDevice), + hipErrorInvalidValue); + } + + SECTION("Pass source ptr is nullptr") { + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, A_d.ptr(), + nullptr, Nbytes, + hipMemcpyDeviceToDevice), + hipErrorInvalidValue); + } + + SECTION("Pass count as zero") { + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, A_d.ptr(), + B_d.ptr(), 0, + hipMemcpyDeviceToDevice), + hipErrorInvalidValue); + } + +#if HT_AMD // same pointers allowed on nvidia + SECTION("Pass same pointer as source ptr and destination ptr") { + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, A_d.ptr(), + A_d.ptr(), Nbytes, + hipMemcpyDeviceToDevice), + hipErrorInvalidValue); + } +#endif + SECTION("Pass overlap memory where destination ptr is ahead of source ptr") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, A_d.ptr(), - A_d.ptr() - 5, Nbytes, + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, A_d.ptr() + 5, + A_d.ptr() , Nbytes, hipMemcpyDeviceToDevice), hipErrorInvalidValue); } SECTION("Pass overlap memory where source ptr is ahead of destination ptr") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, - A_d.ptr() + 5, A_d.ptr(), Nbytes, + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, + A_d.ptr(), A_d.ptr() + 5, Nbytes, hipMemcpyDeviceToDevice), hipErrorInvalidValue); } SECTION("Copy more than allocated memory") { - HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyH2D, A_d.ptr(), - A_h.ptr(), Nbytes + 8, - hipMemcpyHostToDevice), + HIP_CHECK_ERROR(hipGraphExecMemcpyNodeSetParams1D(graphExec, memcpyD2D, A_d.ptr(), + B_d.ptr(), Nbytes + 8, + hipMemcpyDeviceToDevice), hipErrorInvalidValue); } HIP_CHECK(hipGraphExecDestroy(graphExec)); HIP_CHECK(hipGraphDestroy(graph)); -} +} \ No newline at end of file