From b581f2510b2f9dd9331dff530fb0e6af6d6ba2c3 Mon Sep 17 00:00:00 2001
From: foreman
Date: Fri, 2 Sep 2016 12:33:55 -0400
Subject: [PATCH] P4 to Git Change 1310350 by lmoriche@lmoriche_opencl_dev on
2016/09/02 12:29:12
SWDEV-101853 - Use the PointeeAlignment metadata to align the dynamic LDS allocations at dispatch.
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/amdgpu_metadata.cpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/amdgpu_metadata.hpp#3 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rockernel.cpp#11 edit
---
rocclr/runtime/device/rocm/amdgpu_metadata.cpp | 5 ++++-
rocclr/runtime/device/rocm/amdgpu_metadata.hpp | 2 ++
rocclr/runtime/device/rocm/rockernel.cpp | 12 ++++++++++--
3 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/rocclr/runtime/device/rocm/amdgpu_metadata.cpp b/rocclr/runtime/device/rocm/amdgpu_metadata.cpp
index 796ac5fdca..095d85338b 100644
--- a/rocclr/runtime/device/rocm/amdgpu_metadata.cpp
+++ b/rocclr/runtime/device/rocm/amdgpu_metadata.cpp
@@ -124,7 +124,7 @@ namespace code {
namespace KernelArg {
using namespace AMDGPU::RuntimeMD::KernelArg;
Metadata::Metadata()
- : size(0), align(0),
+ : size(0), align(0), pointeeAlign(0),
isConst(false), isRestrict(false), isVolatile(false), isPipe(false)
{}
@@ -177,6 +177,7 @@ namespace code {
case KeyArgName: return Read(in, name);
case KeyArgTypeKind: return Read(in, typeKind);
case KeyArgValueType: return Read(in, valueType);
+ case KeyArgPointeeAlign: return Read(in, pointeeAlign);
case KeyArgAddrQual: return Read(in, addrQual);
case KeyArgAccQual: return Read(in, accQual);
case KeyArgIsConst: isConst = true; return true;
@@ -261,6 +262,7 @@ namespace code {
case KeyArgName:
case KeyArgTypeKind:
case KeyArgValueType:
+ case KeyArgPointeeAlign:
case KeyArgAddrQual:
case KeyArgAccQual:
case KeyArgIsConst:
@@ -424,6 +426,7 @@ namespace code {
case KeyArgName:
case KeyArgTypeKind:
case KeyArgValueType:
+ case KeyArgPointeeAlign:
case KeyArgAddrQual:
case KeyArgAccQual:
case KeyArgIsConst:
diff --git a/rocclr/runtime/device/rocm/amdgpu_metadata.hpp b/rocclr/runtime/device/rocm/amdgpu_metadata.hpp
index 5fb6d0fd2b..7162706f71 100644
--- a/rocclr/runtime/device/rocm/amdgpu_metadata.hpp
+++ b/rocclr/runtime/device/rocm/amdgpu_metadata.hpp
@@ -61,6 +61,7 @@ namespace code {
private:
uint32_t size;
uint32_t align;
+ uint32_t pointeeAlign;
std::string typeName;
std::string name;
AMDGPU::RuntimeMD::KernelArg::TypeKind typeKind;
@@ -73,6 +74,7 @@ namespace code {
Metadata();
uint32_t Size() const { return size; }
uint32_t Align() const { return align; }
+ uint32_t PointeeAlign() const { return pointeeAlign; }
const std::string& TypeName() const { return typeName; }
const std::string& Name() const { return name; }
AMDGPU::RuntimeMD::KernelArg::TypeKind TypeKind() const { return typeKind; }
diff --git a/rocclr/runtime/device/rocm/rockernel.cpp b/rocclr/runtime/device/rocm/rockernel.cpp
index 6125819c06..5048795a3d 100644
--- a/rocclr/runtime/device/rocm/rockernel.cpp
+++ b/rocclr/runtime/device/rocm/rockernel.cpp
@@ -56,9 +56,17 @@ GetHSAILArgType(const aclArgData* argInfo)
inline static size_t
GetHSAILArgAlignment(const amd::hsa::code::KernelArg::Metadata* lcArg)
{
- if (lcArg->TypeKind() == AMDGPU::RuntimeMD::KernelArg::Pointer)
+ if (lcArg->TypeKind() == AMDGPU::RuntimeMD::KernelArg::Pointer) {
+ if (lcArg->AddrQual() == AMDGPU::RuntimeMD::KernelArg::Local) {
+ uint32_t align = lcArg->PointeeAlign();
+ if (align == 0) {
+ LogWarning("Missing dynamic_shared_pointer alignment");
+ align = 128; /* worst case alignment */;
+ }
+ return align;
+ }
return lcArg->Align();
-
+ }
return 1;
}
#endif // defined(WITH_LIGHTNING_COMPILER)