Skip to content

Commit 405efd5

Browse files
committed
add support for CL_DEVICE_CONCURRENT_ACCESS_ATOM_SIZE_KHR
Only a single value is supported for now. If this gets expanded to return an array of values, one per SVM type, then this this implementation will need to be updated.
1 parent 5d3e749 commit 405efd5

3 files changed

Lines changed: 27 additions & 0 deletions

File tree

include/CL/opencl.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,7 @@ inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_
15771577
F(cl_platform_info, CL_PLATFORM_SVM_TYPE_CAPABILITIES_KHR, cl::vector<cl_svm_capabilities_khr>) \
15781578
\
15791579
F(cl_device_info, CL_DEVICE_SVM_TYPE_CAPABILITIES_KHR, cl::vector<cl_svm_capabilities_khr>) \
1580+
F(cl_device_info, CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR, size_type) \
15801581
\
15811582
F(cl_svm_pointer_info_khr, CL_SVM_INFO_TYPE_INDEX_KHR, cl_uint) \
15821583
F(cl_svm_pointer_info_khr, CL_SVM_INFO_CAPABILITIES_KHR, cl_svm_capabilities_khr) \

layers/99_svmplusplus/emulate.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,11 @@ struct SLayerContext
248248
return TypeCapsDevice[device];
249249
}
250250

251+
const size_t getConcurrentAccessAtomSize(cl_device_id device)
252+
{
253+
return ConcurrentAccessAtomSize[device];
254+
}
255+
251256
const SUSMFuncs& getUSMFuncs(cl_platform_id platform)
252257
{
253258
return USMFuncs[platform];
@@ -429,6 +434,7 @@ struct SLayerContext
429434

430435
for (auto device: devices) {
431436
std::vector<cl_svm_capabilities_khr> typeCapsDevice;
437+
size_t concurrentAccessAtomSize = 0;
432438

433439
for (auto caps: typeCapsPlatform) {
434440
if ((caps & CL_SVM_TYPE_MACRO_DEVICE_KHR) == CL_SVM_TYPE_MACRO_DEVICE_KHR) {
@@ -452,9 +458,14 @@ struct SLayerContext
452458
else {
453459
assert(0 && "unknown platform SVM type");
454460
}
461+
462+
if (!typeCapsDevice.empty() && (typeCapsDevice.back() & CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR)) {
463+
concurrentAccessAtomSize = 1;
464+
}
455465
}
456466

457467
TypeCapsDevice[device] = typeCapsDevice;
468+
ConcurrentAccessAtomSize[device] = concurrentAccessAtomSize;
458469
}
459470
}
460471

@@ -497,6 +508,8 @@ struct SLayerContext
497508
std::map<cl_platform_id, std::vector<cl_svm_capabilities_khr>> TypeCapsPlatform;
498509
std::map<cl_device_id, std::vector<cl_svm_capabilities_khr>> TypeCapsDevice;
499510

511+
std::map<cl_device_id, size_t> ConcurrentAccessAtomSize;
512+
500513
std::map<cl_platform_id, SUSMFuncs> USMFuncs;
501514

502515
typedef std::map<const void*, SAllocInfo> CAllocMap;
@@ -1106,6 +1119,17 @@ cl_int CL_API_CALL clGetDeviceInfo_override(
11061119
ptr);
11071120
}
11081121
break;
1122+
case CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR:
1123+
{
1124+
const auto concurrentAccessAtomSize = getLayerContext().getConcurrentAccessAtomSize(device);
1125+
auto ptr = (size_t*)param_value;
1126+
return writeParamToMemory(
1127+
param_value_size,
1128+
concurrentAccessAtomSize,
1129+
param_value_size_ret,
1130+
ptr);
1131+
}
1132+
break;
11091133
default: break;
11101134
}
11111135

samples/usvm/00_usvmqueries/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ int main(
117117
printf("Device[%zu]: %s\n",
118118
d,
119119
devices[d].getInfo<CL_DEVICE_NAME>().c_str());
120+
printf("USM Concurrent Access Atom Size: %zu\n",
121+
devices[d].getInfo<CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR>());
120122

121123
std::vector<cl_svm_capabilities_khr> typeCapsDevice =
122124
devices[d].getInfo<CL_DEVICE_SVM_TYPE_CAPABILITIES_KHR>();

0 commit comments

Comments
 (0)