From 0b63f2d19ffc1d340f4deb5613587af4ac599dcf Mon Sep 17 00:00:00 2001 From: foreman Date: Wed, 31 Aug 2016 19:36:48 -0400 Subject: [PATCH] P4 to Git Change 1309472 by lmoriche@lmoriche_opencl_dev on 2016/08/31 19:27:07 SWDEV-94610 - Fix the API::get_kernel_arg_info conformance test failure. The runtime metadata needs to return references from Name() and TypeName() instead of temporary strings. Name().c_str() should be valid until the program is destroyed. Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#8 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmetadata.cpp#2 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmetadata.hpp#3 edit [ROCm/clr commit: 29a3f5d56a3b80a513104b6337bd7857a2cd4f36] --- .../rocclr/runtime/device/rocm/rockernel.cpp | 10 +++--- .../runtime/device/rocm/rocmetadata.cpp | 36 +++++-------------- .../runtime/device/rocm/rocmetadata.hpp | 11 +++--- 3 files changed, 18 insertions(+), 39 deletions(-) diff --git a/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp b/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp index 2752b46d9a..f15f68a445 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/rockernel.cpp @@ -820,16 +820,16 @@ bool Kernel::init_LC(){ } size_t idx = runtimeMD->KernelIndexByName(name()); - const RuntimeMD::Kernel::Metadata* kernelMD = runtimeMD->GetKernelMetadata(idx); + const RuntimeMD::Kernel::Metadata& kernelMD = runtimeMD->GetKernelMetadata(idx); - size_t sizeOfArgList = kernelMD->KernelArgCount(); + size_t sizeOfArgList = kernelMD.KernelArgCount(); size_t kOffset = 0; size_t pOffset = 0; device::Kernel::parameters_t params; for (uint32_t i=0; i < sizeOfArgList; i++) { - const RuntimeMD::KernelArg::Metadata* kernelArg = kernelMD->GetKernelArgMetadata(i); - initArgsParams(kernelArg, &kOffset, params, &pOffset); + const RuntimeMD::KernelArg::Metadata& kernelArg = kernelMD.GetKernelArgMetadata(i); + initArgsParams(&kernelArg, &kOffset, params, &pOffset); } createSignature(params); @@ -840,7 +840,7 @@ bool Kernel::init_LC(){ workGroupInfo_.availableSGPRs_ = 0; workGroupInfo_.availableVGPRs_ = 0; - const uint32_t* workGroupSizeHint = kernelMD->WorkgroupSizeHint(); + const uint32_t* workGroupSizeHint = kernelMD.WorkgroupSizeHint(); size_t sizeOfWorkGroupSize = (workGroupSizeHint) ? *workGroupSizeHint : 0; uint32_t wavefront_size = 0; diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp index 34a0c48687..576ed4a780 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.cpp @@ -42,6 +42,7 @@ #include #include +#include #include "rocmetadata.hpp" @@ -199,7 +200,7 @@ namespace RuntimeMD { out << " Access: " << AccessQualToString(accQual) - << " Address: " << addrQual + << " Address: " << (uint) addrQual << " Size: " << size << " Align: " << align << " Type Name: " << typeName; @@ -208,28 +209,6 @@ namespace RuntimeMD { } } - void Metadata::PrintOut() const { - std::cout - << "Type: " << TypeKindToString(typeKind) << std::endl; - if (typeKind == Value) { - std::cout << " ValueType:" << ValueTypeToString(valueType) << std::endl; - } - if (isConst) { std::cout << " Const" << std::endl; } - if (isRestrict) { std::cout << " Restrict" << std::endl; } - if (isVolatile) { std::cout << " Volatile" << std::endl; } - if (isPipe) { std::cout << " Pipe" << std::endl; } - - std::cout - << " Access: " << AccessQualToString(accQual) - << " Address: " << addrQual - << " Size: " << size - << " Align: " << align - << " Type Name: " << typeName << std::endl; - if (!name.empty()) { - std::cout << " Name: " << name << std::endl; - } - } - } namespace Kernel { @@ -255,9 +234,9 @@ namespace RuntimeMD { this->languageVersion = languageVersion; } - const KernelArg::Metadata* Metadata::GetKernelArgMetadata(size_t index) const { + const KernelArg::Metadata& Metadata::GetKernelArgMetadata(size_t index) const { assert((index < args.size()) && "kernel argument index too big"); - return &(args[index]); + return args[index]; } bool Metadata::ReadValue(std::istream& in, AMDGPU::RuntimeMD::Key key) { @@ -267,6 +246,7 @@ namespace RuntimeMD { switch (key) { case KeyKernelName: + hasName = true; return Read(in, name); case KeyArgBegin: args.resize(args.size() + 1); @@ -471,11 +451,11 @@ namespace RuntimeMD { return true; } - const Kernel::Metadata* Metadata::GetKernelMetadata(size_t index) const { + const Kernel::Metadata& Metadata::GetKernelMetadata(size_t index) const { assert(kernels.size() && "kernel metadata not found"); assert((index < kernels.size()) && "kernel index too big"); - return &(kernels[index]); + return kernels[index]; } size_t Metadata::KernelIndexByName(const std::string& name) const { @@ -496,7 +476,7 @@ namespace RuntimeMD { } void Metadata::Print(std::ostream& out) { - out << "roc runtime metadata (" << kernels.size() << " kernels):" << std::endl; + out << "AMDGPU runtime metadata (" << kernels.size() << " kernels):" << std::endl; for (Kernel::Metadata& kernel : kernels) { kernel.Print(out); } diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp index ee83b95886..53c0593301 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocmetadata.hpp @@ -72,8 +72,8 @@ namespace RuntimeMD { Metadata(); uint32_t Size() const { return size; } uint32_t Align() const { return align; } - std::string TypeName() const { return typeName; } - std::string Name() const { return name; } + const std::string& TypeName() const { return typeName; } + const std::string& Name() const { return name; } AMDGPU::RuntimeMD::KernelArg::TypeKind TypeKind() const { return typeKind; } AMDGPU::RuntimeMD::KernelArg::ValueType ValueType() const { return valueType; } uint8_t AddrQual() const { return addrQual; } @@ -85,7 +85,6 @@ namespace RuntimeMD { bool ReadValue(std::istream& in, AMDGPU::RuntimeMD::Key key); void Print(std::ostream& out); - void PrintOut() const; }; } @@ -135,12 +134,12 @@ namespace RuntimeMD { bool HasMaxWorkgroupSize() const { return hasMaxWorkgroupSize; } size_t KernelArgCount() const { return args.size(); } - const KernelArg::Metadata* GetKernelArgMetadata(size_t index) const; + const KernelArg::Metadata& GetKernelArgMetadata(size_t index) const; const std::string& Name() const { return name; } const uint32_t* RequiredWorkgroupSize() const { return hasRequiredWorkgroupSize ? requiredWorkgroupSize : nullptr; } const uint32_t* WorkgroupSizeHint() const { return hasWorkgroupSizeHint ? workgroupSizeHint : nullptr; } - std::string VecTypeHint() const { return vectorTypeHint; } + const std::string& VecTypeHint() const { return vectorTypeHint; } uint32_t KernelIndex() const { return hasKernelIndex ? kernelIndex : UINT32_MAX; } uint32_t SGPRS() const { return hasSGPRs ? numSgprs : UINT32_MAX; } uint32_t VGPRS() const { return hasVGPRs ? numVgprs : UINT32_MAX; } @@ -165,7 +164,7 @@ namespace RuntimeMD { public: size_t KernelCount() const { return kernels.size(); } - const Kernel::Metadata* GetKernelMetadata(size_t index) const; + const Kernel::Metadata& GetKernelMetadata(size_t index) const; size_t KernelIndexByName(const std::string& name) const; bool ReadFrom(std::istream& in);