From c9da17b78b2aa76cbebb2bf4da3bcce3b1a0faa4 Mon Sep 17 00:00:00 2001 From: Aditya Atluri Date: Fri, 13 Oct 2017 11:53:18 -0400 Subject: [PATCH 1/4] added support for rocm gpu autodetect --- HalideIR | 2 +- src/codegen/llvm/codegen_amdgpu.cc | 10 ++++++++-- src/runtime/rocm/rocm_device_api.cc | 6 +++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/HalideIR b/HalideIR index a40a3e2fedee..cb3c025d5b91 160000 --- a/HalideIR +++ b/HalideIR @@ -1 +1 @@ -Subproject commit a40a3e2fedee88d2f7b97ba4caf8a9d0eb25886f +Subproject commit cb3c025d5b91ab994b063a85bc935fc364d8f491 diff --git a/src/codegen/llvm/codegen_amdgpu.cc b/src/codegen/llvm/codegen_amdgpu.cc index 146880b7dd89..4d31e1f41759 100644 --- a/src/codegen/llvm/codegen_amdgpu.cc +++ b/src/codegen/llvm/codegen_amdgpu.cc @@ -135,9 +135,15 @@ runtime::Module BuildAMDGPU(Array funcs, std::string target) { CHECK(target.length( ) >= 4 && target.substr(0, 4) == "rocm"); + TVMContext tvmCtx; + tvmCtx.device_type = kROCM; + tvmCtx.device_id = 0; + TVMRetValue val; + tvm::runtime::DeviceAPI::Get(tvmCtx)->GetAttr(tvmCtx, tvm::runtime::kComputeVersion, &val); + llvm::TargetMachine* tm = \ - GetLLVMTargetMachine("-mtriple=amdgcn-amd-amdhsa-hcc -mcpu=gfx803" + \ - target.substr(4, target.length() - 4)); + GetLLVMTargetMachine("-mtriple=amdgcn-amd-amdhsa-hcc -mcpu=gfx" + \ + std::to_string(int(val)) + target.substr(4, target.length() - 4)); std::unique_ptr cg(new CodeGenAMDGPU()); std::unique_ptr ctx(new llvm::LLVMContext()); diff --git a/src/runtime/rocm/rocm_device_api.cc b/src/runtime/rocm/rocm_device_api.cc index 4fa91dcbeb3f..648f695380d9 100644 --- a/src/runtime/rocm/rocm_device_api.cc +++ b/src/runtime/rocm/rocm_device_api.cc @@ -44,7 +44,11 @@ class ROCMDeviceAPI final : public DeviceAPI { value = 64; break; } - case kComputeVersion: return; + case kComputeVersion: + hipDeviceProp_t prop; + ROCM_CALL(hipGetDeviceProperties(&prop, ctx.device_id)); + value = prop.gcnArch; + return; } *rv = value; } From 32cc82eaff475055144003361eec9a4e9f497a7d Mon Sep 17 00:00:00 2001 From: Aditya Atluri Date: Fri, 13 Oct 2017 12:02:44 -0400 Subject: [PATCH 2/4] changed type casting from old style to static_cast --- src/codegen/llvm/codegen_amdgpu.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen/llvm/codegen_amdgpu.cc b/src/codegen/llvm/codegen_amdgpu.cc index 4d31e1f41759..bcf549f93e47 100644 --- a/src/codegen/llvm/codegen_amdgpu.cc +++ b/src/codegen/llvm/codegen_amdgpu.cc @@ -143,7 +143,7 @@ runtime::Module BuildAMDGPU(Array funcs, std::string target) { llvm::TargetMachine* tm = \ GetLLVMTargetMachine("-mtriple=amdgcn-amd-amdhsa-hcc -mcpu=gfx" + \ - std::to_string(int(val)) + target.substr(4, target.length() - 4)); + std::to_string(static_cast(val)) + target.substr(4, target.length() - 4)); std::unique_ptr cg(new CodeGenAMDGPU()); std::unique_ptr ctx(new llvm::LLVMContext()); From 410d0b14caf8d26e3ebe4f4312a4b3086ed6a08c Mon Sep 17 00:00:00 2001 From: Aditya Atluri Date: Fri, 13 Oct 2017 13:38:37 -0400 Subject: [PATCH 3/4] fixed code to generate gfx specific code object --- src/codegen/llvm/codegen_amdgpu.cc | 10 ++++++++-- src/runtime/rocm/rocm_device_api.cc | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/codegen/llvm/codegen_amdgpu.cc b/src/codegen/llvm/codegen_amdgpu.cc index bcf549f93e47..9ddc7a5b8fb2 100644 --- a/src/codegen/llvm/codegen_amdgpu.cc +++ b/src/codegen/llvm/codegen_amdgpu.cc @@ -135,15 +135,21 @@ runtime::Module BuildAMDGPU(Array funcs, std::string target) { CHECK(target.length( ) >= 4 && target.substr(0, 4) == "rocm"); + TVMContext tvmCtx; tvmCtx.device_type = kROCM; tvmCtx.device_id = 0; TVMRetValue val; - tvm::runtime::DeviceAPI::Get(tvmCtx)->GetAttr(tvmCtx, tvm::runtime::kComputeVersion, &val); + tvm::runtime::DeviceAPI::Get(tvmCtx)->GetAttr(tvmCtx, tvm::runtime::kExist, &val); + if(val.operator int() == 1) { + tvm::runtime::DeviceAPI::Get(tvmCtx)->GetAttr(tvmCtx, tvm::runtime::kComputeVersion, &val); + }else{ + val = 803; + } llvm::TargetMachine* tm = \ GetLLVMTargetMachine("-mtriple=amdgcn-amd-amdhsa-hcc -mcpu=gfx" + \ - std::to_string(static_cast(val)) + target.substr(4, target.length() - 4)); + std::to_string(val.operator int())+ target.substr(4, target.length() - 4)); std::unique_ptr cg(new CodeGenAMDGPU()); std::unique_ptr ctx(new llvm::LLVMContext()); diff --git a/src/runtime/rocm/rocm_device_api.cc b/src/runtime/rocm/rocm_device_api.cc index 648f695380d9..d7b4eabf01d4 100644 --- a/src/runtime/rocm/rocm_device_api.cc +++ b/src/runtime/rocm/rocm_device_api.cc @@ -47,7 +47,7 @@ class ROCMDeviceAPI final : public DeviceAPI { case kComputeVersion: hipDeviceProp_t prop; ROCM_CALL(hipGetDeviceProperties(&prop, ctx.device_id)); - value = prop.gcnArch; + *rv = prop.gcnArch; return; } *rv = value; From d9ccda801a6f691cc18283a0c7dc1e7cddc11c6f Mon Sep 17 00:00:00 2001 From: Aditya Atluri Date: Fri, 13 Oct 2017 14:09:49 -0400 Subject: [PATCH 4/4] fixed namespaces --- src/codegen/llvm/codegen_amdgpu.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/codegen/llvm/codegen_amdgpu.cc b/src/codegen/llvm/codegen_amdgpu.cc index 9ddc7a5b8fb2..12218955f110 100644 --- a/src/codegen/llvm/codegen_amdgpu.cc +++ b/src/codegen/llvm/codegen_amdgpu.cc @@ -141,9 +141,9 @@ runtime::Module BuildAMDGPU(Array funcs, std::string target) { tvmCtx.device_id = 0; TVMRetValue val; tvm::runtime::DeviceAPI::Get(tvmCtx)->GetAttr(tvmCtx, tvm::runtime::kExist, &val); - if(val.operator int() == 1) { + if (val.operator int() == 1) { tvm::runtime::DeviceAPI::Get(tvmCtx)->GetAttr(tvmCtx, tvm::runtime::kComputeVersion, &val); - }else{ + } else { val = 803; }