Skip to content

Commit

Permalink
switch from a bitfield type to an enum type
Browse files Browse the repository at this point in the history
  • Loading branch information
bashbaug committed Jun 20, 2024
1 parent f06fb3d commit c640106
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 112 deletions.
69 changes: 33 additions & 36 deletions layers/99_svmplusplus/emulate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ static cl_svm_type_exp getSVMMemType(
&type,
nullptr);
switch (type) {
case CL_MEM_TYPE_DEVICE_INTEL: return CL_SVM_TYPE_DEVICE_ALLOC_EXP;
case CL_MEM_TYPE_HOST_INTEL: return CL_SVM_TYPE_HOST_ALLOC_EXP;
case CL_MEM_TYPE_SHARED_INTEL: return CL_SVM_TYPE_SHARED_ALLOC_EXP;
case CL_MEM_TYPE_DEVICE_INTEL: return CL_SVM_TYPE_DEVICE_EXP;
case CL_MEM_TYPE_HOST_INTEL: return CL_SVM_TYPE_HOST_EXP;
case CL_MEM_TYPE_SHARED_INTEL: return CL_SVM_TYPE_SHARED_EXP;
default: break;
}
return 0;
Expand All @@ -83,9 +83,9 @@ static bool isUSMPtr(
const void* ptr)
{
cl_svm_type_exp type = getSVMMemType(context, ptr);
return type == CL_SVM_TYPE_DEVICE_ALLOC_EXP ||
type == CL_SVM_TYPE_HOST_ALLOC_EXP ||
type == CL_SVM_TYPE_SHARED_ALLOC_EXP;
return type == CL_SVM_TYPE_DEVICE_EXP ||
type == CL_SVM_TYPE_HOST_EXP ||
type == CL_SVM_TYPE_SHARED_EXP;
}

