From 94f086e9cd61c8a074faa379ba0071e1b2695938 Mon Sep 17 00:00:00 2001 From: Rahul Garg Date: Sat, 2 Jun 2018 13:11:16 +0530 Subject: [PATCH] Add integrated device property --- hipamd/include/hip/hip_runtime_api.h | 2 ++ hipamd/include/hip/nvcc_detail/hip_runtime_api.h | 3 +++ hipamd/src/hip_device.cpp | 3 +++ hipamd/src/hip_hcc.cpp | 7 +++++++ .../tests/src/runtimeApi/device/hipGetDeviceAttribute.cpp | 1 + 5 files changed, 16 insertions(+) diff --git a/hipamd/include/hip/hip_runtime_api.h b/hipamd/include/hip/hip_runtime_api.h index 2b36f3e140..e18c17e07b 100644 --- a/hipamd/include/hip/hip_runtime_api.h +++ b/hipamd/include/hip/hip_runtime_api.h @@ -114,6 +114,7 @@ typedef struct hipDeviceProp_t { int isMultiGpuBoard; ///< 1 if device is on a multi-GPU board, 0 if not. int canMapHostMemory; ///< Check whether HIP can map host memory int gcnArch; ///< AMD GCN Arch Value. Eg: 803, 701 + int integrated; ///< APU vs dGPU } hipDeviceProp_t; @@ -289,6 +290,7 @@ typedef enum hipDeviceAttribute_t { hipDeviceAttributeMaxSharedMemoryPerMultiprocessor, ///< Maximum Shared Memory Per ///< Multiprocessor. hipDeviceAttributeIsMultiGpuBoard, ///< Multiple GPU devices. + hipDeviceAttributeIntegrated, ///< iGPU } hipDeviceAttribute_t; diff --git a/hipamd/include/hip/nvcc_detail/hip_runtime_api.h b/hipamd/include/hip/nvcc_detail/hip_runtime_api.h index fbff263295..5dab2e149a 100644 --- a/hipamd/include/hip/nvcc_detail/hip_runtime_api.h +++ b/hipamd/include/hip/nvcc_detail/hip_runtime_api.h @@ -809,6 +809,9 @@ inline static hipError_t hipDeviceGetAttribute(int* pi, hipDeviceAttribute_t att case hipDeviceAttributeIsMultiGpuBoard: cdattr = cudaDevAttrIsMultiGpuBoard; break; + case hipDeviceAttributeIntegrated: + cdattr = cudaDevAttrIntegrated; + break; default: cerror = cudaErrorInvalidValue; break; diff --git a/hipamd/src/hip_device.cpp b/hipamd/src/hip_device.cpp index 654ecddd38..72150c3f54 100644 --- a/hipamd/src/hip_device.cpp +++ b/hipamd/src/hip_device.cpp @@ -273,6 +273,9 @@ hipError_t ihipDeviceGetAttribute(int* pi, hipDeviceAttribute_t attr, int device case hipDeviceAttributeIsMultiGpuBoard: *pi = prop->isMultiGpuBoard; break; + case hipDeviceAttributeIntegrated: + *pi = prop->integrated; + break; default: e = hipErrorInvalidValue; break; diff --git a/hipamd/src/hip_hcc.cpp b/hipamd/src/hip_hcc.cpp index 9856dc1905..67a586909f 100644 --- a/hipamd/src/hip_hcc.cpp +++ b/hipamd/src/hip_hcc.cpp @@ -900,6 +900,13 @@ hipError_t ihipDevice_t::initProperties(hipDeviceProp_t* prop) { prop->canMapHostMemory = 0; } #endif + // Get profile + hsa_profile_t agent_profile; + err = hsa_agent_get_info(_hsaAgent, HSA_AGENT_INFO_PROFILE, &agent_profile); + DeviceErrorCheck(err); + if(agent_profile == HSA_PROFILE_FULL) { + prop->integrated = 1; + } return e; } diff --git a/hipamd/tests/src/runtimeApi/device/hipGetDeviceAttribute.cpp b/hipamd/tests/src/runtimeApi/device/hipGetDeviceAttribute.cpp index 7611f901e9..ed0b7cb715 100644 --- a/hipamd/tests/src/runtimeApi/device/hipGetDeviceAttribute.cpp +++ b/hipamd/tests/src/runtimeApi/device/hipGetDeviceAttribute.cpp @@ -108,5 +108,6 @@ int main(int argc, char* argv[]) { test_hipDeviceGetAttribute(deviceId, hipDeviceAttributePciDeviceId, props.pciDeviceID)); // CHECK(test_hipDeviceGetAttribute(deviceId, hipDeviceAttributeMaxSharedMemoryPerMultiprocessor, props.maxSharedMemoryPerMultiProcessor)); + CHECK(test_hipDeviceGetAttribute(deviceId, hipDeviceAttributeIntegrated, props.integrated)); passed(); };