Skip to content

Commit 501bd3c

Browse files
committed
change the concurrent access atom size query to return an array
1 parent 405efd5 commit 501bd3c

3 files changed

Lines changed: 19 additions & 15 deletions

File tree

include/CL/opencl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,8 +1577,8 @@ 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) \
1581-
\
1580+
F(cl_device_info, CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR, cl::vector<size_type>) \
1581+
\~
15821582
F(cl_svm_pointer_info_khr, CL_SVM_INFO_TYPE_INDEX_KHR, cl_uint) \
15831583
F(cl_svm_pointer_info_khr, CL_SVM_INFO_CAPABILITIES_KHR, cl_svm_capabilities_khr) \
15841584
F(cl_svm_pointer_info_khr, CL_SVM_INFO_PROPERTIES_KHR, cl::vector<cl_svm_alloc_properties_khr>) \

layers/99_svmplusplus/emulate.cpp

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

251-
const size_t getConcurrentAccessAtomSize(cl_device_id device)
251+
const std::vector<size_t>& getConcurrentAccessAtomSizes(cl_device_id device)
252252
{
253-
return ConcurrentAccessAtomSize[device];
253+
return ConcurrentAccessAtomSizes[device];
254254
}
255255

256256
const SUSMFuncs& getUSMFuncs(cl_platform_id platform)
@@ -434,7 +434,7 @@ struct SLayerContext
434434

435435
for (auto device: devices) {
436436
std::vector<cl_svm_capabilities_khr> typeCapsDevice;
437-
size_t concurrentAccessAtomSize = 0;
437+
std::vector<size_t> concurrentAccessAtomSizes;
438438

439439
for (auto caps: typeCapsPlatform) {
440440
if ((caps & CL_SVM_TYPE_MACRO_DEVICE_KHR) == CL_SVM_TYPE_MACRO_DEVICE_KHR) {
@@ -459,13 +459,17 @@ struct SLayerContext
459459
assert(0 && "unknown platform SVM type");
460460
}
461461

462-
if (!typeCapsDevice.empty() && (typeCapsDevice.back() & CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR)) {
463-
concurrentAccessAtomSize = 1;
462+
if (typeCapsDevice.size() > concurrentAccessAtomSizes.size()) {
463+
if (typeCapsDevice.back() & CL_SVM_CAPABILITY_CONCURRENT_ACCESS_KHR) {
464+
concurrentAccessAtomSizes.push_back(1);
465+
} else {
466+
concurrentAccessAtomSizes.push_back(0);
467+
}
464468
}
465469
}
466470

467471
TypeCapsDevice[device] = typeCapsDevice;
468-
ConcurrentAccessAtomSize[device] = concurrentAccessAtomSize;
472+
ConcurrentAccessAtomSizes[device] = concurrentAccessAtomSizes;
469473
}
470474
}
471475

@@ -508,7 +512,7 @@ struct SLayerContext
508512
std::map<cl_platform_id, std::vector<cl_svm_capabilities_khr>> TypeCapsPlatform;
509513
std::map<cl_device_id, std::vector<cl_svm_capabilities_khr>> TypeCapsDevice;
510514

511-
std::map<cl_device_id, size_t> ConcurrentAccessAtomSize;
515+
std::map<cl_device_id, std::vector<size_t>> ConcurrentAccessAtomSizes;
512516

513517
std::map<cl_platform_id, SUSMFuncs> USMFuncs;
514518

@@ -1121,11 +1125,11 @@ cl_int CL_API_CALL clGetDeviceInfo_override(
11211125
break;
11221126
case CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR:
11231127
{
1124-
const auto concurrentAccessAtomSize = getLayerContext().getConcurrentAccessAtomSize(device);
1128+
const auto& sizes = getLayerContext().getConcurrentAccessAtomSizes(device);
11251129
auto ptr = (size_t*)param_value;
1126-
return writeParamToMemory(
1130+
return writeVectorToMemory(
11271131
param_value_size,
1128-
concurrentAccessAtomSize,
1132+
sizes,
11291133
param_value_size_ret,
11301134
ptr);
11311135
}

samples/usvm/00_usvmqueries/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,15 @@ 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>());
122-
123120
std::vector<cl_svm_capabilities_khr> typeCapsDevice =
124121
devices[d].getInfo<CL_DEVICE_SVM_TYPE_CAPABILITIES_KHR>();
122+
std::vector<size_t> concurrentAccessAtomSizes =
123+
devices[d].getInfo<CL_DEVICE_SVM_CONCURRENT_ACCESS_ATOM_SIZE_KHR>();
125124
for (size_t t = 0; t < typeCapsDevice.size(); t++)
126125
{
127126
printf("USM Type[%zu]:\n", t);
128127
printf("\tinferred name: %s\n", get_svm_name(typeCapsDevice[t]));
128+
printf("\tconcurrent access atom size: %zu\n", concurrentAccessAtomSizes[t]);
129129
PrintUSVMCaps("\tcapabilities: ", typeCapsDevice[t]);
130130
}
131131

0 commit comments

Comments
 (0)