SWDEV-470698 - fix formatting, add format check workflow (#657)
This commit is contained in:
committed by
GitHub
parent
5840940caa
commit
f7338717ae
@@ -18,19 +18,13 @@ THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
hipGraphInstantiateWithFlags(hipGraphExec_t* pGraphExec, hipGraph_t graph, unsigned long long flags);
|
||||
Testcase Scenarios of hipGraphInstantiateWithFlags API:
|
||||
Negative:
|
||||
1) Pass nullptr to pGraphExec
|
||||
2) Pass nullptr to graph
|
||||
4) Pass invalid flag
|
||||
Functional:
|
||||
1) Create dependencies graph and instantiate the graph
|
||||
2) Create graph in one GPU device and instantiate, launch in peer GPU device
|
||||
3) Create stream capture graph and instantite the graph
|
||||
4) Create stream capture graph in one GPU device and instantite the graph launch
|
||||
in peer GPU device
|
||||
Mapping is missing for NVIDIA platform hence skipping the testcases
|
||||
hipGraphInstantiateWithFlags(hipGraphExec_t* pGraphExec, hipGraph_t graph, unsigned long long
|
||||
flags); Testcase Scenarios of hipGraphInstantiateWithFlags API: Negative: 1) Pass nullptr to
|
||||
pGraphExec 2) Pass nullptr to graph 4) Pass invalid flag Functional: 1) Create dependencies graph
|
||||
and instantiate the graph 2) Create graph in one GPU device and instantiate, launch in peer GPU
|
||||
device 3) Create stream capture graph and instantite the graph 4) Create stream capture graph in one
|
||||
GPU device and instantite the graph launch in peer GPU device Mapping is missing for NVIDIA
|
||||
platform hence skipping the testcases
|
||||
*/
|
||||
|
||||
#include <hip_test_common.hh>
|
||||
@@ -50,7 +44,7 @@ static constexpr size_t NBYTES = SIZE * sizeof(int);
|
||||
/**
|
||||
* In fillKernel, all elements of the array filled with given value
|
||||
*/
|
||||
static __global__ void fillKernel(int *arr, int size, int value) {
|
||||
static __global__ void fillKernel(int* arr, int size, int value) {
|
||||
int offset = blockDim.x * blockIdx.x + threadIdx.x;
|
||||
int stride = blockDim.x * gridDim.x;
|
||||
for (int i = offset; i < size; i += stride) {
|
||||
@@ -61,7 +55,7 @@ static __global__ void fillKernel(int *arr, int size, int value) {
|
||||
/**
|
||||
* In doubleKernel, all elements of the array doubled with its value
|
||||
*/
|
||||
static __global__ void doubleKernel(int *arr, int size) {
|
||||
static __global__ void doubleKernel(int* arr, int size) {
|
||||
int offset = blockDim.x * blockIdx.x + threadIdx.x;
|
||||
int stride = blockDim.x * gridDim.x;
|
||||
for (int i = offset; i < size; i += stride) {
|
||||
@@ -75,14 +69,12 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_Negative") {
|
||||
SECTION("Passing nullptr pGraphExec") {
|
||||
hipGraph_t graph;
|
||||
HIP_CHECK(hipGraphCreate(&graph, 0));
|
||||
REQUIRE(hipGraphInstantiateWithFlags(nullptr,
|
||||
graph, 0) == hipErrorInvalidValue);
|
||||
REQUIRE(hipGraphInstantiateWithFlags(nullptr, graph, 0) == hipErrorInvalidValue);
|
||||
}
|
||||
|
||||
SECTION("Passing nullptr to graph") {
|
||||
hipGraphExec_t graphExec;
|
||||
REQUIRE(hipGraphInstantiateWithFlags(&graphExec,
|
||||
nullptr, 0) == hipErrorInvalidValue);
|
||||
REQUIRE(hipGraphInstantiateWithFlags(&graphExec, nullptr, 0) == hipErrorInvalidValue);
|
||||
}
|
||||
|
||||
SECTION("Passing Invalid flag") {
|
||||
@@ -126,8 +118,7 @@ void GraphInstantiateWithFlags_DependencyGraph(bool ctxt_change = false) {
|
||||
memsetParams.elementSize = sizeof(char);
|
||||
memsetParams.width = Nbytes;
|
||||
memsetParams.height = 1;
|
||||
HIP_CHECK(hipGraphAddMemsetNode(&memset_A, graph, nullptr, 0,
|
||||
&memsetParams));
|
||||
HIP_CHECK(hipGraphAddMemsetNode(&memset_A, graph, nullptr, 0, &memsetParams));
|
||||
|
||||
memset(&memsetParams, 0, sizeof(memsetParams));
|
||||
memsetParams.dst = reinterpret_cast<void*>(B_d);
|
||||
@@ -136,37 +127,33 @@ void GraphInstantiateWithFlags_DependencyGraph(bool ctxt_change = false) {
|
||||
memsetParams.elementSize = sizeof(char);
|
||||
memsetParams.width = Nbytes;
|
||||
memsetParams.height = 1;
|
||||
HIP_CHECK(hipGraphAddMemsetNode(&memset_B, graph, nullptr, 0,
|
||||
&memsetParams));
|
||||
HIP_CHECK(hipGraphAddMemsetNode(&memset_B, graph, nullptr, 0, &memsetParams));
|
||||
|
||||
void* kernelArgs1[] = {&C_d, &memsetVal, reinterpret_cast<void *>(&NElem)};
|
||||
kernelNodeParams.func =
|
||||
reinterpret_cast<void *>(HipTest::memsetReverse<int>);
|
||||
void* kernelArgs1[] = {&C_d, &memsetVal, reinterpret_cast<void*>(&NElem)};
|
||||
kernelNodeParams.func = reinterpret_cast<void*>(HipTest::memsetReverse<int>);
|
||||
kernelNodeParams.gridDim = dim3(blocks);
|
||||
kernelNodeParams.blockDim = dim3(threadsPerBlock);
|
||||
kernelNodeParams.sharedMemBytes = 0;
|
||||
kernelNodeParams.kernelParams = reinterpret_cast<void**>(kernelArgs1);
|
||||
kernelNodeParams.extra = nullptr;
|
||||
HIP_CHECK(hipGraphAddKernelNode(&memsetKer_C, graph, nullptr, 0,
|
||||
&kernelNodeParams));
|
||||
HIP_CHECK(hipGraphAddKernelNode(&memsetKer_C, graph, nullptr, 0, &kernelNodeParams));
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyH2D_A, graph, nullptr, 0, A_d, A_h,
|
||||
Nbytes, hipMemcpyHostToDevice));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyH2D_B, graph, nullptr, 0, B_d, B_h,
|
||||
Nbytes, hipMemcpyHostToDevice));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyH2D_A, graph, nullptr, 0, A_d, A_h, Nbytes,
|
||||
hipMemcpyHostToDevice));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyH2D_B, graph, nullptr, 0, B_d, B_h, Nbytes,
|
||||
hipMemcpyHostToDevice));
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyD2H_C, graph, nullptr, 0, C_h, C_d,
|
||||
Nbytes, hipMemcpyDeviceToHost));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyD2H_C, graph, nullptr, 0, C_h, C_d, Nbytes,
|
||||
hipMemcpyDeviceToHost));
|
||||
|
||||
void* kernelArgs2[] = {&A_d, &B_d, &C_d, reinterpret_cast<void *>(&NElem)};
|
||||
kernelNodeParams.func = reinterpret_cast<void *>(HipTest::vectorADD<int>);
|
||||
void* kernelArgs2[] = {&A_d, &B_d, &C_d, reinterpret_cast<void*>(&NElem)};
|
||||
kernelNodeParams.func = reinterpret_cast<void*>(HipTest::vectorADD<int>);
|
||||
kernelNodeParams.gridDim = dim3(blocks);
|
||||
kernelNodeParams.blockDim = dim3(threadsPerBlock);
|
||||
kernelNodeParams.sharedMemBytes = 0;
|
||||
kernelNodeParams.kernelParams = reinterpret_cast<void**>(kernelArgs2);
|
||||
kernelNodeParams.extra = nullptr;
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernel_vecAdd, graph, nullptr, 0,
|
||||
&kernelNodeParams));
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernel_vecAdd, graph, nullptr, 0, &kernelNodeParams));
|
||||
|
||||
// Create dependencies
|
||||
HIP_CHECK(hipGraphAddDependencies(graph, &memset_A, &memcpyH2D_A, 1));
|
||||
@@ -212,7 +199,7 @@ void GraphInstantiateWithFlags_StreamCapture(bool deviceContextChg = false) {
|
||||
|
||||
// Fill with Phi + i
|
||||
for (size_t i = 0; i < N; i++) {
|
||||
A_h[i] = 1.618f + i;
|
||||
A_h[i] = 1.618f + i;
|
||||
}
|
||||
HIP_CHECK(hipMalloc(&A_d, Nbytes));
|
||||
HIP_CHECK(hipMalloc(&C_d, Nbytes));
|
||||
@@ -229,8 +216,8 @@ void GraphInstantiateWithFlags_StreamCapture(bool deviceContextChg = false) {
|
||||
HIP_CHECK(hipMemcpyAsync(A_d, A_h, Nbytes, hipMemcpyHostToDevice, stream));
|
||||
|
||||
HIP_CHECK(hipMemsetAsync(C_d, 0, Nbytes, stream));
|
||||
hipLaunchKernelGGL(HipTest::vector_square, dim3(blocks),
|
||||
dim3(threadsPerBlock), 0, stream, A_d, C_d, N);
|
||||
hipLaunchKernelGGL(HipTest::vector_square, dim3(blocks), dim3(threadsPerBlock), 0, stream, A_d,
|
||||
C_d, N);
|
||||
HIP_CHECK(hipMemcpyAsync(C_h, C_d, Nbytes, hipMemcpyDeviceToHost, stream));
|
||||
|
||||
HIP_CHECK(hipStreamEndCapture(stream, &graph));
|
||||
@@ -366,14 +353,13 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_FlagAutoFreeOnLaunch_check") {
|
||||
allocParam.poolProps.location.id = 0;
|
||||
allocParam.poolProps.location.type = hipMemLocationTypeDevice;
|
||||
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&allocNodeA, graph, nullptr,
|
||||
0, &allocParam));
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&allocNodeA, graph, nullptr, 0, &allocParam));
|
||||
REQUIRE(allocParam.dptr != nullptr);
|
||||
int *A_d = reinterpret_cast<int *>(allocParam.dptr);
|
||||
int* A_d = reinterpret_cast<int*>(allocParam.dptr);
|
||||
|
||||
// Instantiate with Flag and launch the graph
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(&graphExec, graph,
|
||||
hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
HIP_CHECK(
|
||||
hipGraphInstantiateWithFlags(&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
|
||||
HIP_CHECK(hipGraphLaunch(graphExec, stream));
|
||||
HIP_CHECK(hipStreamSynchronize(stream));
|
||||
@@ -425,7 +411,7 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_FlagAutoFreeOnLaunch_check") {
|
||||
TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchInLoop") {
|
||||
constexpr size_t NBytes = 1024 * 1024 * 1024;
|
||||
|
||||
void *devMem = nullptr;
|
||||
void* devMem = nullptr;
|
||||
|
||||
hipStream_t stream;
|
||||
HIP_CHECK(hipStreamCreate(&stream));
|
||||
@@ -442,13 +428,12 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchInLoop") {
|
||||
memAllocNodeParams.poolProps.location.id = 0;
|
||||
memAllocNodeParams.bytesize = NBytes;
|
||||
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0,
|
||||
&memAllocNodeParams));
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0, &memAllocNodeParams));
|
||||
devMem = memAllocNodeParams.dptr;
|
||||
|
||||
hipGraphExec_t graphExec;
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(
|
||||
&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
HIP_CHECK(
|
||||
hipGraphInstantiateWithFlags(&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
|
||||
// Launch the graph in a loop
|
||||
for (int i = 0; i < 100; i++) {
|
||||
@@ -457,11 +442,11 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchInLoop") {
|
||||
|
||||
REQUIRE(devMem != nullptr);
|
||||
|
||||
#if HT_AMD
|
||||
#if HT_AMD
|
||||
size_t sizeToCheck = -1;
|
||||
HIP_CHECK(hipMemPtrGetInfo(devMem, &sizeToCheck));
|
||||
REQUIRE(sizeToCheck == NBytes);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
HIP_CHECK(hipFree(devMem));
|
||||
@@ -488,11 +473,11 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchInLoop") {
|
||||
TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchFillKernel") {
|
||||
int value = 100;
|
||||
|
||||
int *hostMemDst = new int[SIZE];
|
||||
int* hostMemDst = new int[SIZE];
|
||||
REQUIRE(hostMemDst != nullptr);
|
||||
std::fill(hostMemDst, hostMemDst + SIZE, 0);
|
||||
|
||||
int *devMem = nullptr;
|
||||
int* devMem = nullptr;
|
||||
|
||||
hipStream_t stream;
|
||||
HIP_CHECK(hipStreamCreate(&stream));
|
||||
@@ -509,49 +494,45 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchFillKernel") {
|
||||
memAllocNodeParams.poolProps.location.id = 0;
|
||||
memAllocNodeParams.bytesize = NBYTES;
|
||||
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0,
|
||||
&memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int *>(memAllocNodeParams.dptr);
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0, &memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int*>(memAllocNodeParams.dptr);
|
||||
REQUIRE(devMem != nullptr);
|
||||
|
||||
::std::vector<hipGraphNode_t> kernelNodeDependencies;
|
||||
kernelNodeDependencies.push_back(memAllocNode);
|
||||
|
||||
hipKernelNodeParams kernelNodeParams{};
|
||||
kernelNodeParams.func = reinterpret_cast<void *>(fillKernel);
|
||||
kernelNodeParams.func = reinterpret_cast<void*>(fillKernel);
|
||||
kernelNodeParams.gridDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.blockDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.sharedMemBytes = 0;
|
||||
int size = SIZE;
|
||||
void *kernelArgs[3] = {reinterpret_cast<void *>(&devMem),
|
||||
reinterpret_cast<void *>(&size),
|
||||
reinterpret_cast<void *>(&value)};
|
||||
void* kernelArgs[3] = {reinterpret_cast<void*>(&devMem), reinterpret_cast<void*>(&size),
|
||||
reinterpret_cast<void*>(&value)};
|
||||
kernelNodeParams.kernelParams = kernelArgs;
|
||||
kernelNodeParams.extra = nullptr;
|
||||
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph,
|
||||
kernelNodeDependencies.data(), kernelNodeDependencies.size(),
|
||||
&kernelNodeParams));
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph, kernelNodeDependencies.data(),
|
||||
kernelNodeDependencies.size(), &kernelNodeParams));
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeD2HDependencies;
|
||||
memcpyNodeD2HDependencies.push_back(kernelNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph,
|
||||
memcpyNodeD2HDependencies.data(), memcpyNodeD2HDependencies.size(),
|
||||
hostMemDst, devMem, NBYTES, hipMemcpyDeviceToHost));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph, memcpyNodeD2HDependencies.data(),
|
||||
memcpyNodeD2HDependencies.size(), hostMemDst, devMem, NBYTES,
|
||||
hipMemcpyDeviceToHost));
|
||||
|
||||
hipGraphExec_t graphExec;
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(
|
||||
&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
HIP_CHECK(
|
||||
hipGraphInstantiateWithFlags(&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
|
||||
for (int launch = 1; launch <= 10; launch++) {
|
||||
HIP_CHECK(hipGraphLaunch(graphExec, stream));
|
||||
HIP_CHECK(hipStreamSynchronize(stream));
|
||||
|
||||
for (int idx = 0; idx < SIZE; idx++) {
|
||||
INFO("For Launch : " << launch << ", At index : " << idx <<
|
||||
", Got value : " << hostMemDst[idx] <<
|
||||
", Expected value : " << value << "\n");
|
||||
INFO("For Launch : " << launch << ", At index : " << idx << ", Got value : "
|
||||
<< hostMemDst[idx] << ", Expected value : " << value << "\n");
|
||||
REQUIRE(hostMemDst[idx] == value);
|
||||
}
|
||||
}
|
||||
@@ -583,13 +564,13 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchFillKernel") {
|
||||
* - unit/graph/hipGraphInstantiateWithFlags.cc
|
||||
*/
|
||||
TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchDoubleKernel") {
|
||||
int *hostMemSrc = new int[SIZE];
|
||||
int* hostMemSrc = new int[SIZE];
|
||||
REQUIRE(hostMemSrc != nullptr);
|
||||
|
||||
int *hostMemDst = new int[SIZE];
|
||||
int* hostMemDst = new int[SIZE];
|
||||
REQUIRE(hostMemDst != nullptr);
|
||||
|
||||
int *devMem = nullptr;
|
||||
int* devMem = nullptr;
|
||||
|
||||
hipStream_t stream;
|
||||
HIP_CHECK(hipStreamCreate(&stream));
|
||||
@@ -606,47 +587,43 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchDoubleKernel") {
|
||||
memAllocNodeParams.poolProps.location.id = 0;
|
||||
memAllocNodeParams.bytesize = NBYTES;
|
||||
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0,
|
||||
&memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int *>(memAllocNodeParams.dptr);
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0, &memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int*>(memAllocNodeParams.dptr);
|
||||
REQUIRE(devMem != nullptr);
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeH2DDependencies;
|
||||
memcpyNodeH2DDependencies.push_back(memAllocNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2D, graph,
|
||||
memcpyNodeH2DDependencies.data(), memcpyNodeH2DDependencies.size(),
|
||||
devMem, hostMemSrc, NBYTES, hipMemcpyHostToDevice));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2D, graph, memcpyNodeH2DDependencies.data(),
|
||||
memcpyNodeH2DDependencies.size(), devMem, hostMemSrc, NBYTES,
|
||||
hipMemcpyHostToDevice));
|
||||
|
||||
::std::vector<hipGraphNode_t> kernelNodeDependencies;
|
||||
kernelNodeDependencies.push_back(memcpyNodeH2D);
|
||||
|
||||
hipKernelNodeParams kernelNodeParams{};
|
||||
kernelNodeParams.func = reinterpret_cast<void *>(doubleKernel);
|
||||
kernelNodeParams.func = reinterpret_cast<void*>(doubleKernel);
|
||||
kernelNodeParams.gridDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.blockDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.sharedMemBytes = 0;
|
||||
int size = SIZE;
|
||||
void *kernelArgs[2] = {reinterpret_cast<void *>(&devMem),
|
||||
reinterpret_cast<void *>(&size)};
|
||||
void* kernelArgs[2] = {reinterpret_cast<void*>(&devMem), reinterpret_cast<void*>(&size)};
|
||||
kernelNodeParams.kernelParams = kernelArgs;
|
||||
kernelNodeParams.extra = nullptr;
|
||||
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph,
|
||||
kernelNodeDependencies.data(), kernelNodeDependencies.size(),
|
||||
&kernelNodeParams));
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph, kernelNodeDependencies.data(),
|
||||
kernelNodeDependencies.size(), &kernelNodeParams));
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeD2HDependencies;
|
||||
memcpyNodeD2HDependencies.push_back(kernelNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(
|
||||
&memcpyNodeD2H, graph, memcpyNodeD2HDependencies.data(),
|
||||
memcpyNodeD2HDependencies.size(), hostMemDst, devMem, NBYTES,
|
||||
hipMemcpyDeviceToHost));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph, memcpyNodeD2HDependencies.data(),
|
||||
memcpyNodeD2HDependencies.size(), hostMemDst, devMem, NBYTES,
|
||||
hipMemcpyDeviceToHost));
|
||||
|
||||
hipGraphExec_t graphExec;
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(&graphExec, graph,
|
||||
hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
HIP_CHECK(
|
||||
hipGraphInstantiateWithFlags(&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
|
||||
for (int launch = 1; launch <= 10; launch++) {
|
||||
std::fill(hostMemSrc, hostMemSrc + SIZE, launch);
|
||||
@@ -656,10 +633,10 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchDoubleKernel") {
|
||||
HIP_CHECK(hipStreamSynchronize(stream));
|
||||
|
||||
for (int idx = 0; idx < SIZE; idx++) {
|
||||
INFO("For Launch : " << launch << ", At index : " << idx <<
|
||||
", Got value : " << hostMemDst[idx] <<
|
||||
", Expected value : " << (launch+launch) << "\n");
|
||||
REQUIRE(hostMemDst[idx] == (launch+launch));
|
||||
INFO("For Launch : " << launch << ", At index : " << idx
|
||||
<< ", Got value : " << hostMemDst[idx]
|
||||
<< ", Expected value : " << (launch + launch) << "\n");
|
||||
REQUIRE(hostMemDst[idx] == (launch + launch));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -693,7 +670,7 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchDoubleKernel") {
|
||||
*/
|
||||
TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchMultiProcess") {
|
||||
int shmid = shmget(IPC_PRIVATE, NBYTES, 0666);
|
||||
int *shared_mem = reinterpret_cast<int *>(shmat(shmid, NULL, 0));
|
||||
int* shared_mem = reinterpret_cast<int*>(shmat(shmid, NULL, 0));
|
||||
REQUIRE(shared_mem != nullptr);
|
||||
|
||||
std::fill(shared_mem, shared_mem + SIZE, 10);
|
||||
@@ -704,8 +681,8 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchMultiProcess") {
|
||||
REQUIRE(wait(NULL) >= 0);
|
||||
|
||||
for (int idx = 0; idx < SIZE; idx++) {
|
||||
INFO("At index : " << idx << ", Got value : " << shared_mem[idx] <<
|
||||
", Expected value : 20" << "\n");
|
||||
INFO("At index : " << idx << ", Got value : " << shared_mem[idx] << ", Expected value : 20"
|
||||
<< "\n");
|
||||
REQUIRE(shared_mem[idx] == 20);
|
||||
}
|
||||
} else { // child process
|
||||
@@ -718,7 +695,7 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchMultiProcess") {
|
||||
HIP_CHECK(hipStreamCreate(&stream));
|
||||
REQUIRE(stream != nullptr);
|
||||
|
||||
int *devMem = nullptr;
|
||||
int* devMem = nullptr;
|
||||
|
||||
hipGraphNode_t memAllocNode, memcpyNodeH2D, kernelNode, memcpyNodeD2H;
|
||||
|
||||
@@ -729,48 +706,43 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchMultiProcess") {
|
||||
memAllocNodeParams.poolProps.location.id = 0;
|
||||
memAllocNodeParams.bytesize = NBYTES;
|
||||
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0,
|
||||
&memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int *>(memAllocNodeParams.dptr);
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph, nullptr, 0, &memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int*>(memAllocNodeParams.dptr);
|
||||
REQUIRE(devMem != nullptr);
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeH2DDependencies;
|
||||
memcpyNodeH2DDependencies.push_back(memAllocNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2D, graph,
|
||||
memcpyNodeH2DDependencies.data(),
|
||||
memcpyNodeH2DDependencies.size(),
|
||||
devMem, shared_mem, NBYTES, hipMemcpyHostToDevice));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2D, graph, memcpyNodeH2DDependencies.data(),
|
||||
memcpyNodeH2DDependencies.size(), devMem, shared_mem, NBYTES,
|
||||
hipMemcpyHostToDevice));
|
||||
|
||||
::std::vector<hipGraphNode_t> kernelNodeDependencies;
|
||||
kernelNodeDependencies.push_back(memcpyNodeH2D);
|
||||
|
||||
hipKernelNodeParams kernelNodeParams{};
|
||||
kernelNodeParams.func = reinterpret_cast<void *>(doubleKernel);
|
||||
kernelNodeParams.func = reinterpret_cast<void*>(doubleKernel);
|
||||
kernelNodeParams.gridDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.blockDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.sharedMemBytes = 0;
|
||||
int size = SIZE;
|
||||
void *kernelArgs[2] = {reinterpret_cast<void *>(&devMem),
|
||||
reinterpret_cast<void *>(&size)};
|
||||
void* kernelArgs[2] = {reinterpret_cast<void*>(&devMem), reinterpret_cast<void*>(&size)};
|
||||
kernelNodeParams.kernelParams = kernelArgs;
|
||||
kernelNodeParams.extra = nullptr;
|
||||
|
||||
HIP_CHECK(hipGraphAddKernelNode(
|
||||
&kernelNode, graph, kernelNodeDependencies.data(),
|
||||
kernelNodeDependencies.size(), &kernelNodeParams));
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph, kernelNodeDependencies.data(),
|
||||
kernelNodeDependencies.size(), &kernelNodeParams));
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeD2HDependencies;
|
||||
memcpyNodeD2HDependencies.push_back(kernelNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph,
|
||||
memcpyNodeD2HDependencies.data(),
|
||||
memcpyNodeD2HDependencies.size(),
|
||||
shared_mem, devMem, NBYTES, hipMemcpyDeviceToHost));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph, memcpyNodeD2HDependencies.data(),
|
||||
memcpyNodeD2HDependencies.size(), shared_mem, devMem, NBYTES,
|
||||
hipMemcpyDeviceToHost));
|
||||
|
||||
hipGraphExec_t graphExec;
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(
|
||||
&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
HIP_CHECK(
|
||||
hipGraphInstantiateWithFlags(&graphExec, graph, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
|
||||
HIP_CHECK(hipGraphLaunch(graphExec, stream));
|
||||
HIP_CHECK(hipStreamSynchronize(stream));
|
||||
@@ -808,13 +780,13 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_AutoFreeOnLaunchMultiProcess") {
|
||||
* - unit/graph/hipGraphInstantiateWithFlags.cc
|
||||
*/
|
||||
TEST_CASE("Unit_hipGraphInstantiateWithFlags_WithDefaultAndAutoFreeOnLaunch") {
|
||||
int *hostMem1 = new int[SIZE];
|
||||
int* hostMem1 = new int[SIZE];
|
||||
REQUIRE(hostMem1 != nullptr);
|
||||
int *hostMem2 = new int[SIZE];
|
||||
int* hostMem2 = new int[SIZE];
|
||||
REQUIRE(hostMem2 != nullptr);
|
||||
int *hostMem3 = new int[SIZE];
|
||||
int* hostMem3 = new int[SIZE];
|
||||
REQUIRE(hostMem3 != nullptr);
|
||||
int *devMem = nullptr;
|
||||
int* devMem = nullptr;
|
||||
|
||||
hipStream_t stream1, stream2;
|
||||
HIP_CHECK(hipStreamCreate(&stream1));
|
||||
@@ -826,8 +798,8 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_WithDefaultAndAutoFreeOnLaunch") {
|
||||
|
||||
// Prepare graph1, graphExec1
|
||||
hipGraphNode_t memcpyNodeH2H;
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2H, graph1, nullptr, 0,
|
||||
hostMem2, hostMem1, NBYTES, hipMemcpyHostToHost));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2H, graph1, nullptr, 0, hostMem2, hostMem1, NBYTES,
|
||||
hipMemcpyHostToHost));
|
||||
|
||||
hipGraphExec_t graphExec1;
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(&graphExec1, graph1, 0));
|
||||
@@ -841,46 +813,43 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_WithDefaultAndAutoFreeOnLaunch") {
|
||||
memAllocNodeParams.poolProps.location.id = 0;
|
||||
memAllocNodeParams.bytesize = NBYTES;
|
||||
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph2, nullptr, 0,
|
||||
&memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int *>(memAllocNodeParams.dptr);
|
||||
HIP_CHECK(hipGraphAddMemAllocNode(&memAllocNode, graph2, nullptr, 0, &memAllocNodeParams));
|
||||
devMem = reinterpret_cast<int*>(memAllocNodeParams.dptr);
|
||||
REQUIRE(devMem != nullptr);
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeH2DDependencies;
|
||||
memcpyNodeH2DDependencies.push_back(memAllocNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2D, graph2,
|
||||
memcpyNodeH2DDependencies.data(), memcpyNodeH2DDependencies.size(),
|
||||
devMem, hostMem2, NBYTES, hipMemcpyHostToDevice));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeH2D, graph2, memcpyNodeH2DDependencies.data(),
|
||||
memcpyNodeH2DDependencies.size(), devMem, hostMem2, NBYTES,
|
||||
hipMemcpyHostToDevice));
|
||||
|
||||
::std::vector<hipGraphNode_t> kernelNodeDependencies;
|
||||
kernelNodeDependencies.push_back(memcpyNodeH2D);
|
||||
|
||||
hipKernelNodeParams kernelNodeParams{};
|
||||
kernelNodeParams.func = reinterpret_cast<void *>(doubleKernel);
|
||||
kernelNodeParams.func = reinterpret_cast<void*>(doubleKernel);
|
||||
kernelNodeParams.gridDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.blockDim = dim3(1, 1, 1);
|
||||
kernelNodeParams.sharedMemBytes = 0;
|
||||
int size = SIZE;
|
||||
void *kernelArgs[2] = {reinterpret_cast<void *>(&devMem),
|
||||
reinterpret_cast<void *>(&size)};
|
||||
void* kernelArgs[2] = {reinterpret_cast<void*>(&devMem), reinterpret_cast<void*>(&size)};
|
||||
kernelNodeParams.kernelParams = kernelArgs;
|
||||
kernelNodeParams.extra = nullptr;
|
||||
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph2,
|
||||
kernelNodeDependencies.data(), kernelNodeDependencies.size(),
|
||||
&kernelNodeParams));
|
||||
HIP_CHECK(hipGraphAddKernelNode(&kernelNode, graph2, kernelNodeDependencies.data(),
|
||||
kernelNodeDependencies.size(), &kernelNodeParams));
|
||||
|
||||
::std::vector<hipGraphNode_t> memcpyNodeD2HDependencies;
|
||||
memcpyNodeD2HDependencies.push_back(kernelNode);
|
||||
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph2,
|
||||
memcpyNodeD2HDependencies.data(), memcpyNodeD2HDependencies.size(),
|
||||
hostMem3, devMem, NBYTES, hipMemcpyDeviceToHost));
|
||||
HIP_CHECK(hipGraphAddMemcpyNode1D(&memcpyNodeD2H, graph2, memcpyNodeD2HDependencies.data(),
|
||||
memcpyNodeD2HDependencies.size(), hostMem3, devMem, NBYTES,
|
||||
hipMemcpyDeviceToHost));
|
||||
|
||||
hipGraphExec_t graphExec2;
|
||||
HIP_CHECK(hipGraphInstantiateWithFlags(&graphExec2, graph2,
|
||||
hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
HIP_CHECK(
|
||||
hipGraphInstantiateWithFlags(&graphExec2, graph2, hipGraphInstantiateFlagAutoFreeOnLaunch));
|
||||
|
||||
for (int launch = 1; launch <= 10; launch++) {
|
||||
std::fill(hostMem1, hostMem1 + SIZE, launch);
|
||||
@@ -894,10 +863,9 @@ TEST_CASE("Unit_hipGraphInstantiateWithFlags_WithDefaultAndAutoFreeOnLaunch") {
|
||||
HIP_CHECK(hipStreamSynchronize(stream2));
|
||||
|
||||
for (int idx = 0; idx < SIZE; idx++) {
|
||||
INFO("For Launch : " << launch << ", At index : " << idx <<
|
||||
", Got value : " << hostMem3[idx] <<
|
||||
", Expected value : " << (launch+launch) << "\n");
|
||||
REQUIRE(hostMem3[idx] == (launch+launch));
|
||||
INFO("For Launch : " << launch << ", At index : " << idx << ", Got value : " << hostMem3[idx]
|
||||
<< ", Expected value : " << (launch + launch) << "\n");
|
||||
REQUIRE(hostMem3[idx] == (launch + launch));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user