static cl_device_id getAssociatedDeviceFromProperties(
Expand Down Expand Up @@ -127,7 +127,7 @@ static std::vector<cl_device_svm_type_capabilities_exp> getSVMTypeCaps(cl_device
types.emplace_back();
cl_device_svm_type_capabilities_exp& type = types.back();

type.type = CL_SVM_TYPE_DEVICE_ALLOC_EXP;
type.type = CL_SVM_TYPE_DEVICE_EXP;
type.capabilities =
CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_EXP |
CL_SVM_CAPABILITY_DEVICE_OWNED_EXP |
Expand Down Expand Up @@ -155,7 +155,7 @@ static std::vector<cl_device_svm_type_capabilities_exp> getSVMTypeCaps(cl_device
types.emplace_back();
cl_device_svm_type_capabilities_exp& type = types.back();

type.type = CL_SVM_TYPE_HOST_ALLOC_EXP;
type.type = CL_SVM_TYPE_HOST_EXP;
type.capabilities =
CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_EXP |
CL_SVM_CAPABILITY_HOST_OWNED_EXP |
Expand Down Expand Up @@ -184,7 +184,7 @@ static std::vector<cl_device_svm_type_capabilities_exp> getSVMTypeCaps(cl_device
types.emplace_back();
cl_device_svm_type_capabilities_exp& type = types.back();

type.type = CL_SVM_TYPE_SHARED_ALLOC_EXP;
type.type = CL_SVM_TYPE_SHARED_EXP;
type.capabilities =
CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_EXP |
CL_SVM_CAPABILITY_HOST_ACCESSIBLE_EXP |
Expand Down Expand Up @@ -246,7 +246,7 @@ static std::vector<cl_device_svm_type_capabilities_exp> getSVMTypeCaps(cl_device
types.emplace_back();
cl_device_svm_type_capabilities_exp& type = types.back();

type.type = CL_MEM_SVM_FINE_GRAIN_BUFFER | CL_MEM_SVM_ATOMICS;
type.type = CL_SVM_TYPE_FINE_GRAIN_BUFFER_WITH_ATOMICS_EXP;
type.capabilities =
CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_EXP |
CL_SVM_CAPABILITY_HOST_ACCESSIBLE_EXP |
Expand All @@ -261,7 +261,6 @@ static std::vector<cl_device_svm_type_capabilities_exp> getSVMTypeCaps(cl_device
types.emplace_back();
cl_device_svm_type_capabilities_exp& type = types.back();

// Note: no flags are needed for the system allocator.
type.type = CL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP;
type.capabilities =
CL_SVM_CAPABILITY_SINGLE_ADDRESS_SPACE_EXP |
Expand Down Expand Up @@ -289,7 +288,7 @@ void* CL_API_CALL clSVMAllocWithPropertiesEXP_EMU(
{
cl_device_id device = getAssociatedDeviceFromProperties(properties);

if (type & CL_SVM_TYPE_DEVICE_ALLOC_EXP) {
if (type == CL_SVM_TYPE_DEVICE_EXP) {
// note: currently ignores flags!
return clDeviceMemAllocINTEL(
context,
Expand All @@ -299,7 +298,7 @@ void* CL_API_CALL clSVMAllocWithPropertiesEXP_EMU(
alignment,
errcode_ret);
}
if (type & CL_SVM_TYPE_HOST_ALLOC_EXP) {
if (type == CL_SVM_TYPE_HOST_EXP) {
// note: currently ignores flags!
return clHostMemAllocINTEL(
context,
Expand All @@ -308,7 +307,7 @@ void* CL_API_CALL clSVMAllocWithPropertiesEXP_EMU(
alignment,
errcode_ret);
}
if (type & CL_SVM_TYPE_SHARED_ALLOC_EXP) {
if (type == CL_SVM_TYPE_SHARED_EXP) {
// note: currently ignores flags!
return clSharedMemAllocINTEL(
context,
Expand All @@ -318,16 +317,17 @@ void* CL_API_CALL clSVMAllocWithPropertiesEXP_EMU(
alignment,
errcode_ret);
}
if (type & CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP) {
if (type == CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP) {
return g_pNextDispatch->clSVMAlloc(
context,
flags,
size,
alignment);
}
if (type & CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP) {
if (type == CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP ||
type == CL_SVM_TYPE_FINE_GRAIN_BUFFER_WITH_ATOMICS_EXP) {
cl_svm_mem_flags svmFlags = flags | CL_MEM_SVM_FINE_GRAIN_BUFFER;
if (type & CL_SVM_TYPE_ATOMICS_EXP) {
if (type == CL_SVM_TYPE_FINE_GRAIN_BUFFER_WITH_ATOMICS_EXP) {
svmFlags |= CL_MEM_SVM_ATOMICS;
}
return g_pNextDispatch->clSVMAlloc(
Expand Down Expand Up @@ -726,38 +726,35 @@ cl_int CL_API_CALL clSetKernelExecInfo_override(
param_name == CL_KERNEL_EXEC_INFO_SVM_INDIRECT_ACCESS_ENABLE_EXP ?
CL_TRUE :
CL_FALSE;
cl_int error = CL_SUCCESS;
auto types = *(cl_svm_type_exp*)param_value;
if (types & (CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP | CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP)) {
auto type = *(cl_svm_type_exp*)param_value;
switch (type) {
case CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP:
case CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP:
case CL_SVM_TYPE_FINE_GRAIN_BUFFER_WITH_ATOMICS_EXP:
assert(0 && "indirect access for coarse-grain and fine-grain SVM is currently unsupported");
}
if (types & CL_SVM_TYPE_DEVICE_ALLOC_EXP) {
error |= g_pNextDispatch->clSetKernelExecInfo(
return CL_INVALID_VALUE;
case CL_SVM_TYPE_HOST_EXP:
return g_pNextDispatch->clSetKernelExecInfo(
kernel,
CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL,
CL_KERNEL_EXEC_INFO_INDIRECT_HOST_ACCESS_INTEL,
sizeof(enable),
&enable);
}
if (types & CL_SVM_TYPE_HOST_ALLOC_EXP) {
error |= g_pNextDispatch->clSetKernelExecInfo(
case CL_SVM_TYPE_DEVICE_EXP:
return g_pNextDispatch->clSetKernelExecInfo(
kernel,
CL_KERNEL_EXEC_INFO_INDIRECT_HOST_ACCESS_INTEL,
CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL,
sizeof(enable),
&enable);
}
if (types & CL_SVM_TYPE_SHARED_ALLOC_EXP) {
error |= g_pNextDispatch->clSetKernelExecInfo(
case CL_SVM_TYPE_SHARED_EXP:
return g_pNextDispatch->clSetKernelExecInfo(
kernel,
CL_KERNEL_EXEC_INFO_INDIRECT_SHARED_ACCESS_INTEL,
sizeof(enable),
&enable);
default: break;
}
return error;
}
else {
return CL_INVALID_VALUE;
}
break;
return CL_INVALID_VALUE;
default: break;
}

Expand Down
36 changes: 21 additions & 15 deletions samples/usvm/00_usvmqueries/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,22 @@

#include <CL/opencl.hpp>

#define CASE_TO_STRING(_e) case _e: return #_e;

static const char* svm_type_to_string(cl_svm_type_exp type)
{
switch (type) {
CASE_TO_STRING(CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP);
CASE_TO_STRING(CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP);
CASE_TO_STRING(CL_SVM_TYPE_FINE_GRAIN_BUFFER_WITH_ATOMICS_EXP);
CASE_TO_STRING(CL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP);
CASE_TO_STRING(CL_SVM_TYPE_HOST_EXP);
CASE_TO_STRING(CL_SVM_TYPE_DEVICE_EXP);
CASE_TO_STRING(CL_SVM_TYPE_SHARED_EXP);
default: return "Unknown cl_svm_type_exp";
}
}

void PrintDeviceSVMCaps(
const char* label,
cl_device_svm_capabilities svmcaps )
Expand All @@ -23,23 +39,13 @@ void PrintDeviceSVMCaps(
( svmcaps & CL_DEVICE_SVM_SHARED_ALLOC_EXP ) ? "\n\t\tCL_DEVICE_SVM_SHARED_ALLOC_EXP" : "" );
}

void PrintSVMMemFlags(
void PrintUSVMType(
const char* label,
cl_svm_type_exp type)
{
if (type == 0) {
printf("\t\t%s: (none)\n", label);
} else {
printf("\t\t%s: %s%s%s%s%s%s%s\n",
label,
(type & CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP ) ? "\n\t\t\tCL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP" : "",
(type & CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP ) ? "\n\t\t\tCL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP" : "",
(type & CL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP ) ? "\n\t\t\tCL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP" : "",
(type & CL_SVM_TYPE_ATOMICS_EXP ) ? "\n\t\t\tCL_SVM_TYPE_ATOMICS_EXP" : "",
(type & CL_SVM_TYPE_DEVICE_ALLOC_EXP ) ? "\n\t\t\tCL_SVM_TYPE_DEVICE_ALLOC_EXP" : "",
(type & CL_SVM_TYPE_HOST_ALLOC_EXP ) ? "\n\t\t\tCL_SVM_TYPE_HOST_ALLOC_EXP" : "",
(type & CL_SVM_TYPE_SHARED_ALLOC_EXP ) ? "\n\t\t\tCL_SVM_TYPE_SHARED_ALLOC_EXP" : "");
}
printf("\t\t%s: %s\n",
label,
svm_type_to_string(type));
}

void PrintUSVMCaps(
Expand Down Expand Up @@ -118,7 +124,7 @@ int main(
for (size_t t = 0; t < usmTypes.size(); t++)
{
printf("\tUSM Type[%zu]:\n", t);
PrintSVMMemFlags( "type", usmTypes[t].type );
PrintUSVMType( "type", usmTypes[t].type );
PrintUSVMCaps("capabilities", usmTypes[t].capabilities);
}

Expand Down
34 changes: 19 additions & 15 deletions samples/usvm/01_usvmmeminfo/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,20 @@ getSVM_INFO_ASSOCIATED_DEVICE_HANDLE_EXP( cl::Context& context, const void* ptr
return device;
}

static const char*
svm_type_to_string( cl_svm_type_exp type )
#define CASE_TO_STRING(_e) case _e: return #_e;

static const char* svm_type_to_string(cl_svm_type_exp type)
{
if (type & CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP )return "CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP";
if (type & CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP ) return "CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP";
if (type & CL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP ) return "CL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP";
if (type & CL_SVM_TYPE_DEVICE_ALLOC_EXP ) return "CL_SVM_TYPE_DEVICE_ALLOC_EXP";
if (type & CL_SVM_TYPE_HOST_ALLOC_EXP ) return "CL_SVM_TYPE_HOST_ALLOC_EXP";
if (type & CL_SVM_TYPE_SHARED_ALLOC_EXP ) return "CL_SVM_TYPE_SHARED_ALLOC_EXP";
return "***Unknown SVM Type***";
switch (type) {
CASE_TO_STRING(CL_SVM_TYPE_COARSE_GRAIN_BUFFER_EXP);
CASE_TO_STRING(CL_SVM_TYPE_FINE_GRAIN_BUFFER_EXP);
CASE_TO_STRING(CL_SVM_TYPE_FINE_GRAIN_BUFFER_WITH_ATOMICS_EXP);
CASE_TO_STRING(CL_SVM_TYPE_FINE_GRAIN_SYSTEM_EXP);
CASE_TO_STRING(CL_SVM_TYPE_HOST_EXP);
CASE_TO_STRING(CL_SVM_TYPE_DEVICE_EXP);
CASE_TO_STRING(CL_SVM_TYPE_SHARED_EXP);
default: return "Unknown cl_svm_type_exp";
}
}

int main(
Expand Down Expand Up @@ -127,7 +131,7 @@ int main(
char* ptr0 = (char*)clSVMAllocWithPropertiesEXP(
context(),
nullptr,
CL_SVM_TYPE_HOST_ALLOC_EXP,
CL_SVM_TYPE_HOST_EXP,
CL_MEM_READ_WRITE,
16,
0,
Expand All @@ -136,7 +140,7 @@ int main(
char* ptr1 = (char*)clSVMAllocWithPropertiesEXP(
context(),
nullptr,
CL_SVM_TYPE_HOST_ALLOC_EXP,
CL_SVM_TYPE_HOST_EXP,
CL_MEM_READ_WRITE,
16,
0,
Expand Down Expand Up @@ -198,7 +202,7 @@ int main(
char* ptr0 = (char*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_DEVICE_ALLOC_EXP,
CL_SVM_TYPE_DEVICE_EXP,
CL_MEM_READ_WRITE,
16,
0,
Expand All @@ -207,7 +211,7 @@ int main(
char* ptr1 = (char*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_DEVICE_ALLOC_EXP,
CL_SVM_TYPE_DEVICE_EXP,
CL_MEM_READ_WRITE,
16,
0,
Expand Down Expand Up @@ -269,7 +273,7 @@ int main(
char* ptr0 = (char*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_SHARED_ALLOC_EXP,
CL_SVM_TYPE_SHARED_EXP,
CL_MEM_READ_WRITE,
16,
0,
Expand All @@ -278,7 +282,7 @@ int main(
char* ptr1 = (char*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_SHARED_ALLOC_EXP,
CL_SVM_TYPE_SHARED_EXP,
CL_MEM_READ_WRITE,
16,
0,
Expand Down
4 changes: 2 additions & 2 deletions samples/usvm/100_udmemhelloworld/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,15 @@ int main(
cl_uint* d_src = (cl_uint*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_DEVICE_ALLOC_EXP,
CL_SVM_TYPE_DEVICE_EXP,
CL_MEM_READ_WRITE,
gwx * sizeof(cl_uint),
0,
nullptr );
cl_uint* d_dst = (cl_uint*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_DEVICE_ALLOC_EXP,
CL_SVM_TYPE_DEVICE_EXP,
CL_MEM_READ_WRITE,
gwx * sizeof(cl_uint),
0,
Expand Down
6 changes: 3 additions & 3 deletions samples/usvm/101_udmemlinkedlist/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ static void init( cl::Context& context, cl::Device& device )
d_head = (Node*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_DEVICE_ALLOC_EXP,
CL_SVM_TYPE_DEVICE_EXP,
CL_MEM_READ_WRITE,
sizeof(Node),
0,
Expand All @@ -75,7 +75,7 @@ static void init( cl::Context& context, cl::Device& device )
h_cur.pNext = (Node*)clSVMAllocWithPropertiesEXP(
context(),
props,
CL_SVM_TYPE_DEVICE_ALLOC_EXP,
CL_SVM_TYPE_DEVICE_EXP,
CL_MEM_READ_WRITE,
sizeof(Node),
0,
Expand Down Expand Up @@ -239,7 +239,7 @@ int main(
}
#endif
kernel = cl::Kernel{ program, "WalkLinkedList" };
cl_svm_type_exp indirectSVM = CL_SVM_TYPE_DEVICE_ALLOC_EXP;
cl_svm_type_exp indirectSVM = CL_SVM_TYPE_DEVICE_EXP;
clSetKernelExecInfo(
kernel(),
CL_KERNEL_EXEC_INFO_SVM_INDIRECT_ACCESS_ENABLE_EXP,
Expand Down
4 changes: 2 additions & 2 deletions samples/usvm/200_uhmemhelloworld/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,15 @@ int main(
cl_uint* h_src = (cl_uint*)clSVMAllocWithPropertiesEXP(
context(),
nullptr,
CL_SVM_TYPE_HOST_ALLOC_EXP,
CL_SVM_TYPE_HOST_EXP,
CL_MEM_READ_WRITE,
gwx * sizeof(cl_uint),
0,
nullptr );
cl_uint* h_dst = (cl_uint*)clSVMAllocWithPropertiesEXP(
context(),
nullptr,
CL_SVM_TYPE_HOST_ALLOC_EXP,
CL_SVM_TYPE_HOST_EXP,
CL_MEM_READ_WRITE,
gwx * sizeof(cl_uint),
0,
Expand Down
Loading

0 comments on commit c640106

Please sign in to comment.