From 11a91fbe0bf6c593fbc3813234dc7fc52d4a867b Mon Sep 17 00:00:00 2001 From: foreman Date: Thu, 2 Aug 2018 02:14:04 -0400 Subject: [PATCH] P4 to Git Change 1588551 by skudchad@skudchad_rocm on 2018/08/02 01:55:45 SWDEV-145570 - [HIP] - Refactor ihipModuleLaunchKernel and add hipModuleLaunchKernelExt Affected files ... ... //depot/stg/opencl/drivers/opencl/api/hip/hip_hcc.def.in#8 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_hcc.map.in#8 edit ... //depot/stg/opencl/drivers/opencl/api/hip/hip_module.cpp#12 edit --- hipamd/api/hip/hip_hcc.def.in | 2 ++ hipamd/api/hip/hip_hcc.map.in | 2 ++ hipamd/api/hip/hip_module.cpp | 51 ++++++++++++++++++++++++++++++++--- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/hipamd/api/hip/hip_hcc.def.in b/hipamd/api/hip/hip_hcc.def.in index 478b4a277c..71e87d9a16 100644 --- a/hipamd/api/hip/hip_hcc.def.in +++ b/hipamd/api/hip/hip_hcc.def.in @@ -105,6 +105,8 @@ hipMemset3D hipModuleGetFunction hipModuleGetGlobal hipModuleLaunchKernel +hipModuleLaunchKernelExt +hipHccModuleLaunchKernel hipModuleLoad hipModuleLoadData hipModuleLoadDataEx diff --git a/hipamd/api/hip/hip_hcc.map.in b/hipamd/api/hip/hip_hcc.map.in index 25e9844e94..7f21b0ebd7 100644 --- a/hipamd/api/hip/hip_hcc.map.in +++ b/hipamd/api/hip/hip_hcc.map.in @@ -106,6 +106,8 @@ global: hipModuleGetFunction; hipModuleGetGlobal; hipModuleLaunchKernel; + hipModuleLaunchKernelExt; + hipHccModuleLaunchKernel; hipModuleLoad; hipModuleLoadData; hipModuleLoadDataEx; diff --git a/hipamd/api/hip/hip_module.cpp b/hipamd/api/hip/hip_module.cpp index 6831711a9a..fe87f93a7b 100644 --- a/hipamd/api/hip/hip_module.cpp +++ b/hipamd/api/hip/hip_module.cpp @@ -26,6 +26,7 @@ THE SOFTWARE. #include "hip_internal.hpp" #include "platform/program.hpp" +#include "hip_event.hpp" hipError_t ihipModuleLoadData(hipModule_t *module, const void *image); @@ -137,20 +138,24 @@ hipError_t hipFuncGetAttributes(hipFuncAttributes* attr, const void* func) return hipErrorInvalidDeviceFunction; } -hipError_t hipModuleLaunchKernel(hipFunction_t f, + +hipError_t ihipModuleLaunchKernel(hipFunction_t f, uint32_t gridDimX, uint32_t gridDimY, uint32_t gridDimZ, uint32_t blockDimX, uint32_t blockDimY, uint32_t blockDimZ, uint32_t sharedMemBytes, hipStream_t hStream, - void **kernelParams, void **extra) + void **kernelParams, void **extra, + hipEvent_t startEvent, hipEvent_t stopEvent) { HIP_INIT_API(f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, sharedMemBytes, hStream, - kernelParams, extra); + kernelParams, extra, startEvent, stopEvent); amd::Kernel* kernel = as_amd(reinterpret_cast(f)); amd::Device* device = hip::getCurrentContext()->devices()[0]; + hip::Event* eStart = reinterpret_cast(startEvent); + hip::Event* eStop = reinterpret_cast(stopEvent); amd::HostQueue* queue; if (hStream == nullptr) { hip::syncStreams(); @@ -192,6 +197,17 @@ hipError_t hipModuleLaunchKernel(hipFunction_t f, } } + if(startEvent != nullptr) { + amd::Command* startCommand = new hip::TimerMarker(*eStart->stream_); + startCommand->enqueue(); + + if (eStart->event_ != nullptr) { + eStart->event_->release(); + } + + eStart->event_ = &startCommand->event(); + } + amd::NDRangeKernelCommand* command = new amd::NDRangeKernelCommand(*queue, waitList, *kernel, ndrange); if (!command) { return hipErrorOutOfMemory; @@ -204,9 +220,38 @@ hipError_t hipModuleLaunchKernel(hipFunction_t f, } command->enqueue(); + + if(stopEvent != nullptr) { + eStop->event_ = &command->event(); + command->retain(); + } + command->release(); return hipSuccess; } +hipError_t hipModuleLaunchKernel(hipFunction_t f, + uint32_t gridDimX, uint32_t gridDimY, uint32_t gridDimZ, + uint32_t blockDimX, uint32_t blockDimY, uint32_t blockDimZ, + uint32_t sharedMemBytes, hipStream_t hStream, + void **kernelParams, void **extra) +{ + return ihipModuleLaunchKernel(f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, + sharedMemBytes, hStream, kernelParams, extra, nullptr, nullptr); +} + +hipError_t hipModuleLaunchKernelExt(hipFunction_t f, + uint32_t gridDimX, uint32_t gridDimY, uint32_t gridDimZ, + uint32_t blockDimX, uint32_t blockDimY, uint32_t blockDimZ, + uint32_t sharedMemBytes, hipStream_t hStream, + void **kernelParams, void **extra, + hipEvent_t startEvent, hipEvent_t stopEvent) +{ + return ihipModuleLaunchKernel(f, gridDimX, gridDimY, gridDimZ, blockDimX, blockDimY, blockDimZ, + sharedMemBytes, hStream, kernelParams, extra, startEvent, stopEvent); +} + +const auto& hipHccModuleLaunchKernel = hipModuleLaunchKernelExt; +