From bd32c277bb1221c79dc59df5a34daa48da8645ab Mon Sep 17 00:00:00 2001 From: foreman Date: Fri, 26 Aug 2016 01:47:40 -0400 Subject: [PATCH] P4 to Git Change 1307417 by lmoriche@lmoriche_opencl_dev on 2016/08/26 01:38:31 SWDEV-94610 - Setup the (hidden) arguments for global_offset [x,y,z]. Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocprogram.cpp#16 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#10 edit --- rocclr/runtime/device/rocm/rocprogram.cpp | 4 ++-- rocclr/runtime/device/rocm/rocvirtual.cpp | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/rocclr/runtime/device/rocm/rocprogram.cpp b/rocclr/runtime/device/rocm/rocprogram.cpp index 8955c1b21c..8155590efd 100644 --- a/rocclr/runtime/device/rocm/rocprogram.cpp +++ b/rocclr/runtime/device/rocm/rocprogram.cpp @@ -1024,7 +1024,7 @@ namespace roc { } // for OpenCL default hidden kernel arguments assuming there is no printf - size_t numHiddenKernelArgs = 0; // FIXME_lmoriche:3; + size_t numHiddenKernelArgs = 3; // FIXME_Wilkin // Fix the kernel name issue that causes string comparison does not work // due to an extra character at the end @@ -1040,7 +1040,7 @@ namespace roc { // TODO: remove the workaround // add 24 bytes for global offsets as workaround for LC reporting // excluded the hidden arguments - kernargSegmentByteSize /* FIXME_lmoriche:+24*/, + kernargSegmentByteSize + numHiddenKernelArgs * sizeof(size_t), kernargSegmentAlignment, numHiddenKernelArgs ); diff --git a/rocclr/runtime/device/rocm/rocvirtual.cpp b/rocclr/runtime/device/rocm/rocvirtual.cpp index fd698954bb..2fea3d5f56 100644 --- a/rocclr/runtime/device/rocm/rocvirtual.cpp +++ b/rocclr/runtime/device/rocm/rocvirtual.cpp @@ -1498,6 +1498,7 @@ VirtualGPU::submitKernelInternal( address argPtr = argBuffer; +#if !defined(WITH_LIGHTNING_COMPILER) // The HLC generates Kernenv arguments, first 3 are global offsets. const uint extraAargs = ((roc::Kernel*)devKernel)->extraArgumentsNum(); for (uint j = 0; j < extraAargs; ++j) { @@ -1510,6 +1511,7 @@ VirtualGPU::submitKernelInternal( addArg(&argPtr, &offset, sizeof(void*)); //Should be uint32_t for small model and uint64_t for large! } } +#endif // defined(WITH_LIGHTNING_COMPILER) const amd::KernelSignature& signature = kernel.signature(); const amd::KernelParameters& kernelParams = kernel.parameters(); @@ -1625,6 +1627,26 @@ VirtualGPU::submitKernelInternal( } } +#if defined(WITH_LIGHTNING_COMPILER) + const uint extraAargs = ((roc::Kernel*)devKernel)->extraArgumentsNum(); + for (uint j = 0; j < extraAargs; ++j) { + switch(j) { + case 3: { // Printf buffer + address bufferPtr = printfDbg()->dbgBuffer(); + addArg(&argPtr, &bufferPtr, sizeof(void*)); + break; + } + case 0: case 1: case 2: { // Global offsets + const size_t offset = j < sizes.dimensions() ? sizes.offset()[j] : 0; + addArg(&argPtr, &offset, sizeof(size_t)); + break; + } + default: + assert(!"Unknown hidden argument index"); + } + } +#endif // defined(WITH_LIGHTNING_COMPILER) + // Check there is no arguments' buffer overflow assert(argPtr <= argBuffer + gpuKernel.KernargSegmentByteSize());