Skip to content

Commit 6b96993

Browse files
committed
Cached more info into device constructor
1 parent 0235cd0 commit 6b96993

File tree

2 files changed

+37
-13
lines changed

2 files changed

+37
-13
lines changed

source/adapters/hip/device.hpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,36 @@ struct ur_device_handle_t_ {
2626
ur_platform_handle_t Platform;
2727
hipCtx_t HIPContext;
2828
uint32_t DeviceIndex;
29-
int DeviceMaxLocalMem;
30-
int ManagedMemSupport;
29+
int MaxWorkGroupSize{0};
30+
int MaxBlockDimX{0};
31+
int MaxBlockDimY{0};
32+
int MaxBlockDimZ{0};
33+
int DeviceMaxLocalMem{0};
34+
int ManagedMemSupport{0};
35+
int ConcurrentManagedAccess{0};
3136

3237
public:
3338
ur_device_handle_t_(native_type HipDevice, hipCtx_t Context,
3439
ur_platform_handle_t Platform, uint32_t DeviceIndex)
3540
: HIPDevice(HipDevice), RefCount{1}, Platform(Platform),
3641
HIPContext(Context), DeviceIndex(DeviceIndex) {
3742

43+
UR_CHECK_ERROR(hipDeviceGetAttribute(
44+
&MaxWorkGroupSize, hipDeviceAttributeMaxThreadsPerBlock, HIPDevice));
45+
UR_CHECK_ERROR(hipDeviceGetAttribute(
46+
&MaxBlockDimX, hipDeviceAttributeMaxBlockDimX, HIPDevice));
47+
UR_CHECK_ERROR(hipDeviceGetAttribute(
48+
&MaxBlockDimY, hipDeviceAttributeMaxBlockDimY, HIPDevice));
49+
UR_CHECK_ERROR(hipDeviceGetAttribute(
50+
&MaxBlockDimZ, hipDeviceAttributeMaxBlockDimZ, HIPDevice));
3851
UR_CHECK_ERROR(hipDeviceGetAttribute(
3952
&DeviceMaxLocalMem, hipDeviceAttributeMaxSharedMemoryPerBlock,
4053
HIPDevice));
4154
UR_CHECK_ERROR(hipDeviceGetAttribute(
4255
&ManagedMemSupport, hipDeviceAttributeManagedMemory, HIPDevice));
56+
UR_CHECK_ERROR(hipDeviceGetAttribute(
57+
&ConcurrentManagedAccess, hipDeviceAttributeConcurrentManagedAccess,
58+
HIPDevice));
4359
}
4460

4561
~ur_device_handle_t_() noexcept(false) {
@@ -58,9 +74,21 @@ struct ur_device_handle_t_ {
5874
// platform
5975
uint32_t getIndex() const noexcept { return DeviceIndex; };
6076

77+
int getMaxWorkGroupSize() const noexcept { return MaxWorkGroupSize; };
78+
79+
int getMaxBlockDimX() const noexcept { return MaxBlockDimX; };
80+
81+
int getMaxBlockDimY() const noexcept { return MaxBlockDimY; };
82+
83+
int getMaxBlockDimZ() const noexcept { return MaxBlockDimZ; };
84+
6185
int getDeviceMaxLocalMem() const noexcept { return DeviceMaxLocalMem; };
6286

6387
int getManagedMemSupport() const noexcept { return ManagedMemSupport; };
88+
89+
int getConcurrentManagedAccess() const noexcept {
90+
return ConcurrentManagedAccess;
91+
};
6492
};
6593

6694
int getAttribute(ur_device_handle_t Device, hipDeviceAttribute_t Attribute);

source/adapters/hip/enqueue.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -300,15 +300,11 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueKernelLaunch(
300300
bool ProvidedLocalWorkGroupSize = (pLocalWorkSize != nullptr);
301301

302302
{
303-
ur_result_t Result = urDeviceGetInfo(
304-
hQueue->Device, UR_DEVICE_INFO_MAX_WORK_ITEM_SIZES,
305-
sizeof(MaxThreadsPerBlock), MaxThreadsPerBlock, nullptr);
306-
UR_ASSERT(Result == UR_RESULT_SUCCESS, Result);
303+
MaxThreadsPerBlock[0] = hQueue->Device->getMaxBlockDimX();
304+
MaxThreadsPerBlock[1] = hQueue->Device->getMaxBlockDimY();
305+
MaxThreadsPerBlock[2] = hQueue->Device->getMaxBlockDimZ();
307306

308-
Result =
309-
urDeviceGetInfo(hQueue->Device, UR_DEVICE_INFO_MAX_WORK_GROUP_SIZE,
310-
sizeof(MaxWorkGroupSize), &MaxWorkGroupSize, nullptr);
311-
UR_ASSERT(Result == UR_RESULT_SUCCESS, Result);
307+
MaxWorkGroupSize = hQueue->Device->getMaxWorkGroupSize();
312308

313309
// The MaxWorkGroupSize = 1024 for AMD GPU
314310
// The MaxThreadsPerBlock = {1024, 1024, 1024}
@@ -1480,7 +1476,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMPrefetch(
14801476

14811477
// If the device does not support managed memory access, we can't set
14821478
// mem_advise.
1483-
if (!getAttribute(Device, hipDeviceAttributeManagedMemory)) {
1479+
if (!Device->getManagedMemSupport()) {
14841480
releaseEvent();
14851481
setErrorMessage("mem_advise ignored as device does not support "
14861482
"managed memory access",
@@ -1554,7 +1550,7 @@ urEnqueueUSMAdvise(ur_queue_handle_t hQueue, const void *pMem, size_t size,
15541550

15551551
// If the device does not support managed memory access, we can't set
15561552
// mem_advise.
1557-
if (!getAttribute(Device, hipDeviceAttributeManagedMemory)) {
1553+
if (!Device->getManagedMemSupport()) {
15581554
releaseEvent();
15591555
setErrorMessage("mem_advise ignored as device does not support "
15601556
"managed memory access",
@@ -1571,7 +1567,7 @@ urEnqueueUSMAdvise(ur_queue_handle_t hQueue, const void *pMem, size_t size,
15711567
UR_USM_ADVICE_FLAG_SET_ACCESSED_BY_DEVICE |
15721568
UR_USM_ADVICE_FLAG_CLEAR_ACCESSED_BY_DEVICE |
15731569
UR_USM_ADVICE_FLAG_DEFAULT)) {
1574-
if (!getAttribute(Device, hipDeviceAttributeConcurrentManagedAccess)) {
1570+
if (!Device->getConcurrentManagedAccess()) {
15751571
releaseEvent();
15761572
setErrorMessage("mem_advise ignored as device does not support "
15771573
"concurrent managed access",

0 commit comments

Comments
 (0)